0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

TCP传输流量控制和拥塞避免方案

454398 来源:博客园 作者: lingjiango 2020-10-29 11:17 次阅读

先来了解2个TCP的概念:

MSS:Maximum Segment Size,TCP一次传输发送的最大数据段长度。

RTT:Round-Trip Time,往返时延,表示从发送端发送数据开始,到发送端收到来自接收端的确认(接收端收到数据后便立即发送确认),总共经历的时延。

TCP传输大块数据时,肯定需要进行数据分段,而每个分段所能携带的最大数据就是1个MSS,假设大块数据为100个MSS,那么发送方发送的方式大概有如下两种:

1、 每次发送1个,收到接收方确认后,才发送下1个;

2、 一口气发送100个,然后收到对方一起确认;

显然,方式1中,一个RTT只能处理一个包,这样的传输效率太低了。而方式2看似很美好,实际会存在两个问题,一个是接收方的接收窗口未必能一次性接收这么多数据,另外一个是网络的带宽也不一定足够大,容易出现丢包事故。前一个问题就是标题中的流量控制(Flow control),TCP采用的是滑动窗口机制(Sliding window),后一个问题就是标题中的拥塞控制(Congestion control)。发送方的发送窗口或者说网络传输交互就取决于这两个问题的控制,谁控制的更严格,谁就占据了决定性因素,这也是为什么两者总是一起出现一起被讨论。

流量控制(Flow control):

TCP uses an end-to-end flow control protocol to avoid having the sender send data too fast for the TCP receiver to receive and process it reliably. Having a mechanism for flow control is essential in an environment where machines of diverse network speeds communicate.

TCP使用端到端流量控制协议来避免发送方发送数据太快,以致TCP接收方不能可靠地接收和处理数据。在不同网络速度的机器进行通信的环境中,具有流量控制机制至关重要。

图一

图一为通过Wireshark抓包192.168.2.1和192.168.2.198的交互截图,可以看到有个标记Win,这个标记的含义就是接收端告诉发送端自己还有多少缓冲区可以接收数据。于是发送端就可以根据这个接收端的处理能力来发送数据,而不会导致接收端处理不过来。

[TCP zerowindow]& [TCP window Full]

提到Win标记,就顺便谈一下Wireshark的[TCP zerowindow]和[TCP window Full],当Win=0时,Wireshark就会打上TCP zerowindow,表示缓存区已满,不能再接收数据了。当Wireshark在一个包上打上TCP window Full,就表示这个包的发送方已经把对方声明的接收窗口耗尽了。两者的共同特点都是传输暂停,前者的含义是发送方无法再接收数据,后者表示发送方无法再发送数据。

回过头来再来说滑动窗口。

图二截取自《TCP/IP详解》

图三取自参考资料

图四取自参考资料

图二和图三可以知道接收方会通知发送方当前已接收到的信息和可用窗口信息。

图三和图四可以看出来窗口滑动的过程。

总结:TCP的流量控制由滑动窗口来实现的,滑动窗口控制流量取决于接收方的窗口大小。

拥塞控制(Congestion control):

流量控制是端到端的交互,如果只是局域网内的两台设备交互,我想通过滑动窗口大概能控制得不差,但是实际网络的情况非常复杂,发送方和接收方之间还有路由器和交换机,网络传输线路又复杂,这个时候就需要拥塞控制。

拥塞控制主要有四个算法慢启动、拥塞避免、快速重传和快速恢复。

慢启动:

讨论慢启动算法先来了解下拥塞窗口的概念,这是慢启动算法为TCP发送方新增的窗口,congestion window,简称cwnd。对应上文,发送方取拥塞窗口和滑动窗口的最小值作为发送上限,即谁严格谁起决定因素。

1、 连接建立开始,发送方不了解网络的情况,cwnd初始化比较小的值,RFC建议2-4个MSS,具体视MSS的大小而定;

If (MSS <= 1095 bytes)

then win <= 4 * MSS;

If (1095 bytes < MSS < 2190 bytes)

then win <= 4380;

If (2190 bytes <= MSS)

then win <= 2 * MSS; 摘自rfc3390.

2、 如果发送出去的包都被ACK,说明还未到达拥塞点,则增加拥塞窗口,RFC建议的是每收到n个ACK,则cwnd新增n个MSS,呈指数关系增长,虽然这个过程看似比较快,但是基数比较低,所以被称为“慢启动”。

拥塞避免:

其实慢启动除了维护了cwnd,还维护了慢启动临界值ssthresh,一般将ssthresh设置为65535字节。在cwnd<=ssthresh时,还是处于慢启动环节,一旦>ssthresh,开始进入拥塞避免。

RFC建议拥塞避免环节,无论一个RTT可以收到多少个ACK,每一次确认都只新增1个MSS,呈线性关系增长,避免快速的触碰到网络拥塞点。

图五取自参考资料

快速重传和快速恢复:

进入拥塞避免之后,最终还是会碰到拥塞点,发送方此时迟迟得不到确认,当然得不到确认也有可能是因为延迟确认导致的。发送方此时决定等待一段时间,如果一段时间后还是得不到确认,就发起重传,这个过程叫做超时重传。从发出原始包到重传该包的时间叫做RTO(Retransmission TimeOut)。

进入超时重传后,RFC建议将cwnd设置为1个MSS,而对于ssthresh,RFC5681建议的是发生拥塞时未被ACK的数据量的1/2,但必须大于等于2个MSS。然后重新进入慢启动环节。超时重传因为需要等待RTO之后才能进入新的恢复环节,所以对网络性能的影响是比较大的。所以各路大神又想到了一个新的方式,看能否无需等待RTO,就发起重传,这种方式叫做快速重传。快速重传规定在收到3个及以上重复ACK时就触发重传,不再进入慢启动环节,然后直接进入拥塞避免,这个就是快速恢复算法。为什么是3个?因为1-2个重复ACK,很有可能是乱序,只有在3个及以上的时候才是有可能丢包了。
编辑:hfy

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • TCP
    TCP
    +关注

    关注

    8

    文章

    1348

    浏览量

    78971
  • 网络传输
    +关注

    关注

    0

    文章

    136

    浏览量

    17374
  • 拥塞
    +关注

    关注

    0

    文章

    12

    浏览量

    9444
收藏 人收藏

    评论

    相关推荐

    嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-

    还是犹如没有任何间隔的数据流发送给接收端。TCP 为提供可靠性传输,实行“顺序控制”或“重发控制”机制。此外还具备“流控制
    发表于 11-11 14:17

    飞凌嵌入式ElfBoard ELF 1板卡-网络编程示例之网络基础知识

    还是犹如没有任何间隔的数据流发送给接收端。TCP 为提供可靠性传输,实行“顺序控制”或“重发控制”机制。此外还具备“流控制
    发表于 11-09 14:37

    Air780E之TCP应用,你了解吗?

    的数据传输服务,确保数据能够按照顺序、无错误地到达接收端。TCP通过三次握手建立连接,使用滑动窗口进行流量控制,以及通过校验和、确认应答、超时重传等机制来保证数据的可靠性。它是互联网协议套件(
    的头像 发表于 11-04 14:30 103次阅读
    Air780E之<b class='flag-5'>TCP</b>应用,你了解吗?

    质量流量控制器在生物发酵行业的应用

    气体质量流量控制器在工业中应用广泛,尤其对气体流量要求高的行业至关重要。爱拓利MFC300 MFC330系列能精确调节生物发酵过程中的气体,提升生产效率和产品质量,广泛应用于生物发酵行业。 气体
    的头像 发表于 10-08 15:39 150次阅读

    气体质量流量控制

         ‌ 气体质量流量控制器 (MFC)的由来 ‌主要源于工业过程中对气体流量精确控制和测量的需求。随着工业技术的发展,特别是在石油化工、冶金、制药等行业,对气体流量的精确
    的头像 发表于 09-24 10:36 227次阅读
    气体质量<b class='flag-5'>流量控制</b>器

    如何使用AT指令集实现硬件流量控制

    我尝试使用 AT 指令集实现硬件流量控制。我已将主机控制器连接到 ESP8266 12S。 引脚 13 似乎一切正常,但引脚 15 看起来像是被拉下来并且永远不会改变它的状态,我无法
    发表于 07-16 07:23

    TCP协议中的拥塞控制机制与网络稳定性

    TCP协议中的拥塞控制机制与网络稳定性的深度探讨 随着互联网的快速发展,网络流量呈现爆炸式增长,网络拥塞问题逐渐凸显。为了维护网络的稳定运行
    的头像 发表于 04-19 16:42 368次阅读

    以太网存储网络的拥塞管理连载案例(五)

    解决无损以太网网络拥塞问题的方法与光纤通道结构相同。两者都使用逐跳流量控制机制,只是实现方式不同而已。
    的头像 发表于 03-04 11:17 777次阅读
    以太网存储网络的<b class='flag-5'>拥塞</b>管理连载案例(五)

    以太网存储网络的拥塞管理连载方案(二)

    本节将从学术角度解释如何计算无损以太网链路的headroom大小。该解释基于 IEEE 802.1Qbb 优先级流量控制标准。
    的头像 发表于 02-27 09:12 930次阅读
    以太网存储网络的<b class='flag-5'>拥塞</b>管理连载<b class='flag-5'>方案</b>(二)

    以太网存储网络的拥塞管理连载方案(一)

    链路级流量控制(LLFC):LLFC 可在直接连接的设备之间对链路上的所有流量进行流量控制。LLFC 是一项 IEEE 标准(IEEE 802.3x)。
    的头像 发表于 02-26 10:52 1132次阅读
    以太网存储网络的<b class='flag-5'>拥塞</b>管理连载<b class='flag-5'>方案</b>(一)

    TCP协议技术之拥塞控制算法

    拥塞控制是在网络层和传输层进行的功能。在网络层,拥塞控制可以通过路由算法来控制数据包在网络中的
    的头像 发表于 02-03 17:06 1941次阅读
    <b class='flag-5'>TCP</b>协议技术之<b class='flag-5'>拥塞</b><b class='flag-5'>控制</b>算法

    请问TCP拥塞控制对数据延迟有何影响?

    今天分享一篇文章,是关于 TCP 拥塞控制对数据延迟产生的影响的。作者在服务延迟变高之后进行抓包分析,结果发现时间花在了 TCP 本身的机制上面:客户端并不是将请求一股脑发送给服务端,
    的头像 发表于 01-19 09:44 546次阅读
    请问<b class='flag-5'>TCP</b><b class='flag-5'>拥塞</b><b class='flag-5'>控制</b>对数据延迟有何影响?

    腾讯有点顶,连环追问我基础细节!

    传输层:该层处理两个设备之间的端到端的通信。它在发送方将数据分解成段,然后在接收方重新组装。这一层有流量控制,以防止拥塞。这一层的主要协议是 TCP 和 UDP。
    的头像 发表于 12-11 17:30 533次阅读

    如何选择传输层协议?TCP和UDP的优缺点和适用场合

    和可靠性至关重要。本文将详细介绍TCP和UDP的优缺点以及适用场合。 1. TCP的优点和适用场合: TCP是一种可靠的、面向连接的传输层协议,它提供了重发机制、数据丢失检测和
    的头像 发表于 12-11 11:42 945次阅读

    TCP传输控制协议知识科普拓展

    传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。
    的头像 发表于 11-27 17:46 909次阅读
    <b class='flag-5'>TCP</b><b class='flag-5'>传输</b><b class='flag-5'>控制</b>协议知识科普拓展