《图解TCP与IP》之要点提炼

基础

OSI七层结构

7.应用层:负责使用特殊的协议
6.表示层:将数据转换为标准的形式
5.会话层:通信管理,负责建立连接与断开连接的时机(考虑什么时候开始连接,以哪种方式连接)
4.传输层:负责可靠传输,进行实际的建立连接与断开连接
3.网络层:地址管理和路由选取,选取哪条路由来传输数剧
2.数据链路层:负责物理层面上的互联
1.物理层:将0,1转换为物理介质

例子: 主机A要向主机B发送一个早上好。
在这里插入图片描述
应用层:在发送端会在所发送信息前附加一个首部。在接收端会分析其数据首部以及收据正文,并将由邮件存储。
表示层:发送端将"早上好"转换成网络通用的数据格式,在接收端将网络通用的数据格式转换为该计算机特定的数据格式。
会话层:会话层判断如何高效地进行数据交互、采用何种方式传输。
连接层:由连接层建立实际的连接与断开连接,同时保持数据的可靠性:如果在接收端数据没有完全到达,则会重发。
网络层:基于目的地址,在网络层进行数据包的发送处理。
数据链路层:通过传输介质互连的设备之间进行数据处理。
物理层:将数据的0,1转换为电压和脉冲光,而相互直连的设备之间使用地址传输。

为什么有了MAC地址还要有IP地址

MAC地址与IP地址相比,IP地址具有层次性。

电路交换与分组交换

在电路交换时,当计算机在收发消息时,会独占整个电路,而其他计算机只能等待它处理结束后才可以使用这条电路。而分组通信中将计算机所要发送的数据分成多个组,按顺序的发送消息。同时,分组的首部有发送者和接收者的地址,允许同一条线路同时为多个用户提供服务,这样就提高了通信线路的利用率

在分组交换中由路由器连接通信线路。分组交换的大致过程为:发送端计算机将数据分组发送到路由器,路由器将数据缓存到自己的缓冲区,然后在转发给目标计算机。
在这里插入图片描述

TCP/IP的四层结构

四层结构

应用层、传输层、网络层、网络接口层(物理层和数据链路层)。
在这里插入图片描述
网络接口层利用以太网中的数据链路进行通信

网络层基于IP地址转发分包数据。其中包括协议:IP协议(使用IP地址作为唯一标识,虽然是分组交换的协议,但不具有重发的功能,属于非可靠性传输机制)、ICMP协议:用于当数据包发送失败时,返回给发送者异常的协议。ARP协议:(Address resloution protocol)用于将数据包中IP地址中的MAC地址解析出来。

传输层让应用程序之间实现通信。其中包括协议:TCP协议/UDP协议。TCP协议这里简单介绍为有连接的传输协议,可以有效利用带宽,缓解网络拥堵;而UDP为无连接(不关注对端是否接收到了信息)的传输协议,适用于视频通信等多媒体领域

应用层实现了OSI模型中的应用层、表示层、会话层的功能。其中包含协议:HTTP(用于浏览器与服务端通信),SMTP(simple Mail Transfer Protocol用于邮件的协议),FTP(file transfer protocol,用于文件的协议),TELNET、SSH协议(远程登录协议)、SNMP(simple Network Manger protocol网络管理协议)

TCP/IP传输实例

发送数据包

(1)应用程序处理:编码处理,并开始建立TCP连接;

(2)TCP模块处理:负责建立连接,发送数据域断开连接;并在应用层前端加上TCP首部;

(3)IP模块处理:IP将TCP模块发来的TCP首部与数据当做数据,并在TCP首部前加上IP首部;IP包生成后,参考路由控制表决定接受此IP包的路由或主机,随后将发送给这些路由或主机的驱动程序。如果没有MAC地址,将通过ARP协议查找。拥有了MAC地址和IP地址就可以交给以太网的驱动程序。

(4)网络接口的处理:在IP模块传来的IP包前加上以太网首部,并进行发送处理。通过物理层传输发送给接收者
在这里插入图片描述

数据包

每层协议都会对所发送的数据前面加上一个首部,其中包括发送端与接送端的地址,以及协议信息。在发送端时,从上往下传输的过程中,会直接把发过来的数据包当做内容,直接在前面加上自己的首部。下图分别是网络接口层、网络层、传输层。
在这里插入图片描述
注意:这里的首部至少都会包含两个信息:发送端与接收端的地址,上一层的协议类型。对于
发送端和接收端的地址
,以太网中用的是MAC地址,IP会用IP地址,而TCP中使用的是识别两端主机的地址(端口号)此外,每个分组包的首部都会带有标识位,它是用来标识上一层协议的种类信息
在这里插入图片描述

TCP与UDP

有连接与无连接

在这里插入图片描述
面向有连接时,在发送数据之前,需要在收发主机之间连接一条通信线路。也就是说,在通信传输后,要专门进行建立和断开连接的处理。如果与对端之间无法通信,就可以避免发送无谓的数据

面向无连接时,则不要求建立连接和断开连接,发送端可以由任何时候自由地发送数据。即使接收端不存在或无法接受数据,发送端也会将数据发送。

TCP

TCP是面向连接的,可靠的流协议。TCP为提供可靠性传输,实行顺序控制重发控制机制,此外还具有流控制拥塞控制提高网络利用率等诸多功能。

通过序列号与确认应答提高可靠性

当数据从A发送到主机B时,主机B会返回主机A一个确认应答(ACK)
在这里插入图片描述
在一定时间内,没有收到确认应答,则认为数据丢失,需要重新发数据,因此即使丢包,仍然能保证数据到达对端。
在这里插入图片描述
但未收到应答,不代表是数据丢包,也可能是应答在传输回去的时候丢失。这种情况也会导致发送端重新发送数据。在这种情况下接收端会判断已经接收到1-1000的数据而放弃接收。
在这里插入图片描述
TCP中使用序列号来完成应答与判断是否接受过相同数据。

  • 序列号是按顺序给发送的每一个字节都标上号码的编号。
  • 接收端查询接收数据TCP的首部与数据长度,将自己下一步要接收的数据作为应答返送回发送端。

这里要注意:ACK只是TCP包中ACK标志位为1,而具体的应答值在序列ack中(比如已经接收到了1-1000,下一次期望接收的数据就是从1001开始)
在这里插入图片描述

重发超时的确定

**重发超时是指当应答没有收到的时间超过多久时需要重发数据。**会在每次发包之前计算往返时间与计算偏差,并将二者求和后,变成重发超时。

根据网络环境的不同可能会对往返时间造成较大影响,之所以造成这种情况的原因是因为分组的数据包是在不同的线路中到达的。一般的重发超时设置为0.5s的整数倍,初始一般为6s。
在这里插入图片描述
数据在重发之后,如果还是没有收到应答会再次发送;但不会始终重复发送,达到一定次数后,仍然没有应答就会强制关闭连接。

建立连接(三次握手,发的是三个数据包)

TCP在传输数据前必须要建立连接。

位码即tcp标志位,有6种标示:SYN(synchronous建立联机) **ACK(**acknowledgement 确认位) PSH(push传送) FIN(finish结束位) RST(reset重置) URG(urgent紧急)Sequence number(序号) Acknowledge number(确认号码)。

可以理解seq序号是传送数据时的第一个数据字节。ack是确认号,也就是ACK返回的具体序号,也就是期待下一次发送数据包时数据的第一个字节的序号。

三次握手(会发送三个包)过程如下:
第一次握手:首先发送端会发送一个(SYN位为1,seq序列号为当前第一个数据字节(以k为例))的数据包到接收端尝试与接收端建立连接;

第二次握手:接收端会返回发送端一个(ACK位为1,ack位(确认号)等于seq值+1,seq位为当前第一个数据字节(以N为例),SYN位为1)的数据包;

第三次握手:会检查返回的数据包中ACK位是否为1且ack确认号是否为k+1,正确的话,发送端将发送给接收端一个数据包(ACK=1,ack=N+1)返回接收端。接收端会判断是否ACK=1且ack为N+1,全部正确的话则建立连接,可以发送数据。
在这里插入图片描述
引申:为什么不是两次握手呢?
为了防止发送端的连接请求受到延迟到达接收端,而接收端误以为这是一个连接请求,而发送回应答,如果仅是两次握手的应答就开始连接的话,此时发送端不会向接收端发送数据,就会造成资源浪费。而如果是三次握手,当服务端没有收到客户端应答服务端的应答时,就不会建立连接

TCP以段为单位发送数据(MSS最大消息长度)

在建立连接时,也可以确定发送数据包的单位。我们称其为MSS(最大消息长度)。两端的主机在三次握手时,会在TCP首部写入MSS,告诉对方能够自己所能适应的MSS大小,最终MSS会选择二者中较少的那个。
TCP在发送大量数据时,是以MSS的大小进行分割的,进行重发时,也是以MSS为单位重发。
在这里插入图片描述

利用窗口控制提高速度(窗口内每段数据无需等待前一段的应答)

TCP以一个段为传输的单位来发送数据,这样的话在发送下一段数据之前需要收到第一段的应答(ACK)。这样段越长,就会导致等待时间越长。
在这里插入图片描述
TCP中设置了滑动窗口这个概念,**在窗口中的数据,可以不用等待前一段数据的确认应答,直接发送到发送端。**以窗口为4000为例,1-1000,1001-2000,20001-3000,3001-4000可以直接按顺序发送。而当1001这个确认应答返回后,才可以继续发送下一个窗口的数据(4001-5000)
在这里插入图片描述
可以看到上图中窗口中分为四个段,窗口中未发送的及未收到应答的都要在发送端的缓冲区缓存,当收到确认应答后,才可以清除。
下图为窗口的滑动。
在这里插入图片描述

窗口控制与重发控制(根据后面的应答可以确定前面,快重传:三次重传)

首先窗口控制没有确认应答也不受影响。例子为1001这个应答没有返回,但返回了2001应答,就可以证明当前接收端已经接受了1-2000的数据。
在这里插入图片描述
当接收主机接收到的数据与应该接收的信息不同时,会根据当前所接收到的数据返回确认应答(比如下图中一直没有接收到1001-2000,所以即使接收到了2001-3000,之后仍然返回1001);同时即使接收端接收的数据包序列号不连续,也不会丢弃,而是暂时存在缓存区。

**高速重发控制(快启动)**的概念:当发送端主机连续三次接收到相同的应答,就会将所对应的数据重传。
在这里插入图片描述

流控制(根据返回值动态调整窗口大小)

发送端根据自己情况想接收端发送数据,但接收端接收的可能不是自己想要的数据(例如上图中接收端一直想要的是1001,但一直传送的是其他的),然后容量有限,当接收端超负荷后,有可能将自己想要的数据丢弃,导致再次重传,降低了网络效率。

为了防止上述问题的发送,TCP提供了流控制。接收端在发送应答响应时同时会附带当前所能接收数据的大小,该大小又叫做窗口长度TCP首部中专门有字段代表窗口长度,在接收端发送确认应答时一起返回发送端,发送端就会随之调整窗口大小,这样就形成了TCP中的流量控制

如果所能接收的数据为0,则发送端会暂时停止发送,直到接收端发送 窗口更新通知才可以继续通信。为防止该通知丢包,允许发送端使用窗口探测,可以向接收端发送窗口探测的数据段,此数据段仅包含一位信息以获得最大窗口长度。
在这里插入图片描述

拥塞控制(慢启动,拥塞窗口,快恢复)

在网络拥塞的情况下,如果突然发送一个较大量的数据,极有可能造成网络瘫痪。

而TCP为防止该情况提供了慢启动的方法。慢启动方法会在刚开始发送数据时将拥塞窗口长度赋值为1,注意当发送数据时,要将拥塞窗口长度与接收端返回的可接收窗口长度相比较,使用较小值。,之后在应答返回的情况下,将拥塞窗口长度逐渐增大(以2的倍数增大)

同时为了防止增长过大设立了慢启动阈值,慢启动阈值会在发生超时重传后设立,当窗口长度大于该值时,下一次的窗口增长遵循公式:
在这里插入图片描述
TCP在开始时没有设置慢启动阈值,

只有当超时重传后,会将慢启动阈值设为当前窗口长度的一半同时会将拥塞窗口长度重新赋值为1开始,这种可以理解为慢恢复

当发生快重传时,同样设立阈值,但拥塞窗口长度不从1开始,而是从慢启动阈值+3数据段开始,上述过程叫做快恢复
在这里插入图片描述

提高网络利用率的方法

1.延迟确认应答:如果接收端在接收数据后立刻应答,那么返回的可接收数据长度就会很小,因为正在处理,会导致窗口长度很小,所以TCP采取延迟确认应答。
(1)在没有接到2*最大段长度(MSS)的数据不应答;
(2)最大延迟0.5s后应答。

TCP中绝大多数是每两个数据段返回一次确认应答
在这里插入图片描述
2.捎带应答:根据应用层协议,当发送端数据到达接收端时,会发送一个回执,我们可以将应答跟回执一同返回发送端;
例如SMTP、fFTP等,在此类应用中回执和应答可以放在一个数据包中传输。
注意:如果没有采用延迟确认,就无法使用捎带应答。因为一到接收端就要发送应答响应,就无法等待回执了、

断开连接(四次挥手)

(1)当传输结束后,发送端会向接收端发送一个断开数据包,其中FIN=1,seq=u(这个是随机的);

(2)接收端接收到之后,会返回发送端一个应答数据包,其中ACK=1,seq=v,ack=u+1此时从A到B这个方向已经断开连接了,但A还是可以接收到B的数据。

(3)若接收端没有数据发送给发送端了,接收端会发送一个断开数据包,其中FIN=1,ACK=1,seq=w,ack=u+1😭注意包中序列号seq已经变了,但ack没变);

(4)当发送端收到数据包后,也会给接收端发送应答的数据包,其中ACK=1,ack=w+1,seq=u+1这里使用的是自己的序列号);当服务端接收到数据包后就会关闭;

注意:这里发送端在发出数据包必须等待2MSL的时间才能关闭,为的是将自己的最后一个ACK数据包能够发送到服务端。(因为有可能这个应答数据包丢失了,这样B就会重新发关闭请求数据包,A只有没有关闭,才可能继续发送应答数据包,否则就无法应答)
在这里插入图片描述
引申:为什么不是两次挥手或三次挥手呢?
答:因为TCP是全双工的,因此两个方向必须都进行关闭,两次挥手仅能让发送端到接收端停止连接,而发送端依然可以接收数据。因此需要接收端同样发送FIN数据包,然后发送端响应才可以断开接收端到发送端的连接,这样TCP连接才算是断开了

补充:在断开连接时,主动断开方的叫主动关闭,而被动断开方的叫被动关闭。

TCP首部格式

在这里插入图片描述

UDP

UDP利用IP提供面向无连接的服务,UDP无法进行流量控制等避免拥堵的操作,此外传输过程出现丢包,UDP也不负责重传,当发送顺序出现问题,也没有纠正的能力。

UDP由于无连接,可以随时发送数据,因此它的主要应用场景
(1)包量较少的通信;
(2)视频、音频等多媒体场景
(3)广播通信
举个例子:以电话为例,如果使用TCP的话,当有一个数据包丢失,就会重发那个数据包,这样就无法畅通的传输通话的人声音,而使用UDP的话,就不会有声音大幅度延迟到达的问题,即使有一个数据包丢失,人也可以通过前后说的话来推测意图。
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章