tcp cubic 与随机丢包

这篇具有很好参考价值的文章主要介绍了tcp cubic 与随机丢包。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前面提到过一个 AIMD 的修正方法,“二次机会 MD”:首次丢包只 MD 收缩一个相对较小的比例,再次丢包时再继续收缩,直到 beta * Wmax。

效果如下图:
tcp cubic 与随机丢包
大意是在检测到丢包时,先 MD 一个相对小的缩放比例,如果再次丢包再继续缩放,由此可在不损害公平性(cc 只为拥塞才会降速收敛,随机丢包本来就不应该降速)的前提下抵抗随机丢包:如果随机丢包,由于缩放系数较小,带宽损失不大,cwnd 可从相对高的位置开始描绘 cwnd/time 曲线,如下图所示:
tcp cubic 与随机丢包

如果真拥塞,PRR 过程的发送线将变成一条上凸曲线(线 2),逐渐弯下去,最终和标准 PRR 的结果相汇。虽 “有悖于 PRR” 按比例收敛到 0.7 * Wmax,但减速收敛到 0.7 * Wmax 也没什么不好。

做这个修改一开始就是想让 MD 过程也呈现一条曲线而不是一条直线,就像 AI 过程一样,收敛到结果,而非过程。减速收敛显然可以抗随机丢包,在随机丢包后不至于下降太多,但代价是真拥塞时响应没有标准 PRR 过程快,不过即使标准 PRR 不是论证的结果。

简单写了个代码:https://github.com/marywangran/tcp_cubic_v2

虽然二次机会 MD 算法可以抵抗明确的随机丢包,但随机丢包太频繁的话也扛不住,大概就是积累 AI 和 MD 总量持平或更小的时候,由于没有足够的数据量进行 probe,有效吞吐将明显下跌。但凡 probe 都需要超过有效 BDP 的数据量做支撑,因此在小 buffer 链路,probe 本身也会造成 buffer 溢出而丢包,如 BBR 代码的 probe 注释所说:We do not persist if packets are lost, since a path with small buffers may not hold that much。

和 BBR 抗丢包相比,它那个是憋住 maxbw 守恒观望,我这个是损失一点点代价赌能跨过去。BBR 像是油门踩到底跨过随机丢包,我这个像轻踩刹车。

AIMD 公平性很重要,否则大可使用别的 “更好” 的算法,AIMD 的核心就是收敛到公平。任何魔改都不要破坏这一点。AIMD 的公平收敛其实就是一个勾兑的过程,一杯葡萄汁液:橙汁为 3:1 的混合液体,如何勾兑成 2:1,就是 AIMD:先加入 1:1 液体一小勺,这就是 AI,均匀混合后舀出去相同的量,舀出去的液体中二者的比例很容易计算,这就是 MD,重复这个过程 n 次即可,数学上很容易计算 n。

为判断随机丢包,不要引入过于复杂的逻辑,ACK 时钟信息量有限,判断精度必有上限,类似于硬币猜正反,因为你的信息就那么多,50% 的概率,那就随机猜即最优解,不要启发。丢包判断也一样,别做假设,一旦误判就要为负方向买单,这是信息论决定的。

通用场景,不做假设,最简单最好。我们都明白,特定场景优化很容易,这相当于事前已经告诉你要做什么,但问题是当这个 “特定场景” 混杂在通用场景中时,很难将其识别出来,这才是最难的问题,这个问题无解,结果就是拆了东墙补西墙,统计意义上看跟没有优化一样。

上周那个 “二次机会 AIMD” 跟朋友介绍了一下,挺不错,本来不到 5 分钟就能改一版 cubic ++,结果还是因为 Linux tcp 开放的 cc 模块受制于拥塞状态机,我若实现脱缰的 cong_control 回调,就要亲自调用 PRR,不过还算简单,吃点烧烤的工夫就能写完。相比 ns-3 写模拟,我还是倾向于直接写 Linux 模块的 cong_control 回调。

浙江温州皮鞋湿,下雨进水不会胖。文章来源地址https://www.toymoban.com/news/detail-496759.html

到了这里,关于tcp cubic 与随机丢包的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • UDP分片与丢包,UDP真的比TCP高效吗?

    每个 UDP 报文分为 UDP 报头和 UDP 数据区两部分。报头由 4 个 16 位长(2 字节)字段组成,分别说明该报文的源端口、目的端口、报文长度和校验值。 UDP 报文格式如图所示。 UDP 报文中每个字段的含义如下: 源端口:16bits,发送端的端口。 目的端口:16bits,即接收端的端口

    2024年02月04日
    浏览(38)
  • 【网络】想学TCP,这一篇就够了 —— TCP理论知识详解(基于前面手搓TCP服务端博客的补充)

    本篇侧重理论,关于TCP的实践我前面博客中有,如果你想写一个简易的TCP服务端,可以看看这一篇:【网络】网络编程——带你手搓简易TCP服务端(echo服务器)+客户端(四种版本)。本篇也是基于这一篇进行理论方面的扩展,如果想要了解的同学可以看看。 本篇篇幅较长,

    2024年02月08日
    浏览(46)
  • iperf3测试服务器tcp带宽udp丢包率

    要使用 iperf 测试网络的性能,您需要两台计算机,一台作为服务器,一台作为客户端,这将帮助您测试两台主机之间的网段。特别注意的是两台计算机的网口一定是同样的网口,测试的数据才是准确的,我之前测试的时候服务器端网口是万兆的,客户端用的是千兆的,所以测

    2024年02月12日
    浏览(46)
  • 实验模拟TCP连接的各种异常情况(三次握手丢包,两端异常)

    秋招结束,闲来无事,正好把计算机网络一些协议实验过一遍,于是用vmware搭建了一个两机通信的环境,在建立环境的过程中遇到了一些坑点,现记录以作备忘使用。 现环境演示如下: 验证TCP三次握手丢包 Ubuntu机(192.168.200.129)作为客户端,CentOS机(192.168.200.130)作为服务

    2024年02月01日
    浏览(32)
  • TCP/IP协议栈的心跳、丢包重传、连接超时机制实例详解

    大家好,本文结合具体的问题实例,详细讲解一下TCP/IP协议栈的心跳机制、丢包重传机制等内容,给大家提供一个借鉴和参考。 1、问题概述 虽然软件底层模块在网络恢复后能自动重连上服务器,但会议因为网络问题已经退出,需要重新加入会议。 因为客户特殊的网络运行环

    2024年02月07日
    浏览(49)
  • mysql获取第一个逗号前面的字符串

    字符串内容如下: 想获取,第一个逗号前面的字符串,即:统编版(2019) 需要第一获取逗号的下标位置,然后再截取字符串 获取逗号的函数使用:LOCATE 结果如下:  然后使用 left 函数截取字符串,代码如下: 结果如下: 统编版(2019)

    2024年02月13日
    浏览(43)
  • Linux服务器丢包故障的解决思路及引申的TCP/IP协议栈理论

    我们使用Linux作为服务器操作系统时,为了达到高并发处理能力,充分利用机器性能,经常会进行一些内核参数的调整优化,但不合理的调整常常也会引起意想不到的其他问题,本文就一次Linux服务器丢包故障的处理过程,结合Linux内核参数说明和TCP/IP协议栈相关的理论,介绍

    2024年02月11日
    浏览(51)
  • jmeter 不同请求使用同一个随机函数,线程数超过1后取值相同的解决方法

    jmeter 不同请求使用同一个随机函数,线程数超过1后取值相同的解决方法 目的:jmeter 中同一线程组的不同请求使用同一个随机函数,生成的随机数在不同请求中要是一样的,而且如果线程数大于1,每次迭代中的随机数要更新 1)如果只是在测试计划中添加这个变量-随机数函

    2024年02月14日
    浏览(55)
  • 如何判断路由是否丢包以及丢包的原因和解决方法

    关于路由器丢包的原因有很多种,本篇介绍如何判断是否是路由器丢包和解决的方法。 一、 内存碎片是指路由器内存被划分了许多不连续的块。他将导致内存利用率降低,严重时可能会产生内存错误,影响路由器的性能。它也会导致路由器报文丢失的问题,其实不仅路由器

    2024年02月05日
    浏览(36)
  • udp丢包处理方法

    UDP丢包处理方法如下1: 使用前向纠错码(FEC)技术 。通过在发送端添加冗余信息,使接收端能够在收到部分丢失的数据时进行纠错。 使用前向纠错码(FEC)技术是一种有效的处理UDP丢包的方法。FEC技术通过在发送端添加冗余信息,使接收端能够在收到部分丢失的数据时进行

    2024年01月21日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包