互联网络那些事儿——纪念中国互联网元年22周年
5G网络中各层IP分片对端到端性能的影响--随手记2023(13)
国际互联网国际出口(中国内地)
中国内地互联网络连接带宽拓扑图
5G UE IP地址管理与SSC Mode总结
温故知新:IPV6 blackhole的配置示例
QUIC是Google公司设计的基于UDP的低时延的互联网传输层协议。TCP/IP协议族是互联网的基础。其中主流的传输层协议包括TCP和UDP协议。与TCP协议相比,UDP更为轻量和高效,因为不是闭环机制且错误校验也要少得多,开销也就要少。这意味着UDP往往效率更高,但是没有免费的午餐,相对来说UDP可靠性比不上TCP。在当前的主要网络业务中,游戏、流媒体以及VoIP等应用均采用UDP,而网页浏览HTTP、邮件email、远程登录telnet等大部分的应用均大部采用TCP。而Google当初的想法是将这两类传输协议的优点相结合,也就是同时实现高效低延迟及高可靠性,并且尝试将之应用到更高的安全协议上,于是QUIC就诞生了。QUIC 的连接建立延迟较低、拥塞控制得到改善以及丢失恢复能力更强,QUIC 的性能比TCP有了真正的提升。对于像网络搜索这样的延迟敏感型服务,最大的收益来自零往返连接建立(Zero RTT)。进行安全网络浏览的标准方式是通过TCP + TLS进行通信,这需要与服务器进行2到3次往返才能建立安全连接,然后浏览器才能请求实际网页。QUIC的设计使得如果客户端之前已经与给定服务器通信过,它就可以开始发送数据而无需任何往返,从而使网页加载速度更快(优点类似buffer server的机制)。参见下面这张比较流行的图:
简略来说:QUIC=TCP功能+TLS1.3+复用功能+连接机制演进+其他改进:
沿用UDP用户空间协议
重试Retry机制
TLS1.3是必选项
Zero-RTT连接建立机制
拥塞控制:NewReno,CUBIC,BBR等等
不采用HOL的复用机制
FEC前向纠错机制(Forward Error Correction):通过数据包校验可以恢复丢失的数据包。
连接演进扩展到64bits的连接ID,即在变更IP后仍然保持连接。
QUIC加密传输标头并在UDP之上构建传输功能,避免对供应商和网络运营商的依赖,并将传输部署的控制权转移到直接受益于它们的应用程序(从另一角度使运营商更加管道化,看着真金白银从网络上经过却看不到进项)。除了更安全之外,加密所有内容还可以阻止那些讨厌的中间件通过依赖特定格式等来僵化协议。
流复用:为了避免由于TCP的顺序传送而导致的队头阻塞,QUIC支持连接内的多个流,从而确保丢失的UDP数据包仅影响数据包中携带数据的流。流足够轻量,因此可以合理地将新流用于一系列小消息中的每一个。也就是QUIC通过引入在连接上复用多个流的概念为每个流设计和实现单独的流量控制,QUIC解决了影响整个连接的队头阻塞问题。
QUIC的多路复用类似于HTTP/2。可以在单个QUIC连接上并发发送多个 HTTP请求(流)。但是,QUIC的多路复用超越HTTP/2的地方在于,单个连接上每个流之间没有顺序依赖关系。这意味着如果流2丢失了一个UDP数据包,它只会影响流2的处理,而不会阻塞流1和3的数据传输。因此,该解决方案不会导致队头阻塞。
丢失恢复:在TCP中,重新传输的段携带与原始数据包相同的序列号,这使 ACK 变得复杂。在QUIC中,每个数据包都携带一个新的序列号,包括那些携带重新传输数据的数据包。流帧中的流偏移用于传递排序,将TCP合并的两个功能 [排序和确认] 分开。数据包号表示显式的时间排序,这使得丢失检测比 TCP 更简单、更准确。这种分离还允许更准确的网络RTT估计,从而帮助延迟感知拥塞控制器(如 BBR 和 PCC)。
身份验证和加密:除了早期的握手数据包和重置数据包外,QUIC数据包都经过了完全身份验证,并且大部分都经过了加密,如下图QUIC包的结构所示:
QUIC的加密技术提供了两个级别的保密性:初始客户端数据使用初始密钥加密,后续客户端数据和所有服务器数据使用前向安全密钥加密。所有以明文形式发送的信息也包含在最终连接密钥的派生中 - 因此任何网络篡改都将被检测到并导致连接失败。
流量控制:QUIC使用流级流量控制,结合整体连接流量控制机制。与 HTTP/2 一样,流量控制机制基于信用:QUIC接收器会公布每个流内的绝对字节偏移量,接收器最多可以接收该数据。在特定流上发送、接收和传递数据时,接收器会定期发送窗口更新帧,以增加该流的公布偏移量限制,从而允许对等端在该流上发送更多数据。
拥塞控制:QUIC中的拥塞控制是可插入的。初始实现使用CUBIC。
连接迁移:TCP连接基于4元组:源 IP、源端口、目标IP和目标端口。如果其中任何一个发生变化,则必须重新建立连接。但是QUIC连接基于64位连接ID,只要连接ID保持不变,连接就可以保持,而无需断开连接和重新连接。例如,如果客户端使用IP1发送数据包1和2,然后切换网络,更改为IP2并发送数据包3和4,则服务器可以根据数据包头中的连接ID字段识别出所有四个数据包都来自同一个客户端。QUIC可以实现连接迁移的根本原因是底层UDP协议是无连接的。
Libraries:Chromium(C++,Google),MsQuic(C,MS),Quiche(Rust,IETF),quic-go(GO,Google),mvfst(C++,facebook)等。
HTTP/3和QUIC将在更多领域展现其价值,例如:随着HTTP/3和QUIC的持续发展和广泛应用,无论是直播和视频流、视频点播、下载还是Web加速,我们都可以期待看到各种各样的用例出现。这些技术最有前景的一些应用场景包括:
实时应用:HTTP/3和QUIC非常适合需要低延迟、高吞吐量连接的实时应用。这包括视频会议、在线游戏和直播等应用。基于QUIC更强的抗网络不良能力和连接迁移能力,可以有效改善视频启动时间,还可以降低视频卡顿率和请求失败率。
物联网:在物联网场景中,终端设备的使用场景通常很复杂且混乱,例如高速移动、海上和山区环境,设备可用的网络资源非常有限。基于TCP的消息队列遥测传输(MQTT)物联网通信协议在重新连接时经常会出现频繁的连接中断和服务器/客户端开销大的情况。然而,QUIC的0 RTT重新连接/1 RTT建立能力和多路复用特性的优势在恶劣和不稳定的网络中得到了体现,可以提高内容传输效率并增强用户体验。
云计算:随着越来越多的应用程序和服务迁移到云端,客户端和服务器之间需要更高效、更可靠的连接。凭借处理多路复用流、低延迟握手和零往返时间恢复的能力,QUIC可以增强基于云计算系统的性能。
电子商务和金融支付:在电子商务中,QUIC改进的可靠性和速度可以帮助确保客户即使在流量高峰期也能获得无缝、流畅的购物体验。QUIC提供支持电子商务应用所需的性能和安全功能,例如快速的页面加载时间和安全的支付交易。
随着技术的不断发展和成熟,我们可以期待看到更加多样化和创新的用例出现,从而推动新应用程序和服务的发展。
QUIC协议更为详细的资源可查阅如下资料:
Https://quicwg.org
坐而论道,好好读书!