TCP 以及网络难题

网络问题和传统计算机问题有一个本质的区别,那就是网络问题几乎都是在整理一团乱麻。
网络问题是社会学问题,不仅仅是技术问题。

日常调侃中我曾经说过,即便你对网络知识一无所知,只要你进了机房,你面对的就是一团乱八七糟的网线,油然而生的欲望就是将它们整理干净。如果你是一个 CCIE,甚至只是一个互联网公司的工程师,你的工作也高尚不到哪里去,依然要在纷乱局面中甄别出网络问题或者不是网络问题,而这个工作牵扯到的更多是扯皮而不是技术。

无论如何,网络问题就是一团乱麻,处理网络问题就是整理一团乱麻。网络问题和传统计算机问题在这一点上有大不同。

当网线已经缠成一坨屎时,你唯一能做的就是在这团屎上继续花式拉屎,当一个协议已经被诟病成一坨屎时,你唯一能做的可能只是单边优化它,所有人都知道,在互联网上部署一个双边协议有多么困难。

昨天我写了一篇文章:重新设计 TCP 协议,一位朋友从抽象和模型的视角进行了评论:

  1. 可靠传输的归属问题,到底他在哪层合适,网络层是一切大流量必经的路径,那么全局的感知必须在这里,拥塞控制在这里得有全局感知(类似不同拥塞控制的彼此友好和彼此感知) 2. 重传的粒度问题,其实本质出在stream based抽象和网络层package物理传输实质的冲突,作为stream来说,他基于bytes太自然了,这其实是抽象的代价,要高性能肯定得上下打通 3. out of order,这个在整个计算机里面都是复杂的问题,无论multi-core还是multi-channel,本质也是底层抽象不理解上层有序模型导致的问题,要么彻底weak order(放弃可靠传输的抽象),让上层做hints,要么接受无意义的同步。一旦这里放弃,就出现了1里面提到的全局不感知问题了…就是没最优解

我对评论中的观点非常认同,但我更倾向于以不同视角解释这些难题,既然改不了就不要改,网络协议自出现以来就没有机会再推倒重来。

注意⚠️,这个和设计一个 CPU,重构一个体系结构完全不同,TCP/IP 自出现以来 40 载,每年都希望被重构,但从来没被重构过,这不仅仅是保持兼容问题。网络覆盖的抽象足够广,注定它就很难被重构。

如果理解 TCP/IP 一开始并非分层族,IP 并不存在,IP 是从 TCP 中分离出来的,理解这一切便显然。

那么,只有迭代。早上我回复评论如下:

没办法,最优解甚至并不是目标。网络问题的特殊性在于每次你只能动一个局部,现实不允许部署全链路方案,所以分层模型非常成功,端到端原则非常成功。几乎任何解决方案都是基于现实做的,这些方案在解决某个问题时,它的前置条件甚至都已经不容修改了。阿里 HPCC 理论上是一个好协议,但却很难甚至根本没办法部署,就连依旧遵循端到端原则的 QUIC 在部署中也存在很大阻力,最终的折中可能依然是个四不像。这是网络的分布式本质决定的,没办法,网络就是这样进化出来的,它的生态不允许做重新抽象和重新设计。就跟生物进化一样,人和蚂蚁都有各种bug,甚至科幻小说里也见不到一个没有缺陷的完美物种。 ​但在主板上同样的事却容易很多,很容易做到自闭环,只要对外接口一致,全链路实现完全自主,想怎么折腾就怎么折腾。

TCP 的问题众人皆知,如何修正也算明了,可问题恰恰不在 TCP 的问题被人知晓,而是即便它有再多不是,你也很难升级它,如果因此你设计了新协议,那么新协议在升级过程中终会碰到纳什均衡,最终的结局还是共存。

但上述说的这一切都是针对互联网的,对 IDC 网络不算数,IDC 网络还是可以稍微折腾一下的。可即便如此 HPCC 为啥没部署呢?

名字和名分重要吗?真的,我设计的这个新协议也是针对 IDC 的,对互联网不算数。

从南浔到无锡再到苏州湾,绕了一个太湖,路上跟老婆聊起比亚迪,我说这车是好车,败在名字和商标上了,想做民族品牌就要取个民族名字,比如东风,解放,长城,长虹,红旗…其实奔驰,宝马,奔腾都挺好的,但已经作为音译给了德国品牌,否则完全可以用来重命名比亚迪,吸取点教训吧,外国牌子简单音译就好,别把好名字给了别人,比如 Audi 的中文名叫奥迪就挺好,这名字作为中文没有任何意义。大年初二,随便写篇文字。

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

你可能感兴趣的:(网络,tcp/ip,网络协议)