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

    文章

    1410

    浏览量

    81610
  • 网络传输
    +关注

    关注

    0

    文章

    143

    浏览量

    18163
  • 拥塞
    +关注

    关注

    0

    文章

    12

    浏览量

    9564
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    HORIBA D700系列气体质量流量控制器介绍

    在半导体制造向3nm及以下制程突破的关键期,气体流量控制的精度与稳定性直接影响晶圆良率。HORIBA D700系列气体质量流量控制器针对半导体制造工艺中的极端需求设计,涵盖四大核心型号:D700MG、D700WR、D700uF、D700T,该系列通过模块化架构实现从实验室
    的头像 发表于 07-28 11:18 ?465次阅读
    HORIBA D700系列气体质量<b class='flag-5'>流量控制</b>器介绍

    RDMA简介7之可靠传输

    。RoCE v2协议实现可靠传输的技术手段共有三种,分别为:丢包重传机制、流量控制拥塞管理。接下来将就这三种技术手段进行详细分析。 (1)丢包重传机制 为了简化设计同时降低成本,RoCE v2协议使用了
    发表于 06-13 10:01

    信而泰PFC/ECN流量测试方案:打造智能无损网络的关键利器

    导语:AI算力爆发的背后,如何保障网络“零丢包”? 在当今数据中心网络中,随着AI、高性能计算(HPC)和分布式存储等应用的飞速发展,网络的无损传输能力变得至关重要。PFC(基于优先级的流量控制
    的头像 发表于 03-13 09:53 ?677次阅读
    信而泰PFC/ECN<b class='flag-5'>流量</b>测试<b class='flag-5'>方案</b>:打造智能无损网络的关键利器

    智能流量控制器产品说明书

    FS0021 系列智能流量控制器用于流量控制和调节,由超声波流量计、无极变速球阀、 显示屏和主控模块组成。根据用户所需流速,由超声波流量计实时反馈数据,对球阀进行快 速调节,实现按需求
    发表于 02-27 13:55 ?0次下载

    TCP协议的性能测试与评估方法

    的、基于字节流的传输层通信协议。它通过三次握手建立连接,使用序列号和确认应答机制保证数据的有序传输,并通过滑动窗口机制控制数据流量,以避免
    的头像 发表于 01-22 10:03 ?1719次阅读

    TCP协议的安全性分析

    使用确认机制来确保数据段被正确接收。如果一个段丢失,发送方将重新发送该段。 流量控制TCP使用窗口大小来控制发送方发送数据的速率,以避免接收方被过多的数据淹没。
    的头像 发表于 01-22 09:48 ?828次阅读

    什么是TCP协议及其工作原理

    协议之一。它提供了一种可靠的、有序的、基于字节流的数据传输服务。TCP协议的主要特点包括: 面向连接 :在数据传输之前,TCP需要在通信双方之间建立一个连接。 可靠
    的头像 发表于 01-22 09:41 ?1409次阅读

    AI模型部署边缘设备的奇妙之旅:边缘端设备的局域网视频流传输方案

    拥塞控制TCP还包含了一系列算法来避免网络拥堵,例如慢启动、拥塞避免、快重传和快恢复等。
    发表于 01-04 14:32

    TCP-UART数据透传技术,居然如此简单!

    连接的、可靠的、基于字节流的传输层通信协议。它主要用于在不可靠的网络环境中提供稳定的数据传输服务,确保数据能够按照顺序、无错误地到达接收端。 TCP通过三次握手建立连接,使用滑动窗口进行流量控
    的头像 发表于 12-30 16:46 ?734次阅读
    <b class='flag-5'>TCP</b>-UART数据透传技术,居然如此简单!

    TCP-UART透传示例~看完就会源码开放!

    连接的、可靠的、基于字节流的传输层通信协议。它主要用于在不可靠的网络环境中提供稳定的数据传输服务,确保数据能够按照顺序、无错误地到达接收端。 TCP通过三次握手建立连接,使用滑动窗口进行流量控
    的头像 发表于 12-30 16:43 ?685次阅读
    <b class='flag-5'>TCP</b>-UART透传示例~看完就会源码开放!

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

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

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

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

    Air780E之TCP应用,你了解吗?

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

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

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

    气体质量流量控制

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