题目没意义,要说意义,大致类似于 Vegas,Reno,Tahoe,Westwood,地名。

周三傍晚发一则朋友圈:

总之,名字就是个名字,跟 tcp_vegas,tcp_reno,tcp_tahoe 学的。

模拟高速公路开车,见机行事。总体设计很简单,传输系统在 up 和 down 两个 state 间转换:

  • 如果 up 状态测得实际 delivery rate 增益小于 a%,转为 down,gain < 1。
  • 如果 down 状态测得实际 delivery rate 损失大于 b%,转为 up,gain > 1。

例如,125% 增益下,delivery rate 增量小于 5% 就以 75% 降速(也可连续 2 次,3 次小于 5% 再降速增加鲁棒性),一旦降速,delivery rate 肯定降低,降低率大于一定阈值,再改为 125% 增益加速。简单讲就是漫踱步。

Caohejing 算法把 BBR 的固定状态机改成视测量增益而动。 同样挤占力度,带宽越大,加速比越小,因此大流总会降速,小流正好向上,直到变成大流,算法在异步状态下轮作属大概率事件。此即 “微收敛”, 预期公平性非常棒,事实也确实很棒。

也可使用 AIMD,加速用加法,减速用乘法,取消固定收敛时刻,在 up 态,pacing 加法递增,down 态乘法递减,同样观测 delivery rate 增量,也属高尚。

先放一个表达大意的代码:GitHub - marywangran/tcp-caohejing: TCP 漕河泾算法

基本就是 Vegas 的变体,在丢包前开始收敛。但还是有大不同。

Vegas 根据 RTT 信号收敛,而 Caohejing 根据实测带宽收敛,哪个更靠谱?

Vegas 比 Caohejing 更复杂,但不能说 Vegas 一定比 Caohejing 先进。各种测量,计算的背后是各种不切实际的假设,把理想假设去掉后,就只剩 delivery rate 了。

事情总向着简单,如手动挡和自动挡汽车,讲速率的时候,谁还提什么操控。

谈谈丢包和重传。

对 Caohejing 算法,拥塞丢包可以自动被发现,因为采集带宽肯定低了,速率也就降下来了,但这里问题来了,是保持简单方式统一处理,还是单独用数据包守恒处理丢包?若后者,显然不美,又回老路,但选择前者,又会被诟病重传率高。

或许高重传率就是高带宽利用率必须付出的代价。高重传率最终会落实到碳排放,但由于传输效率低导致信息延时到达,消耗的成本将造成同等量级碳排放,一切皆守恒。

端到端协议,获取链路信息需要代价,换句话说,带宽探测就需要多发数据,采集反馈,而此行为的风险就是丢包。

so what?

本来我忍不住在 tcp_caohejing_cong_control 函数里加上 if (rs->losses > 0) 判断的,然后按照数据包守恒原则处理丢包,但放弃了。

我特意在代码里加了 conservation 参数,可通过下面命令关闭:

echo 0 >/sys/module/tcp_caohejing/parameters/conservation

关闭后意味着让算法根据 delivery rate 自适应收敛,这是高尚的。

浙江温州皮鞋湿,下雨进水不会胖。

TCP 漕河泾算法(tcp_caohejing)相关推荐

  1. 【RFC6582 TCP快速恢复算法的NewReno修改】(翻译)

    原文 https://datatracker.ietf.org/doc/html/rfc6582  The NewReno Modification to TCP's Fast Recovery Al ...

  2. TCP BBR算法与Reno/CUBIC的对比

    我一再强调,BBR算法是个分界点,所有的TCP拥塞控制算法,被分为BBR之前和BBR之后的(其实发现,这并不是我个人的观点,很多人都这么认为,所有想写本文探个究竟).当然这里的"所有&quo ...

  3. Scalable TCP拥塞算法

    Scalable TCP(STCP)拥塞控制算法,在每个RTT周期内,如果没有发生拥塞,将在接收到每个ACK报文后,将拥塞窗口增加0.01(a值). cwnd = cwnd + 0.01 如果在一个R ...

  4. cubic算法优化_安卓cpu优化tcp拥塞算法cubic和reno怎么选择?

    上述具体的论文可以参考:CUBIC: A New TCP-Friendly High-Speed TCP Variant 1. tcp cubic数学模型 CUBIC在设计上简化了BIC-TCP的窗口 ...

  5. cubic算法优化_安卓cpu优化 tcp拥塞算法cubic和reno怎么选择

    上述具体的论文可以62616964757a686964616fe59b9ee7ad9431333365643662参考:CUBIC: A New TCP-Friendly High-Speed TCP ...

  6. 漫谈TCP新算法Elastic-TCP

    自适应的CCA(Congestion Control Algorithm)给人一种简洁明快的感觉. Elastic-TCP是一种新近的算法,比BBR还新,但比BBR简洁多了,可以从Wiki上了解其大概 ...

  7. 令人躁动一时且令人不安的TCP BBR算法

    虽然我在这个周六(2016/12/17)荒废了一天而毫无意义的加班,我依然要在次日把上一周的点滴记录下来.以下在2016/12/18下午19时之前的文章,全属周六通宵之作. 可以说,这个周末过得比较水 ...

  8. TCP rwnd算法挖坟

    新算法的模拟代码明早再写. 一个大厂内部分享,讲师说TCP长肥管道无法填满,这是错误的.我曾经单流填满过一条200ms的5Gbps专线. 为什么大家碰到填充长肥管道难题后首先想到的都是rcvbuff不 ...

  9. 可以将TCP BBR算法模块化到低版本内核取代锐速吗

    上周的文章引发了比较火爆的争论并带来了争议,我比较满意或者遗憾,尽管如此,如果有人真的能明白在文章的背后我真正想表达的意思,我也就深感欣慰了.还像往常一样,我花周末的时间来总结技术,写点技术散文,同时 ...

最新文章

  1. 普华永道重磅报告:决定未来的八大核心科技
  2. java 全局变量_Java语言与C语言、C++语言有何差异以及优劣势
  3. Elixir: 多太(Polymorphism)
  4. MSCOCO数据集分析
  5. C#教程8:面向对象编程【01】
  6. AngularJS recursive(递归)
  7. iPhone近两个财季为苹果带来1135亿美元营收 同比增长33%
  8. php 快速找到php.ini位置
  9. 【X264系列】之编码YUV的内存流程
  10. requests库学习
  11. 学习pyhton: argparse模块
  12. 管理感悟:错误是员工的,责任是领导的
  13. MATLAB 转置与共轭转置、在legend中输入数字、求频偏的小收获
  14. 微信购物商城网站定制需要多少钱?电商网站建设开发方案(一)
  15. 二、SSM即Spring、SpringMVC、Mybatis整合
  16. 群英齐聚铸辉煌!孔明在线企鹅社区成功启动!
  17. table 点击文字按钮预览图片
  18. ESP32-IDF开发笔记 | 01 - ESP-IDF开发环境搭建(2023.04.08更新)
  19. 119全国消防日,我们要注意用火安全
  20. 预告:揭秘7*24小时用数学解码交易的神秘玩家,量化交易者——TokenInsight对话首席...

热门文章

  1. 电子科技大学820计算机专业基础参考资料,电子科技大学
  2. 深入java集合-HashMap
  3. com.baomidou.mybatisplus.core.exceptions.MyBatisPlusException: java.net.UnknownHostException
  4. Vue 实现下拉加载更多
  5. 【Ubuntu】[待机时间]:修改Ubuntu待机时间
  6. 如何用python制作三维动画_python-如何在m??atplotlib中更新3D箭头动画
  7. 简历解析步骤(第二步)技术与实现(6)识文字,做分类:婚姻状态 、出生日期 、 户口地址 、 籍贯地址
  8. GNSS-ITRS_GCRS_J2000坐标系的相互转换
  9. 中文数字文字转换成阿拉伯数字
  10. 汽车标定工具ETAS总线模块ES582.1详情介绍