建设电子票务系统的网站需要多少钱,外贸免费网站建设,成都网站建设哪家售后好,门户网站建设服务今天依旧是与 TCP 相关的一个短评。
先看软硬件间的胶着。晶体管诞生以来#xff0c;硬件一直在突飞猛进发展#xff0c;后来这个事被摩尔定律正则化#xff0c;人们开始可以预测未来#xff0c;但即便如此#xff0c;软件依然跟不上来#xff0c;不过几年#xff0c;老…今天依旧是与 TCP 相关的一个短评。
先看软硬件间的胶着。晶体管诞生以来硬件一直在突飞猛进发展后来这个事被摩尔定律正则化人们开始可以预测未来但即便如此软件依然跟不上来不过几年老的软件架构就成了新硬件的掣肘。
再看协议的实现基础。早期的 CPU 是一个串行指令执行机器C 语言成了对它的最经典描述。总有人讨厌指针(特别是谭式指针)其实指针的背后存储执行的架构总需要有个地址来索引内存。
最后看协议理论基础。分组交换网和分时复用操作系统之间的关系分不开它们都旨在提供一个连续的假象它们共同构建了统计复用共享资源的理论基础从分时系统控制的主机到分组交换控制的网络。
在这背景下若想将一些字节从本地传输到远端主机结构决定行为模拟 CPU 的行为是最自然的协议自然是流式的。一个 1970 年代的 multipath spray 协议是难以想象的至少 CPU 就不允许并行操作。
于是序列号管理映射到地址管理TCP 传输一个 1MB 的文件和 memcpy(dst, src, 1MB) 语义一致如果将序列号一一映射进内存地址空间便是 RDMA冥冥中似乎早有定数。
但 Socket API 将这可能性封死了将传输原语彻底绑死在单核 CPU 架构上并影响了 RFC793。要进行一次传输必须先创建一个 socket 句柄随后只能在该句柄上操作而不是直接操作序列号
sd socket(...);
...
write(sd, ...);
recv(sd, ...);序列号管理被隐藏了更别提序列号和内存地址之间的映射管理这天然与并行处理相悖。比比看下面的
CPU-1:
Rmemcpy(Raddr, src, 1KB)
CPU-2:
Rmemcpy(Raddr 1KB, src 1KB, 1KB)说 Socket API 直接阻碍了并行传输协议的发展一点也不为过。 但 Socket API 本身就诞生在一个串行架构时代以分时 IPC 为目的这是时代局限也是日后 “软件跟不上硬件” 的经典案例。
1990 年代之前这没有任何问题就连最初的 Cisco 路由器都只类似于一台 2010 年代初安装了 Linux 内核的单 CPU 软路由这种局面一直持续到 D-LinkTP-Link 进入千家万户时事实上直到今天大多数家用路由器依然如此。但核心网络在 2000 年后就开始完全不同。
当硬件全面步入并行架构后多核处理器阿斯克FPGA 等非常善于逐包 spray负载均衡ECMP这种事对并行硬件而言轻松而高效但始发于主机的 socket 是流式的socket 句柄无法充分利用主机和网络的并行处理能力同时对这种能力抵触主机或网络对属于同一条数据流的 packet 做 spray 是要出问题的比如 TCP 会乱序从而导致无效重传而恶化拥塞即使并行能力再强的硬件也不得不采用更复杂的技术维护 “数据流”最简单的莫过于五元组 hash即使这样也类似于为马车加装蒸汽机在电车后拉柴油发电机。
看看现在的 TCP 传输核心交换机的并行能力上不来主机的多核能力无法发挥作用由于按流管理拥塞大象流老鼠流对链路带宽抢占的作用效果完全不同这对拥塞控制更是带来了挑战。
现在我们有 MPTCP但它怪怪的本质上它并不是真正的 multipath只是将 TCP 流分成了 flowlet(subflow)一个大 TCP 变成了几个小 TCP 而已TCP 面临的问题在更低的 MPTCP 层面subflow 依然还是要面对。不是没法重新设计而是为了兼容 socket API根本无法 multipth。
试想一种完全的 mutipath spray 传输协议向前泛洪收于目标主机这将对传统 TCP/IP 架构带来巨大改变IP 路由不再 SPF接入带宽等于(甚至大于)汇聚甚至核心带宽拥塞消除这将是多么巨大的皮鞋
多路径 spray充分利用可能的(不太远不最优)每一条路径传输(包括重传)数据主机的流量被多条路径分担设主机数为 m网络链路数为 n核心能力为 n接入能力为 n每个主机的流量被核心同等分担拥塞被同等分担链路利用率均匀化拥塞消除更容易。
广域网迭代慢整不了这些花活儿但数据中心能啊。
为什么没有成为这样与流式传输和最短路径这两个 TCP/IP 的早期核心概念分不开因为 19701980 年代只能这样。随着硬件的快速发展软件需要更新但向前兼容阻碍了更新。
进入云计算时代风水轮流转。如弹性需求边缘计算软件理念逐渐开始超前SDNSDS万物皆可 SD促进了硬件的革新。每当一些新的理念在 Linux 平台被 POC总有好几股力量将它硬件化不管 HomaSRDFalcon 还是最新的 TTPoE它们先进的卖点都是硬件实现各类定制硬件实现了定制协议开启了软硬一体化。总有一个应用最广泛的被标准化通用化成为新的标准然后诸如此类反复这叫牧村摆动。
如果你在设计一个新传输协议首先要摆脱 Socket API其次才考虑传输语义带宽不是问题(一条路拥塞其余链路空闲比比皆是)如何用带宽才是。
浙江温州皮鞋湿下雨进水不会胖。