以太网之父 Bob Metcalfe 终于获得了图灵奖。说 “终于” 这个词来自于我的一个困惑,早在多年前,可能由于我的工作和以太网和 TCP 一直都很密切,就觉得 Metcalfe 和 TCP 之父 Robert Kahn 都应是图灵奖得主,但我发现只有 Robert Kahn 获得过图灵奖,我就觉得经理欠 Metcalfe 一个图灵奖。为什么不呢?以太网从 3Mbps 一路过关斩将到 800Gbps,1.6Tbps,都快要把传送网江湖统一了。如今终于实至名归。感谢两位老爷子给我这份工作。
1973 年夏,Bob Metcalfe 在一个备忘录中绘制了以太网的设想。
1973 年夏,Robert Kahn 提出 TCP-IP(一个整体,非日后分层的 TCP/IP) 设想。
1981 年,IEEE 802 工作组成立 802.3 标准委员会,着手标准化以太网。
1981 年,RFC 791/793 发布,正式提出 TCP/IP 标准备忘录。
1983 年,IEEE 802.3 国际标准发布。
1983 年,互联网协议族切换到 TCP/IP。
…
2023 年 3 月,我在 100Gbps 以太网上为 TCP 写 bug。
…
以太网和 TCP 均是面向失败的案例,它们同属互联网的基石。面向失败的设计可最小化依赖,最大化弹性,保证最坏情况的可用性,其它都不管,这是演化的前提。
以太网要处理的唯一失败是分组到不了目标,最简单的容错方式就是重试,但仅此就足够了。面向失败的设计不强制从失败中恢复的方式,只要结果。恢复方式不止 CSMA/CD,除了退避重试,还可用排队替代争抢解决冲突。以太网的优势在于没有约束,广播式多点接入只需网络提供一条通路,所以它从同轴电缆到光纤,从总线到 Hub/交换机,一直活得很好。
反例是 ATM,它是瘦端胖网的典型,恨不得在网络核心实现一切 “肯定的语义”,如 “ATM 必须做什么才能满足 XX”,“ATM 必须对语音,文本区别对待才能 XX”,在一个分布的网络上做这种约束必然将整个系统绑死,牵一发而动全身,从而失去了弹性。令牌环也一样。
TCP 是另一个好例子。
TCP 需要可靠,保序,它们失败后就是丢包,乱序,面向失败,解决这两个问题,别的什么都不用做。保序靠 停/等,可靠依赖 GBN,这就是 TCP 的全部,停/等 + GBN。
后面的 Fast Retransmit,SACK,TLP,RACK 可以更高效完成可靠和保序,TCP 变得越来越高效,一直被使用了 40 多年依然没被淘汰。但直到现在,TCP 的核心依然是 停/等 + GBN。
反例是 QUIC,能想到的都想到,约束太多,比如不加密都不行,如果只传输一个 stream,header 又太大。但其实依然无法 “确保” 解决问题,TCP 的问题 QUIC 都有,只稍微优雅。
以太网和 TCP 共同的,更大的反例是 RDMA + PFC 反压,为 “确保无损”,传输网络 “尽力” 不丢包,但实际效果可能会引入不可预期延时。而 “确保无损” 的需求竟然来自 sender/receiver 资源有限(内存,处理器约束很难实现 Out-Of-Order 队列和 SACK)的约束,一旦这些约束不再,对 PFC 的所有假设都要推导重来。
无论以太网还是 TCP,容错方式都是重试,直到成功。它们都没任何机制确保成功,只在端侧对失败容错,同时都不对传输网络进行任何假设。
重试的背后是统计模型,随机和概率是最自然的方式,也最省力,效果也不差。在统计意义上,总会成功,让猴子敲键盘,总会敲出一首名诗。这就是最坏可用性的统计方法,而不是精确方法。
换句话说,为了从失败中恢复,只需要重试,别的什么都不用做。这是唯一的核心,一切约束过程的机制都要尽量避免。
再多说说以太网。
以太网冲突检测,重试背后和分组交换网一样,依然是排队论。重试时间分布和排队时间分布是同一个分布,随系统节点数量给出不同的期望。和典型的分组交换网(如 Arpanet)不同的是,在以太网中端主机分担了存储转发的职能。
存储转发设备将冲突暂存在队列中,而以太网则用总线冲突为代价来等效,终端自决消除了对存储转发设备的依赖,大大简化了局域网的设计。
Metcalfe 的创新在于他最大限度疏远了重试频率和节点规模间的关联。
以太网规模越大,潜在冲突越多,成功发送的时间越久,这和排队论一致,到达率越高,排队时间越久,以太网在终端统计复用以冲突换设备排队。每一次冲突都是电能的损耗,重试次数越多,损耗越大。二进制指数随机退避算法将冲突次数控制在不随网络规模同步增加的 < O(logn) 的程度,网络规模越小,潜在冲突越少,重试越快,网络规模越大,潜在冲突越多,重试越慢。
总体而言,Metcalfe 抑制了重试次数随网络规模同步增大的程度,这极大提高了以太网的可用性并降低了能耗。这和以 Metcalfe 命名的 Metcalfe 定律有关,Metcalfe 本人认识到网络的价值与网络节点数的平方成正比,他当然不希望网络的成本也遵循这个定律。
下一个问题,以太网为什么没有一开始就引入交换机?
小规模短距离通信,总线最自然,最小满足。这种想法来自于一个屋子里的人交流和一个城市里的人交流的区别。一个屋子里的人交流直接说话,如果说话人太多就等一会儿,无需任何仲裁。但一个城市的人交流,就不得不借助额外的设施,但即使是一个城市的人交流,核心依然是交流本身,而不是借由的这些额外设施。
在人们已经习惯将网络通信类比成书信往来时,以太网模拟了在耳目之所及范围内人们正常的交流方式。书信只是媒介,如果人声可光速传播,何必用书信。以太网关注的通信本身,而非方式。遗憾的是,大多数人颠倒了这关系。
以太网关注通信本身而不是通信借由的设施要实现什么功能,所以它不排斥任何具体实现方式,从 10Mbps,一路走到 400Gbps。
但在交换网领域,Metcalfe 定律却制约了成本,简单来讲就是网络的流量需求和网络节点数量的平方成正比,而网络流量被集成电路驱动,受摩尔定律制约,摩尔定律曲线远没有 Metcalfe 定律曲线更陡峭。这个话题是下一篇的主要内容。
对网络传输,很多人倾向于过度设计,倾向于性能大于可用性,但没有可用性,等于零。以太网和 TCP 实在给这些人上了一课。
过度设计的反面,仅保证最坏情况下的可用性。没有精确信息,不猜不假设,没有任何信息,交给随机。这就是面向失败的设计,剩下的以后再说。
总结回顾互联网是如何忘掉精确性的是有益的。
广域网通信,是计算机的发展和对联网通信的需求促进人们选择了分组交换,因为计算机通信具有短突发,频繁的特征,电路交换太浪费了,有排队论作理论支持,分组交换即可满足计算机通信最基本可用性,统计复用在路由交换节点完成。丢掉了电路交换复杂的程控装置,分组交换网简洁到极点。
局域网通信,CSMA/CD 的以太网的随机过程在时间域完成,排队论依然在背后起作用。
互联网的任何角落,无论交换机 buffer 的空间域还是以太网总线的时间域,都摆脱了对精确性的依赖,将时空统一,交换机作为空间域随机过程的场所,二者是一致的。说到底,整个互联网本身就是面向失败的,最大化弹性的统计特征取代毫无弹性的精确性,面对严重核打击依然可继续运行。
…
经常有人问 TCP 短连接如何做拥塞控制,就是那种一个 init cwnd 可以将数据发完的连接,我建议一下子发出去。他们会问要是丢包怎么办,没有任何反馈可用,我建议说把最后一个包发 5 遍。不靠谱?那就发 10 遍。大概循着这个意思,理解奥斯特豪特 Homa 的 unscheduled packet 就容易多了。
借着梅特卡夫获得图灵奖的热度,引发了一些关于以太网,TCP,光纤以及互联网本身的思考。本周准备写三篇随笔。
浙江温州皮鞋湿,下雨进水不会胖。