TCP/IP 与高速网络

发布于:2025-06-08 ⋅ 阅读:(21) ⋅ 点赞:(0)

题目用 “与” 而不是 “是” 连接两名词,说明它们天然互斥,就比如看到 “经理与人” ,自然而然的就会觉得经理接近了神。

数据在 TCP/IP 网络上传输获得的 “尽力而为” 承诺的时间在端到端时延中占比太大,以至于针对 TCP/IP 的传输优化存在一个很低的上限,甚至说 TCP/IP 不可优化。

可以这样理解,数据在主机生成直到网卡发送的时间是 ns 级(至多 us 级),数据被目标主机网卡接收直到被消费的时间亦 ns 级,在这期间的网络传输时间却没有任何保底承诺,且没有任何反馈承诺,这个时间从 us 到 s 不等,如此大的时延抖动跨度,任何附加手段均无能为力,即使最大强度最理想的流控和拥塞控制附加其上,也只能将抖动压缩至 5~10ms,这对于 400Gbps+ 高速网络依然不可接受,这是 TCP/IP 网络的属性,而非缺陷。

想获得极致性能(高吞吐,低时延,us 级抖动),TCP/IP 向左,你向右。

问题显然就是沙漏模型。胖端瘦网模型的意思是将控制全部移到主机,网络只负责无状态尽力而为转发,这种转发方案就是经典的 “基于最短路径的逐跳转发”。几乎所有优化都是在修补这个转发方案缺失的部分:

  • 无状态到有状态:优先级队列,状态队列,数据包分类,调度;
  • 逐跳转发到虚电路转发:MPLS,SR,SRv6;
  • 最短路径到多路径:ECMP,MP-XX,概率路由;
  • 无反馈到反馈:ECN, INT(Inband network telemetry),PFC;

但这些线性扩展行为从没有给出系统化解释,这就像分析农业或城市起源的单一原因一样,注定失败。另一方面,在尽力而为网络构建一个全新的传输框架时,会同时遇到兼容松散控制和无法获得信息这一推一拉的双面打击,你只能相信最短路径,又无法获得任何可承诺的信息,什么都做不了。

向右走,那么构建胖网络。但切忌在现有架构上增加更复杂,更智能的算法,到头来只是在寒冬给瘦网络提供了一件更厚的羽绒服而已,只是有了更稳固的支撑,而不是获得了天然御寒的能力。

网络的核心是拓扑,只有基于全互联规则拓扑构建的网络才能彻底打破僵局。该基础上的协议自然利用该基础的特征,而不是 IP + 4-layer-port 的 tuple 特征,在此基础上构建的交换机虽然还是交换机,但已经与以太网交换机有了本质不同。

仅举一例,单元非仅此一例。对比 NVSwitch 和以太网交换机,为防止端口 HoL 造成排队拥塞,两类交换机可基于同样的思路构建 VOQ,但本质区别在于实现的成本不同:

  • NVSwitch:直接通过内存地址映射,如 0x1000-0x2000 → 映射到 NVSwitch 的 VOQ_GPU0_Chunk1;
  • 以太网交换机:包分类算法将提取包 tuple 信息将其映射,需要复杂的算法权衡时空交换利弊;

很容易看到 “哪里不行补哪里” 的哲学,NVSwitch 以 GPU 内存事务为中心,而以太网交换机以网络传输协议为中心:
在这里插入图片描述
一个类比,尽力而为网络就像我们曾经拿着地图找路或一步一问路到达目的地,智能全在我们自己,而高速网络正适合我们如今叫网约车或开车导航到目的地,我们什么都不用管。

此前我提到等流长的数据在主机端自觉进入不同的队列(参见 数据中心隔离大象流隔离网络流量)而不是让交换机分类,遭到了一众票嘲讽,我用不回应来回应。很多人仍将注意力集中在 “如何分类数据包” 上,觉得只是将分类的工作从交换机转移到了主机,所以根本不知道我在说什么,其实我的意思是将网络关注的中心从数据包转移到业务,这就好理解了。数据流多大规模,应用程序自己知道,所以无需任何算法启发分类,各就各位即可。

换句话说,让交换机看到的和业务看到的是同一个东西就是了,这就将整个网络汇集到了同一个命名空间,其实它们本来就在同一个命名空间,是 TCP/IP 隔离了它们,我们习惯了这种隔离而已。

看到同一个命名空间,高速网络非常清除数据的 sender 和 receiver 要干什么,交换机同样非常清除每个节点在阵列中如何等价多路径可达,那么聚合带宽的力量便不可小觑,如果出现多对一的 incast,交换机显然知道如何在多条路径均衡分发流量,甚至知道如何错开它们(比如暂存 VOQ?)。

由于直接映射业务命名空间而不是数据包序列空间,便可直接聚合带宽而不会面临聚合吞吐时必将面临的重排序等 HoL 问题,若映射数据包序列空间,则必须关注网络保序,因为在提交业务前必须终结网络数据包的保序承诺,若不跳跳谨慎保序,重排序压力将会压垮接收端主机。

传统网络数据包汇总了业务,但也隔离了业务,网络只能看到数据包,而数据包在 TCP/IP 网络设计之初就是适配最短单路径的,这直接阻碍了在传统网络进行多路径传输。

类似乱序重排问题,传统网络极力用精巧的算法弥补信息的缺失,然而要 O ( 1 ) O(1) O(1) 还是要用空间来换,传统网络只能看到映射进网络空间的数据包 tuple,所有计算都基于这些 tuple 去启发,每一跳引入的 1~5us 左右的计算延时就是效率低的根源,这也限定了以太网的效率极限。对待高速网络,交换机要去索引而不是计算,形象讲就是看不同 mark 做不同动作,看到 3 就直接入 3 号队列,而不是基于 3 去算出队列号。

现代操作系统的 MMU 是一个极好的索引而不查找例子。另外,对比 NVSwitch 和以太网交换机也是高尚的,但我几乎不写技术文档,此处还请自行搜索查阅。

任何 if 都要额外分支开销,如果提前知道,何不直接索引。关于 “交换机认业务而不是数据包” ,我想再说两句。这里举些例子。

先说域名解析,域名好记,IP 好处理,这些都是从书上学的,但实际上更深层次的意义在于 IP 处理更简单而不是更快,直接寻址域名肯定最快,只不过人和机器都不是纯粹追求更快,而是一个性价比。

再说找人,用身份证号找人还是用姓名,工作单位,住址找人,肯定是后者更快,但还是一样的理由,身份证就像数据包,处理起来更方便,统一。

再看城市道路,人民大街,解放大路好呢,还是经三路,纬五路,二道街,三道街好,另外,快速路出口,数字编号好呢,还是路名编号好,依据上面的理由,自己评判。

总而言之,更快和性价比更高之间永远都在玩跷跷板,要更快,就直接点,要更高性价比,就加个中间层解耦合,记住,宗旨就是节约 full-mesh。

现在飞机逐渐点对点了,枢纽大飞机慢慢退出了历史,人们从选择到哪里坐枢纽大飞机中转转换为空管如何调度家门口小国际机场小飞机点对点起降。

随着资源逐渐丰富,各领域都在逐渐从更高性价比向更快偏移,搞高速网络的咋就是转不过来呢,然而还是一边高低要抬个杠,一边又舔英伟达的皮夹克。

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