知识卡片

QUIC放弃TCP自建可靠传输的两大收益

普通读书笔记卡

内容

[[HTTP-2多路复用终结队首阻塞与连接数优化战争]]解决了应用层的队首阻塞, 但留下一个更底层的问题:TCP协议要求包按序可靠到达,一个包丢失或损坏就 会让同一连接上所有流全部等待重传,哪怕其他流的数据早已收到——这是HTTP/2 传大文件反而可能更慢的根源。QUIC(Quick UDP Internet Connection,由 Google在2013年推动、2018年被IETF确立为HTTP/3的传输基础)的解法是放弃 TCP、改在UDP之上自己实现可靠传输。UDP本身没有丢包重传能力,QUIC自己 补上这一层的好处是可以对每个流单独做错误控制——一个流出错,其他流的 协议栈可以继续独立工作,不必互相牵连等待,这是QUIC带来的第一个收益。 第二个收益面向移动设备:QUIC给每个连接分配一个不依赖IP地址的”连接标识 符”,设备在Wi-Fi和移动网络之间切换、IP地址随之变化时,只需带着这个标识 符发个包就能复用原有连接,不必像TCP那样让所有连接超时、重新握手,这个 过程原本会带来很高的延迟。由于互联网上大量中间设备只面向TCP建造、对 UDP支持有限甚至直接屏蔽,QUIC的推广采取了”两条腿走路”策略:Chromium 同时启用QUIC和传统TCP连接,QUIC连接失败时零延迟自动回退TCP。

参考来源

- 位置:《凤凰架构:构建可靠的大型分布式系统》第4章"透明多级分流系统" 4.3.3节"快速UDP网络连接"(源文件:_epub-src对应OEBPS/Text/chapter43.xhtml) - 结论依据:原文说明QUIC自己实现可靠传输能对每个流单独控制、避免TCP丢包 导致所有流等待重传,并说明QUIC用连接标识符替代IP地址实现移动网络无缝 切换、以及Chromium的QUIC/TCP双轨回退策略,直接支撑本卡片结论。 - 原始内容:由QUIC自己实现的好处是能对每个流做单独的控制,如果在一个流 中发生错误,协议栈仍然可以独立地继续为其他流提供服务……QUIC提出了 连接标识符的概念……即使用户的IP地址发生变化,原始连接的连接标识符 依然是有效的。