ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

TCP协议可靠性以及传输速率的保证(图解)

2021-10-15 23:59:58  阅读:178  来源: 互联网

标签:重传 确认 TCP 发送 传输速率 拥塞 图解 数据包


TCP协议可靠性以及传输速率的保证

可靠性的保证

1.缓冲区

  • 在UDP协议中是没有真正意义的发送缓冲区的,所以这也就确定了UDP是不可靠传输。发送缓冲区的作用是缓存应用层将要发送的数据,数据发送之后,在没有收到对应的确认包之前,这些数据是不会从发送缓冲区清除的,为重传做准备。

2. 确认应答机制

  • 在A向B发送数据时,如果没有收到 相应的确认包,那么该数据包将会被重发,保证了每一个数据包都能够被对方接受到。
  • 通信两端在建立初期都会为自己随机分配一个序号,以后在发送的所有数据中都会按字节累加每个包的序号。如果由于网络原因确认包没能及时收到,发送端会重新发送,由于接收端已经接收过此包,就会选择过滤掉,并再次发送确认包。
    在这里插入图片描述
    为啥是删除确认号之前的数据?这和下边讲的滑动窗口有关。因为接收数据方在接收数据时会判断此包确认号之前的数据是否接受全,全则发送确认包。这样做也是能够提高传输效率的,即使前边有确认包丢失,那么收到之后的确认包,能够减少重发的数据包。
  • 因为TCP是滑动窗口设计,所以序号还有一个作用就是将数据包按序号排序

3. 超时重传机制

  • 在每一个数据包发送的时候,发送方都会记录一个动态的超时时间RTT,如果过了超时时间没有收到确认包,那么发送方重新发送这个数据包,每次超时重传都会在上一个超时时间的两倍,在重传一定次数还没有成功,则返回错误。
    RTT是数据包往返的时间,会根据网络情况等因素动态确定。
  • 超市重传分为两种,一种是接收端收到数据包而没收到确认包,就是上图的那种情况。一种是数据包没有被接收端收到。
  • 在这里插入图片描述

4. 差错校验机制

差错校验机制是校验接收到的数据包在网络传输过程中有没有改变改变则丢弃,等待超时重传。
差错码是发送端根据TCP包头和TCP包内容部分来进行计算发错码的,在接收端还是根据TCP整个包来进行差错码校验。

传输速率的保证

1. 全双工

  • 通信双方能同时发送和接收数据,这一点是通过双方的发送缓冲区、接收缓冲区以及序号保证的。

2. 滑动窗口

  • TCP传输速率的保证
    试想如果发送方发送数据时都要等到确认包的到来在发送下一个数据,那么效率可想而知。所以TCP协议引入滑动窗口机制,滑动窗口是双发在每次发送时都会在数据包头标明自己所能接收的最大数据长度,通过收到接收包来确定对方能够接收的最大长度,根据这个长度就可以连续可分多包发送,而不用等到接收包的到来。看图就明白了!!

在这里插入图片描述

3. 拥塞控制

在控制发送窗口的时候,如果只通过接收包中的窗口大小RWND是不够的,所以引入了控制窗口CWND。
作用:提高网络利用率,降低丢包率,保证每条数据流的公平性
  • 四部分组成:慢启动,拥塞避免,快重传,快回复。
    拥塞控制最终受控变量是网络一次连续发送写入的数据量(SWND,发送窗口),接收端可以通过接收通告窗口(RWND)来控制发送端的SWND,但这显然不够,所以发送端引入一个拥塞窗口(CWND)的状态变量。实际SWND = min(CWND,RWND)
    此图引自Linux高性能服务器编程   游双著

1.慢启动和拥塞避免
此图引自Linux高性能服务器编程   游双著

慢启动:TCP建立好之后,CWND=IW,其大小为2~4个SMSS(TCP报文段数据的最大长度),此时发送端最多能发送IW个数据,此后每收到接收端的确认,CWND += min(N,SMSS),N为之前未被确认的字节数 。
拥塞避免:当CWND达到慢启动门限值时,启动拥塞避免。
如何判断拥塞已经发生:
传输超时,TCP重传定时器溢出
接收到重复的确认报文段(定时器溢出前)
2.快重传,快回复
连续收到三个重复确认报文段,就是拥塞发生,此时启用快重传快恢复。

4.延持应答

看到上边的滑动窗口,每一个包都需要一个确认包来回复,这样显然有点浪费网络流量,所以可以等一段时间在发送确认包,。

5.捎带应答

可以将数据包和确认包合并一起发送,因为确人包只需要将TCP头部的ACK标志位置1即可。

标签:重传,确认,TCP,发送,传输速率,拥塞,图解,数据包
来源: https://blog.csdn.net/Go_bro/article/details/120790203

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有