加载失败
原帖为对 TCP 在构建现代互联网中所起作用的致谢,评论在此基础上展开技术与历史辩论。讨论回顾 TCP 的设计初衷(在不可靠的 IP 上实现可靠字节流,端点重传思想源自 Cylades)并指出把拥塞控制留给端点实现的灵活性。评论群体把问题延伸到当代挑战:高带宽、无线/移动、短 RPC、以及中间盒(NAT/CGNAT、防火墙)如何阻碍新协议部署,因此出现了 SCTP、QUIC、RUDP 等替代方案,但它们在操作系统支持与现实网络路径上遭遇实际约束。历史上包交换胜出导致的抖动与 QoS 问题、以及浏览器与大平台在传输协议推动上的角色,也是讨论的常见背景。
评论普遍认为,从“在不可靠的 datagram(IP)上实现可靠数据流”的问题出发,TCP 的总体结构几乎是自然而然的正确解法;这一端点重传的思想可追溯到法国早期网络 Cylades。讨论强调 TCP 的一个关键优点是把拥塞控制作为端点实现、而非固定的 on‑the‑wire 协议,这赋予实现者用不同算法(如 Reno、Vegas 或后续研究成果)去适配不同网络环境的自由。社区对丢包处理的改进(例如 SACK)以及对大缓冲、大 RTT、带宽波动等问题的持续研究,也证明了这种设计的可扩展性与演进性。评论还指出 TCP 的基本思路为后来的协议(如 SCTP、QUIC)提供了参照与借鉴。
多条评论列举了 TCP 在当代场景下的具体短板:原始窗口大小在今天的高带宽链路上受限,早期对缺失分组的处理导致 head‑of‑line blocking(头部阻塞),慢启动与三次握手对短 RPC/短连接极为不利。TCP 也难以区分因链路错误(如无线误码)与拥塞造成的丢包,导致在无线或多路径环境表现欠佳并引发 bufferbloat 问题。另外,连接对 IP 地址的绑定使得移动性差、连接迁移困难,某些实现的硬编码超时(例如 5 分钟)也不利于间歇性或长延迟链路;这些都是现代应用(移动、视频、低延迟 RPC)经常抱怨的点。
评论讨论了多种为弥补 TCP 局限而提出的替代方案:QUIC 为 HTTP/3 提供内建多路复用、TLS 整合与连接迁移以缓解头部阻塞,但为了能穿越现网和快速部署,QUIC 被封装在 UDP 之上并以用户态实现,这带来实现复杂度与内核不可见流量的权衡。SCTP 被提为面向消息且支持多流(multistreaming)的传输层协议,但在操作系统支持、NAT/防火墙兼容性以及发行版默认模块方面遇到阻碍,导致部署有限。还有诸如 Plan 9 的 RUDP,或像 WireGuard 那样在 UDP 上做简洁握手与加密的方案,被视为在简单性与可达性之间的现实折衷;评论里有人认为 QUIC 的能力对某些场景非常重要,但复杂性未必对所有人都划算。
[来源1] [来源2] [来源3] [来源4] [来源5] [来源6]
大量评论指出真正阻碍新传输协议普及的并非纯技术正确性,而是中间基础设施的现实:家庭路由器、运营商的 CGNAT、防火墙等中间盒常常只认 TCP/UDP(有时连 ICMP 都受限),会丢弃或阻止未知 IP 协议或扩展头。因此设计者把 QUIC 封装在 UDP(例如 UDP/443)是出于利用现有端口/映射与 NAT 行为的务实选择,而不是纯粹的技术偏好。讨论还触及 IP 协议号分配的历史问题、IPv6 扩展头在实务中常被中间盒阻断,以及 NAT 对端到端原则的破坏,使得“能部署”的协议往往由中间设施决定而非理论最佳解。
评论回顾了包交换胜出背后的历史争论:电话业当年指责 TCP/IP 在 QoS、延迟、抖动和带宽保障方面不足,ATM、MPLS 和电路化方案在理论上能解决部分问题但成本和互联复杂度高。现实中包交换因更高的带宽利用率和更低成本而主导,运营商后来为语音等业务将骨干迁移到 IP,进而不得不在 IP 上做大量 QoS 与优化工程。讨论还提到现代数据中心和光学互联(WDM)中存在更接近“电路”思路的层次,以及包交换带来的 jitter/bufferbloat 等长期副作用。
若干评论从客户端/开发者视角指出,很多性能问题源自应用层的做法:Web 开发者常以并发多个 TCP 连接来并行化而非利用传输层或单连接的合理多路复用,作者举例自己在无 JQuery 时代实现的单流队列化预取库来优化体验。评论还强调浏览器厂商(特别是 Google/Chrome)对传输协议演进的巨大影响力:浏览器既是推动 QUIC 部署的主要推动者,也让传输决策部分由大型平台主导。有人因此表达对 Web 趋于集中化和平台化的担忧,认为这改变了早期互联网的多样性和自发性。
SCTP: Stream Control Transmission Protocol,一种传输层协议,面向消息且支持多流(multistreaming)与 multihoming,旨在减少单个流的阻塞,但在操作系统与中间盒兼容性上部署受限。
QUIC: QUIC,一种基于 UDP 的用户态传输协议(现为 HTTP/3 的承载),集成 TLS、多路复用与连接迁移以减少 head‑of‑line blocking,但因封装在 UDP 上实现而有部署与复杂性权衡。
SACK(Selective ACK): Selective ACK,TCP 的扩展机制,允许接收方选择性确认已收到的不连续数据块,从而更高效地恢复丢包并减少不必要重传。
head‑of‑line blocking(头部阻塞): 在有序传输(如 TCP)中,若早期分组丢失或延迟,后续数据即使已到达也无法交付给应用,导致多流或并发请求被单一丢包阻塞。
NAT / CGNAT: NAT(Network Address Translation)与 CGNAT(Carrier‑Grade NAT)通过地址/端口转换复用 IPv4 公网地址,改变端到端可达性并使新传输协议在穿越中间盒时遇到限制。
ECN(Explicit Congestion Notification): ECN,一种在 IP/TCP 报头上标记网络拥塞而非丢包的机制,允许端点以更温和的方式探测与响应拥塞。