不想面试被拷打,学的东西又都还给亲爱的唐华老师了,不复习都不行了haha…

计算机网络的体系结构

关于体系结构

在计算机网络的基本概念中,分层次的体系结构(或架构)是最基本的。 相互通信的两个计算机系统必须高度协调工作才行,而这种“协调”又相当复杂。为了设计这样复杂的计算机网络,早在最初的ARPANET设计时即提出了分层的方法。 在1974年美国的IBM公司推出了资金及的系统网络体系结构SNA之后,不同公司也相继推出自己公司的具有不同名称的体系结构。不同的网络体系结构出现后,使用同一个公司生产的各种设备都能够很容易的互连成网,但由于网络体系结构的冈,不同公司的设备很难互通。为了解决这个难题,国际标准化组织ISO提出了一个试图使各种计算机在世界范围内互联成网的标准框架,即著名的开放系统互连基本参考模型OSI/RM,也就是所谓的七层协议的体系结构。 但由于种种原因,OSI只取得了一些理论研究的成果,在市场化方面则事与愿违的失败了。现如今规模最大的,覆盖全球的、基于TCP/IP的互联网并未使用OSI标准。TCP/IP是事实上的国际标准。 ——《计算机网络》

关于协议与划分层次

在计算机网络中要做到有条不紊地交换数据就必须遵守一些事先约定好的规则,这些规则明确规定了所交换的数据的格式以及有关的同步问题。 这些为网络中的数据交换而建立的规则、被准或约定被称为网络协议。 ARPANET的研制经验表明,对于非常复杂的计算机网络协议,其结构应该是层次式的。 计算机网络的各层及其协议的集合,就是网络的体系结构。 ——《计算机网络》

TCP/IP的四层体系结构

在互联网所使用的各种协议中,最重要和最著名的就是TCP和IP两个协议,现在人们常提到的TCP/IP并不一定是单指TCP和IP两个具体的协议,而是表示互联网所使用的整个TCP/IP协议族。

从上到下分别为:

应用层

应用层包含了各种应用层协议如DNS、HTTP、SMTP等,应用层的任务是通过应用进程间的交互来完成特定网络应用。应用层协议定义的是应用进程间通信和交互的规则。这里的进程指的是主机中正在运行的程序。 我们把应用层交互的数据单元称为报文。

运输层

运输层的任务就是负责向两台主机中进程之间的通信提供通用的数据传输服务,应用层利用该服务传送应用层报文。由于一台主机可以同时运行多个进程,因此运输层有复用和分用的功能。复用就是多个应用层进程可同时使用下面运输层的服务,分用是运输层把收到的信息分别交付上层应用层中的相应进程。运输层主要使用以下两种协议:

TCP:提供面向连接的,可靠的数据传输服务,其数据传输的单位是报文段。UDP:提供无连接的尽最大努力的数据传输服务(不保证数据传输的可靠性),其数据传输的单位是用户数据报。

网际层IP(网络层)

网络层负责为分组交换网上的 不同主机 提供通信服务。 网络层会把运输层产生的报文段或者用户数据报封装成分组或包进行传送,在TCP/IP体系中由于网络层使用了IP协议,因此分组也叫IP数据报。 网络层的目的就是使源主机运输层传递下来的分组通过合适的路由最终到达目的主机。

链路层

链路层也可以理解成数据链路层+物理层。 数据链路层在两个相邻节点之间传送数据的时候,数据链路层把网络层传递下来的IP数据报组装成帧,在两个相邻节点间的链路上传送帧。每一帧包括数据和必要的控制信息(如同步信息、地址信息、差错控制等) 物理层更偏向传播介质如电缆、光纤等。

流程

假设左边是主机A右边是主机B,A的某个应用进程AP要向B的某个应用进程BP发送数据,AP先将数据交给本主机的应用层,应用层加上必要的控制信息H5就变成了下一层(运输层)的数据单元。运输层收到这个数据单元之后,加上本层的控制信息H4再交给下一层(网络层),成为网络层的数据单元。以此类推。不过早了数据链路层之后控制信息会被分为头和尾两部分(H2和T2),而第一层是比特流传送,所以不再加上控制信息。

应用层

这里着重讲HTTP,HTTP协议在这里简单理解成一种数据格式即可。 同一资源定位符URL它可以唯一标识万维网上的一个资源(文字、视频、音频……),URL的一般形式就是常见的协议+主机+域名+端口号。 而HTTP协议定义了**浏览器(万维网客户端进程)**是如何向万维网服务器请求万维网文档,以及服务器是怎样把文档传送给浏览器的。 在浏览器输入一个URL后的过程如下:

浏览器分析URL浏览器向DNS请求解析IP地址DNS解析出IP地址浏览器与服务器建立TCP连接浏览器发出取文件的命令服务器响应释放TCP连接浏览器显示

关于HTTP,首先他是无状态的,同一个会话的连续两个请求互相不了解,他们由最新实例化的环境进行解析,除了应用本身可能已经存储在全局对象中的所有信息外,该环境不保存与会话有关的任何信息。为了识别用户需要借助cookie来实现。 其次虽然HTTP采用TCP作为传输层协议,但是HTTP协议本身是无连接的(通信双方在交换HTTP报文之前不需要先建立HTTP连接) 关于浏览器是如何发送这份HTTP请求的?在这里还是把HTTP协议理解成一种特定格式的数据,然后浏览器会调用操作系统上能向互联网发送数据的相关的API,建立TCP连接 (言下之意就是,TCP连接的建立实在操作系统这一层实现的。操作系统关心的是数据的传输,而不关心这个数据是不是长着一张HTTP模样的脸。而浏览器,或者Tomcat这些运行在操作系统上的应用程序才会关注数据的格式),然后发送数据。 HTTP的连接方式分为持久连接和非持久连接(长连接)。如果是非持久连接,那么浏览器在向服务器请求资源的时候,先建立TCP连接,然后服务器会发送HTTP响应报文,之后浏览器每次重新请求都要重新建立TCP连接。在这种情况下,一次成功的HTTP请求需要发送9个数据包(3次握手+前端请求+后端响应+4次挥手)。 而如果是持久连接(此时HTTP请求头的connection的值为keep-alive,如果是短连接,这个值就是close),在浏览器与服务器建立TCP连接并且服务器发送响应报文之后,TCP连接不会立刻断开,之后每次向服务器请求资源,只要先发送一个请求把TCP连接维持住即可,不用重新建立新的TCP连接。 但是TCP的长连接和HTTP的长连接又有什么区别呢?首先要讲清楚连接到底是什么东西。如果讨论的是TCP,在客户端和服务端进行了3次握手之后,“连接”就像在客户端和服务端创建了一个socket(操作系统上的一个概念)对象,socket对象记录了这次对话的信息。而且,TCP的长连接有一个“保活探测”功能,用来探测连接的另一端是否仍然在线。所以TCP的长连接更多的是维护双方是否仍然同时在线的问题,即检测连接的有效性。 但是HTTP的长连接属于应用层,它关注的重点是对方能否提供一个稳定的应用服务。假设我们进入百度后浏览器发送了100个HTTP请求,再假设百度他们的服务端假设用的是Tomcat,首先浏览器会和Tomcat建立一个socket连接,当Tomcat收到浏览器的HTTP请求,而且请求头的connection的值为keep-alive时,则在返回响应数据后socket仍会保持活跃,当浏览器再次发送HTTP请求的时候,不必建立新的TCP连接。

运输层

UDP

先提一嘴UDP这个所谓的不可靠、无连接的服务。UDP只在IP数据报的基础上增加了很少的功能,即复用分用和差错检测。UDP在传送数据之前不需要建立连接,收到UDP报文之后也不需要给出任何的确认,所以它的时延会很小,报文头部附加的额外信息也少,适用于小文件,适合一次性传输少量数据的网络应用。而且它没有拥塞控制,所以适合很多实时应用。

TCP

TCP的特点

TCP协议是比较可靠的面向连接的传输层协议。 面向连接是指用户在使用TCP协议之前必须建立TCP连接,在使用完TCP协议后再释放连接。 每一条TCP连接只能有两个端点,每一条TCP连接都是点对点的,因此TCP协议无法用于广播。 TCP连接提供可靠交付的服务,无差错、不丢失、不重复、按序抵达。 TCP提供全双工通信(连接的双端都可以同时发送数据和同时接受数据),所以TCP连接的两端都设置有发送缓存(准备发送的数据&已发送但尚未收到确认的数据)和接收缓存(按序抵达但尚未被接受应用程序读取的数据&不按序抵达的数据)。 TCP协议是面向字节流的,他把应用程序传递下来的数据看成仅仅是一连串的无结构的字节流。

TCP报文段的首部信息

TCP报文段包括TCP报文段的首部和TCP报文段的数据部分。 TCP报文段的首部记录了以下信息:

源端口目的端口序号(seq),在一个TCP连接中传送的字节流中的每一个字节都按顺序编号。序号字段表示本报文段所发送数据的第一个字节的符号,如上图中正在传输的TCP报文数据段中的首部的序号就是1。确认号(ack),期望收到对方下一个报文段的第一个数据字节的符号,如果确认号为N,则证明序号N-1为止的所有数据都已被正确收到。以上图为例,当正在传输的TCP报文段被接收方接收并存入TCP缓存之后,就可以向发送端发送一个新的TCP报文,其中的确认号为4,表示期望接收到发送方下一个报文段的第一个字节符号为4,并且告诉发送方符号在4之前的数据字节已被成功接收。数据偏移(TCP报文段的数据起始处距离TCP报文段的起始处有多远,即指明了当前TCP报文段的首部长度)保留紧急位URG,为1时表明此报文中存在紧急数据,不用在发送缓存里排队,应该尽快传送确认位ACK,为1时确认号有效,在建立连接后应该把所有传送的报文段的ACK都置为1推送位PSH,为1时接收方应该尽快把此TCP报文段交付给应用进程,不应在接收缓存中排队复位RST,为1时表明TCP链接中出现严重差错,必须释放连接,然后再重新建立连接。同步位SYN,为1时表示这是一个连接请求/连接接收报文。终止位FIN,为1时表示此报文段发送方数据已经发完,要求释放连接。窗口,指的是发送本报文段的一方的接收窗口(接收缓存),即现在允许对方发送的数据量(B可以根据A发送给B的TPC报文段的窗口调整B的发送缓存)。校验和,检验首部 + 数据紧急指针,只有URG为1才有意义,指出本报文段中紧急数据的字节数(即使TCP报文段首部的URG为1,其数据部分也不一定全是紧急数据。如果此时紧急指针为50,则说明此报文的数据部分从0到第50个字节的数据是紧急数据,剩下的是非紧急数据)。选项,包括MSS、窗口扩大、时间戳、选择确认等填充,保证TCP的首部是4字节的整数倍

TCP连接管理

TCP连接传输的三个阶段:

建立连接数据传送释放连接

TCP连接的建立采用客户-服务器方式,主动发起连接建立的应用进程叫做客户,而被动等待连接建立的应用进程叫做服务器。

TCP连接的建立(三次握手)

假设运行在一台主机(客户)上的一个进程想要和另一台主机(服务器)上的一个进程建立一条连接,客户应用进程首先通知客户TCP,他想建立一个与服务器上某个进程之间的连接,客户中的TCP会用以下步骤与服务器中的TCP建立一条TCP连接: 第一次握手,客户端发送连接请求报文段,无应用层数据,TCP报文段首部的SYN=1,seq=x(随机)。 第二次握手,服务器为该TCP连接分配缓存和变量,并向客户端返回确认报文段,允许连接,无应用层数据,TCP报文段首部SYN=1,ACK=1,seq=y(随机),ack=x+1。 第三次握手,客户端为该TCP练级而分配缓存和变量,冰箱服务器端返回确认的确认,可以携带应用层的数据,TCP报文段首部SYN=0,ACK=1,seq=x+1,ack=y+1。

TCP连接的释放(四次挥手)

参与一条TCP连接的两个进程中的任何一个都能终止该连接结束后,主机中的缓存和变量也将被释放。TCP连接的释放过程如下: 第一次挥手,客户端发送连接释放报文段(FIN=1,seq=u),停止发送数据,主动关闭TCP连接。 第二次挥手,服务端返回一个确认报文段(ACK=1,seq=v,ack=u+1),客户到服务器这个方向的连接就被释放了——半关闭状态。 第三次挥手,服务器端发送完数据,就发送连接释放报文段(FIN=1,ACK=1,seq=w,ack=u+1),主动关闭TCP连接。 第四次挥手,客户端回送一个确认报文段,再等到时间等待计时器设置的最长报文段寿命后,彻底关闭连接。

TCP的可靠传输

网络层提供尽最大努力的交付,但是是不可靠的传输,所以可靠的传输要靠上一层的传输层中的TCP协议。但是如果传输层的协议使用的是UDP,则可靠的传输要靠再上一层的应用层来提供 (可靠指的是接收方进程从缓存区中读出的字节流与发送方发出的字节流是完全一样的) 。 TCP实现可靠传输的机制包括:校验、序号、确认、重传。 关于校验,与UDP一样都是在发送方和接收方增加一个伪首部,待会细说。 关于序号,一个字节占用一个序号,报文段首部中的序号字段指的是一个报文段的第一个字节的序号。 关于确认和重传,假设现在发送方的发送缓存里面有[1,2,3,4,5,6,7,8,9],然后先发送了[1,2,3]给接收方,发送之后发送方暂时不会把[1,2,3]从发送缓存中丢掉,而是当接收方接收到[1,2,3],并且返回了一个确认报文段(此报文段的头部的确认号为4),并且这个确认报文段被发送方接收后,发送方才会将[1,2,3]从发送缓存中丢掉。之后假设发送方分别发送了[4,5,6]和[7,8]给接收方,而由于网络或者路由等种种原因接收方先收到的是[7,8],在未收到[4,5,6]的报文段的时候他仍然会向发送方发送一个确认报文段,该确认报文段的头部的确认号仍然为4,发送方接收到这个确认报文段之后就会重新发送[3,4,5]这个报文段,依次来保证可靠性。

TCP的流量控制

TCP使用滑动窗口的机制,来控制发送方发送数据的速率,目的是让接收方来得及接收数据。 在通信过程中,接收方根据自己的接收缓存的大小,动态的调整发送方的发送窗口的大小,即接收窗口rwnd(接收方设置确认报文段的窗口字段来讲rwnd通知给发送方),发送方的发送窗口大小去接收窗口rwnd和拥塞窗口cwnd的最小值。

TCP的拥塞控制

当网络中对资源需求的总和大于可用的资源就会出现拥塞,而TCP会通过种种算法防止过多的数据注入到网络中。

网络层

网络层的主要任务是把分组从源端传送到目的端,为分组交换网上的不同主机提供通信服务。网络层传输单位是数据报(数据长是比较长的数据,分组是数据报的切割,或者说片段)。网络层主要有以下功能:

路由选择与分组转发(寻找最佳的路劲)异构网络的互联(4G、5G、WIFI、校园网……)拥塞控制(减缓或避免网络的拥塞)

路由器

路由器是网络层中的硬件,路由器根据其配置的路由表,结合路由算法可以决定分组在抵达这个路由器时,下一个目的路由器是哪个,从而找出一条最佳的路劲来将分组从源端传送到目的端。此处的“最佳路径”是在某一时刻的最佳路径。

IP数据报

一个IP数据包包含首部(包含固定部分和可变部分)和数据部分(数据部分又包含TCP、UDP段)。 IP数据包的首部的固定部分包含以下内容:

版本(IPv4 or IPv6?)首部长度,是4字节的整数倍区分服务,指期望获得哪种类型的服务总长度,即指整个IP数据报的长度,是16字节的整数倍标识标志片偏移,与分片相关(如果IP数据报在往头部和尾部都加入额外信息,并封装成帧后,大小超过了数据链路层规定的最大的帧大小,则需要进行分片。)生存时间,指的是IP分组的保质期。没经过一个路由器就减1,为0则丢弃协议,指的是运输层使用的是哪种协议首部校验和源地址,长度为32位目的地址,长度为32位

IP数据包的首部的固定部分包含以下内容:

可选字段(长度可变),用来支持排错、测量以及安全等措施填充,为了实现一个补全的功能

IP地址

是指互联网协议地址(Internet Protocol Address),是用于在互联网上唯一标识一个设备或网络的数字或字母组合。IP地址是IP协议提供的一种统一的地址格式,为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。它是连接到网络的设备的编号,用于在网络中交换数据时防止通信错误。每个连接到互联网的设备都会被分配一个唯一的IP地址,以便其他设备能够找到并与其进行通信。IP地址通常由网络提供商提供,并且可以根据其地址确定设备的大致地理位置。IP地址分为IPv4和IPv6 (从根本上解决IP4地址分配即将耗尽的方法) 两种主要类型,其中IPv4地址由32位二进制数表示,而IPv6地址则由128位二进制数表示。为了方便人们的使用,IP地址通常被写成十进制的形式,中间使用符号“.”分隔不同的字节,如:192.168.0.1。 一个IP地址标识的是一台主机上的一个接口,而非一台主机。而IP地址后面可能会携带端口号,端口号则可以唯一的标识该主机上的某一个进程。 顺便提一嘴MAC地址,MAC地址是物理地址,IP地址是逻辑地址。MAC地址是不可改变的,IP地址是可以更改的。MAC地址具有唯一性,每个硬件出厂时候的MAC地址是固定的;IP地址不具备唯一性,因此,很多应用软件是围绕MAC地址开发的。

网络地址转换NAT

指在专用网连接到因特网的路由器上安装NAT软件,安装了NAT软件的路由器也叫NAT路由器,他至少有一个有效的外部全球IP地址。

云里雾里的

参考阅读

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: