网络流量监控工具 网络流量控制( 二 )
拥塞算法原理(reno为例) TCP拥塞算法的整体框架基本相同 。本文简要介绍了经典的TCP reno拥塞控制算法(教科书中通常讲的版本) 。TCP拥塞控制RFC5681规定了慢启动、拥塞避免、快速重传和快速恢复 , 涉及几个基本参数(cwnd和ssthresh) 。cwnd是指拥塞窗口的大小 , 它决定了一次发送多少个数据包 , ssthresh是指慢启动阈值 。
慢启动慢启动阶段有两种 , 一种是流刚启动CWND RFC 3465 https://datatracker.ietf.org/doc/html/RFC 3465RFC 3742https://datatracker.ietf.org/doc/html/在RFC 3742中 , 第一次慢启动的初始ssthresh被设置为一个较大的值 , 这样直到发生丢包才会发生拥塞避免 , 然后出现hystart优化(混合慢启动) , 比如预测理想ssthresh , 这样第一次慢启动就不会在拥塞避免之前造成丢包(丢包代价太大) 。
拥塞避免当cwnd>=ssthresh时 , 将进入拥塞避免阶段 , cwnd随RTT线性增加 。这个出发点是保守的测试最大网络容量 , 以免网络崩溃 。
快重传在拥塞避免阶段 , 当连续收到三个ACK时 , 表示可能会发生丢包 , 表示网络轻微拥塞 。此时会进入快速重传阶段 , ssthresh设置为0.5 * cwnd , cwnd设置为ssthresh+3MSS , 这样数据包重传进入快速恢复阶段 。
快恢复在快速恢复阶段 , 如果重传数据包后仍然收不到新的数据包ACK , RTO超时 , 说明网络还没有恢复 , 那么就重新进入慢启动阶段 。ssthresh将设置为0.5 * cwnd , cwnd将设置为初始值 。如果收到新数据的ACK包 , 说明网络已经恢复 , cwnd会被设置为ssthresh , 从而进入拥塞避免阶段 。
雷诺拥塞控制算法的状态图如下
Reno算法iperf流wireshark数据包捕获io示意图如下:
拥塞算法对比 拥塞控制算法主要是基于网络丢包和时延(RTT) , 所以有的算法是丢包敏感的 , 有的算法是时延敏感的 , 有的算法是丢包和时延结合的 。不同算法之间的主要区别可能是如何在拥塞避免阶段拟合理想的传输速率曲线而不丢失分组 , 如不同拥塞算法的https://en.wikipedia.org/wiki/TCP_congestion_control's比较所示 。
拥塞算法 网络反馈 需要修改点 应用场景 公平性准则(New) Reno Loss — — DelayVegas Delay Sender Less loss ProportionalHigh Speed Loss Sender High bandwidthBIC Loss Sender High bandwidthCUBIC Loss Sender High bandwidthC2TCP[10][11] Loss/Delay Sender Ultra-low latency and high bandwidthNATCP[12] Multi-bit signal Sender Near Optimal PerformanceElastic-TCP Loss/Delay Sender High bandwidth/short & long-distanceAgile-TCP Loss Sender High bandwidth/short-distanceH-TCP Loss Sender High bandwidthFAST Delay Sender High bandwidth ProportionalCompound TCP Loss/Delay Sender High bandwidth ProportionalWestwood Loss/Delay Sender LJersey Loss/Delay Sender LBBR[13] Delay Sender BLVC, BufferbloatCLAMP Multi-bit signal Receiver, Router V Max-minTFRC Loss Sender, Receiver No Retransmission Minimum delayXCP Multi-bit signal Sender, Receiver, Router BLFC Max-minVCP 2-bit signal Sender, Receiver, Router BLF ProportionalMaxNet Multi-bit signal Sender, Receiver, Router BLFSC Max-minJetMax Multi-bit signal Sender, Receiver, Router High bandwidth Max-minRED Loss Router Reduced delayECN Single-bit signal Sender, Receiver, Router Reduced loss在这里 , 我还想提一下TCP流的[/s2/]公平性 。有些拥塞算法可能有带宽抢占 , 但是基于时延相关性的算法很容易出现 , 因为它们是基于RTT的 , RTT越小 , 占用越多 。比如有两个TCP流 , 延迟较小的那个会抢占更多带宽 , 甚至占用所有带宽 , 其他流无法正常工作 。比如reno和bic都有抢占问题 。立方通过三次曲线检测理想带宽 , 与RTT无关 , 所以是公平的 。
【网络流量监控工具 网络流量控制】如上图所示 , 使用reno算法 , iperf用于流式传输到两个不同的服务器 。stream2的低延迟直接占用了大部分带宽 。
如上图 , 用立方算法 , 也用iperf调用两个不同的服务器 , steam2的低延迟和低带宽抢占就没那么严重了 。
Linux内核中拥塞算法 Linux 2.6.x内核版本可以参考https://linuxgazette.net/135/pfeiffer.html来选择拥塞算法 。最新的linux 5.x内核支持几种 , 在内核代码Kconfig中也有简单介绍 。顺便提一下 , mptcp内核还包含多路径场景中的几种拥塞算法 。
Linux 4.x内核支持Tcp拥塞算法 , 默认情况下使用立方:
推荐阅读
- 电脑网络不稳定是什么原因导致的,一招解决网络不稳定的办法!
- 5个让新手快速变网络推广高手的方法 网络营销高手都是怎么运营的
- 看看15K网站运营总监都在做什么 网络运营总监岗位职责和日常工作
- 4个靠谱的网络推广方法 中小企业网络营销战略分析
- 互联网广告宣传的特点 网络广告的发展优势有哪些
- 新产品免费网上推广的方法 如何做好网络推广工作
- 产品网络推广的免费渠道和方法 如何进行产品推广
- 完整的网络品牌推广方案 如何做好品牌推广工作
- 8类免费实用的营销工具 最好的网络营销软件有哪些
- 2019最佳口碑营销方案 网络口碑营销成功案例
