TCP 传输控制网络协议
  anLrwkgbyYZS 2023年12月30日 12 0


传输控制协议 TCP (Transmission Control Protocol),全双工通信、提供面向连接(只能有两个端点)、可靠的数据传输服务、面向字节流。

1. 概述

传输控制协议TCP (Transmission Control Protocol),提供面向连接、可靠的数据传输服务,其数据传输的单位为报文段。

面向连接 : 在使用 TCP 协议之前,必须建立TCP连接,在传送数据完毕之后,必须释放连接。

TCP连接的三次握手(建立连接)与四次挥手(释放连接)。

TCP连接只能有两个端点:点对点  即一对一。

TCP提供可靠交付的服务:通过TCP连接传送的数据无差错、不丢失、不重复、并且按序到达。

TCP提供全双工通信:通信双方的应用进程任何时候都可以发送数据。

TCP 连接两端都设有发送缓存,接受缓存,用来储存临时通信的数据。发送时,应用程序把数据传送给TCP的缓存,就可以做其他事了。接收时,TCP把收到的数据放入缓存,上层应用程序在合适的时候读取缓存。

面向字节流: TCP中的流指的是流入到进程或从进程中流出的字节序列。”面向字节流 的含义“ 应用程序和TCP是一次一个数据块(大小不等)。

2. TCP 首部

TCP 的首部格式如下所示:

TCP 传输控制网络协议_TCP

  • 序号 :用于对字节流进行编号,例如序号为 301,表示第一个字节的编号为 301,如果携带的数据长度为 100 字节,那么下一个报文段的序号应为 401。
  • 确认号 :期望收到的下一个报文段的序号。例如 B 正确收到 A 发送来的一个报文段,序号为 501,携带的数据长度为 200 字节,因此 B 期望下一个报文段的序号为 701,B 发送给 A 的确认报文段中确认号就为 701。
  • 数据偏移 :指的是数据部分距离报文段起始处的偏移量,实际上指的是首部的长度。
  • 确认 ACK :当 ACK=1 时确认号字段有效,否则无效。TCP 规定,在连接建立后所有传送的报文段都必须把 ACK 置 1。
  • 同步 SYN :在连接建立时用来同步序号。当 SYN=1,ACK=0 时表示这是一个连接请求报文段。若对方同意建立连接,则响应报文中 SYN=1,ACK=1。
  • 终止 FIN :用来释放一个连接,当 FIN=1 时,表示此报文段的发送方的数据已发送完毕,并要求释放连接。
  • 窗口 :窗口值作为接收方让发送方设置其发送窗口的依据。之所以要有这个限制,是因为接收方的数据缓存空间是有限的。

3. TCP 可靠传输

超时重传:TCP发送方在规定时间没有收到确认就要重传已发送的报文段。

超时重传的时间设置过短会导致很多不必要的报文段重传,过长又会导致网络空闲。

TCP 采用了自适应的算法 。

RTTS: 平滑的往返时间;RTT :报文段的往返时间。

TCP 传输控制网络协议_缓存_02

RTO:超时重传时间,RTTD:RTT 的偏差加权值。

TCP 传输控制网络协议_数据_03

4. 滑动窗口

窗口是缓存的一部分,用来暂时存放字节流。发送方和接收方各有一个窗口,接收方通过 TCP 报文段中的窗口字段告诉发送方自己的窗口大小,发送方根据这个值和其它信息设置自己的窗口大小。

发送窗口内的字节都允许被发送,接收窗口内的字节都允许被接收。如果发送窗口左部的字节已经发送并且收到了确认,那么就将发送窗口向右滑动一定距离,直到左部第一个字节不是已发送并且已确认的状态;接收窗口的滑动类似,接收窗口左部字节已经发送确认并交付主机,就向右滑动接收窗口。

接收窗口只会对窗口内最后一个按序到达的字节进行确认,例如接收窗口已经收到的字节为 {31, 34, 35},其中 {31} 按序到达,而 {34, 35} 就不是,因此只对字节 31 进行确认。发送方得到一个字节的确认之后,就知道这个字节之前的所有字节都已经被接收。

如下所示,没有收到字节 31,但是收到32,33:

TCP 传输控制网络协议_缓存_04

收到字节 31 之后,接受窗口向前滑动,给发送方发确认,发送窗口向前滑动,。

TCP 传输控制网络协议_数据_05

5. TCP 流量控制

流量控制是为了控制发送方发送速率,保证接收方来得及接收。

接收方发送的确认报文中的窗口字段可以用来控制发送方窗口大小,从而影响发送方的发送速率。将窗口字段设置为 0,则发送方不能发送数据。

TCP 传输控制网络协议_缓存_06

问题:如果B向A发送了零窗口报文之后,B的接受缓存又有了一些空间后,又发送了 rwnd 为 400 (不为0)的报文段,该报文段丢失的话 B 会一直等待。

解决办法:收到 零窗口报文 的一方会有一个 持续计时器,在程序计时器的时间到了之后就发送一个零窗口报文,如果收到报文的窗口依然为0,那么收到报文的重新设置持续计数器。

6. TCP 拥塞控制

拥塞控制是为了防止过多数据注入到网络中,网络中的链路或路由器过载。

TCP 传输控制网络协议_TCP_07

拥塞窗口:拥塞窗口的大小取决于网络的拥塞状态,发送方让自己的发送窗口等于拥塞窗口。

拥塞控制四种方法:慢开始、拥塞避免、快重传、快恢复。

判断网络拥塞的依据:出现了超时就拥塞。

慢开始:由小到大逐渐增大拥塞窗口:1个报文段,2个报文段,4个报文段 ... 

拥塞避免:缓慢增大 拥塞窗口:n个报文段,n+1个报文段,n+2个报文段 ... 

门限值 ssthresh :到达门限值 慢开始 转为 拥塞避免,发生超时之后 门限值 ssthresh  =  拥塞窗口 / 2。

TCP 传输控制网络协议_TCP_08

快重传:尽早知道 个别 报文段的丢失,不要等自己发数据包捎带确认,接受方需要立即发送重复确认(三次确认)。

TCP 传输控制网络协议_TCP_09

快恢复:发送方接受到重复确认,就直接  门限值 ssthresh  =  拥塞窗口 / 2,开始拥塞避免。

TCP 传输控制网络协议_缓存_10

参考文献:


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年12月30日 0

暂无评论

推荐阅读
anLrwkgbyYZS