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

    文章

    1268

    浏览量

    78270
  • 网络传输
    +关注

    关注

    0

    文章

    129

    浏览量

    17202
  • 拥塞
    +关注

    关注

    0

    文章

    12

    浏览量

    9408
收藏 人收藏

    评论

    相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    TCP源码,和注释,及应用

    TCP协议实现涉及到更多的细节和功能,包括建立连接、数据传输流量控制拥塞控制等。如果您想深入了解T
    发表于 11-19 12:31

    工业控制领域基于TCP/IP的数据传输方案

    电子发烧友网站提供《工业控制领域基于TCP/IP的数据传输方案.pdf》资料免费下载
    发表于 11-16 10:52 0次下载
    工业<b class='flag-5'>控制</b>领域基于<b class='flag-5'>TCP</b>/IP的数据<b class='flag-5'>传输</b><b class='flag-5'>方案</b>

    TCP和UDP的区别

    是可靠传输,使用流量控制拥塞控制;UDP是不可靠传输 TCP首部最小20字节,最大60字节;U
    的头像 发表于 11-09 09:35 621次阅读
    <b class='flag-5'>TCP</b>和UDP的区别

    啤酒机如何实现液体流量控制

    啤酒机是现代家庭和餐饮场所中越来越受欢迎的设备,它可以方便地提供各种风味的啤酒。流量控制是啤酒机制作啤酒过程中的重要环节之一,而流量计则是实现这一控制的关键部件。本文将介绍啤酒机如何通过流量
    的头像 发表于 11-02 14:29 182次阅读
    啤酒机如何实现液体<b class='flag-5'>流量控制</b>

    Linux内核网络拥塞控制算法的具体实现框架(一)

    谈起网络拥塞控制,大家可能很熟悉八股文中的“加法增大“、”乘法减小“、”慢开始“、“拥塞避免”、“快重传”、“快恢复”等概念。没错,这是一种经典网络
    的头像 发表于 07-28 11:32 435次阅读
    Linux内核网络<b class='flag-5'>拥塞</b><b class='flag-5'>控制</b>算法的具体实现框架(一)

    咖啡机器人如何实现液体流量控制

    咖啡机器人是近年来的一种智能化设备,它的出现大大提高了人们对咖啡制备的要求。在制作咖啡的过程中,液体流量控制是非常重要的一项工作。液体流量控制能够保证咖啡的品质和口感,因此在咖啡机器人的设计中液体
    的头像 发表于 05-16 13:48 323次阅读
    咖啡机器人如何实现液体<b class='flag-5'>流量控制</b>

    机器人自动咖啡机如何实现流量控制

    机器人自动咖啡机是一种高科技智能化设备,它可以自动化地制作出美味的咖啡。实现一个好的咖啡需要经过多个步骤,其中最重要的一步就是控制出水量。在制作咖啡的过程中,水的流量控制是影响咖啡口感的关键因素
    的头像 发表于 05-09 13:48 406次阅读

    TCP/IP协议的特点

    可靠性和性能: TCP/IP协议的传输TCP协议,提供了高可靠的数据传输服务,保证数据的完整性和顺序性,并且具有流量控制
    发表于 05-06 15:15 7510次阅读