关于TCP的三言两语

这是最近一周看了 TCP BBR 相关内容之后,站在自己——一个general developer——的角度所想,并非作为专研网络/控制论角度所写。所以文中难免会有错误的地方,这篇文章的组织也较为随意,仅作个人笔记/想法分享。

TCP是一个反馈系统


“TCP不是网络范畴的技术,它是控制论范畴的,TCP技术不属于网络技术!”

这是我在看的一篇详细介绍 TCP BBR 的文章里(来自Google的TCP BBR拥塞控制算法解析)提到的,至少对我而言,感觉一语惊醒梦中人。

试想一下,如果将需要传输的数据看作是一个个黑盒子,它们在通过 TCP/IP 栈的每一层时,只不过是被贴上到下一站的标签,又在到达下一站时被撕下标签,随后又被贴上标签……直到被弄丢,或者已经没法再贴上标签,又或者历经千险到达目的地才停下。

TCP/IP 要做的事,实际上某种程度上和物流类似,只不过在这样的电子物流中,发送包裹的人非常客气,毕竟 TCP/IP 这个公司只能承诺尽最大努力交付,要是有意或无意地在中间传输时被吃掉了,发送者还得再发一次一模一样的。

那么和现实中的物流所面对的问题类似,中转站的仓库容积是否在绝大多数情况下都足够?若是中转站快满了该怎么处理?接收者能签收处理多少包裹?若是接收者处理不了时,要怎么告知发送者应该如何减小发送量?……

这一系列问题,其实解决起来就是一个反馈系统,从这一路发展来看,反馈机制从以太网的 CSMA/CD,无线网络的 CSMA/CA,再到上层的目标端接收数据包到之后返回的的 ACK 包、SACK 包,以及cwnd、rwnd,超时时钟等等,从物理层面到软件层面,都是为了能在全球杂乱无章的网络中自适应,并且与所有用户保持协作。

TCP中的博弈


在控制论中,主要有三个衡量标准,分别是效率,公平,收敛速度。

效率:所有用户的总和是否完全利用了所有的资源;
公平:所有的资源是否在所有用户之间公平分配(可以加权)
收敛:当发生偶发震荡的时候,恢复到最高效率,最好公平性的速度

那么刚才提到了「协作」,它作为博弈论中的一个名词,既可以是好的协作,也可以是坏的协作。举个栗子,如果在一条两车道的马路上,有一辆车非要横行霸道,不守规矩,走在两车道中间,那么跟在它后面的车就都受制于它了。当然现实世界中对这样的行为还有法可依,但是在网络中就只能祈祷别人也自觉遵守规矩了。不像某些恶心的加速软件,无视网络拥塞、无视cwnd、无视IP层,同一个包不管网络情况如何,发包发两次、三次、甚至发到爽,以此来“加速”,破坏公平性,网络资源就是被这样的软件耗尽的。以至于一个真正有效且自律的拥塞控制算法——TCP BBR——出现时,甚至还有人拿着那个破环公平的软件与 TCP BBR 对比。

更有甚者,为了吸引注意直接开骂“TCP是个烂协议。”也是很强,而他的理由仅仅是“电信网通互相访问的时候,玩个游戏就会频繁掉线。这表现出TCP不适应中国国情”。在TCP自时钟/拥塞控制/带宽利用之脉络半景解析一文中有提到

运营商之间,TCP与UDP之间,P2P与UDP之间,组播,自治域之间...太多了,博弈无处不在。

这种事情想想也知道是谁的锅,可有人就是要让 TCP 来背,显得自己做的无视规则的项目有多厉害。

回到 TCP BBR,在A quick look at TCP BBR一文中,

bbr_beauty

“A mark! Nothing else!, for the rest of the trace. 0 packet loss, 3-6ms induced latency on the rest of the network. Fq_codel did its job early in the trace and then got out of the way, and BBR just motored along, at the right rate, for the whole time! BBR actually was self-regulating with less induced delay than codel was willing to give it! I’m going to have to repeat these tests with HTB + a drop tail system and/or pie to see what BBR does, but I’m pretty sure it’s going to do the “right thing”, in a limited scenario like this, (not competing against other traffic).”

当然这里我们难以讨论哪个拥塞控制算法是最好的,很多情况下是像下图这样的。

xkcd: Standards
xkcd: Standards

但是有一点是明确的,对于那种自己搞了个显然违背了约定俗成的网络公平性原则的“算法”,甚至还做成了商业软件的,我非常看不起。建议他们把用户的 CSMA/CD/CA 机制也一起废了,甚至空闲时段也不断往外发数据包,一直抢占完所有资源,这样更快。

Reference


最后是本文在写作时所有阅读、参考过的文章/网页

[1] 来自Google的TCP BBR拥塞控制算法解析
[2] TCP自时钟/拥塞控制/带宽利用之脉络半景解析
[3] A quick look at TCP BBR
[4] Patchwork Linux network development

声明: 本文为0xBBC原创, 转载注明出处喵~

《关于TCP的三言两语》有6个想法

    1. 上周给服务器换了内核,结果阿里云的ECS的内核貌似是修改过的,第二天中午整个系统都没法访问了。。于是回滚之QAQ

发表评论

电子邮件地址不会被公开。 必填项已用*标注