Http 3.0 是基于 udp 的,如何保证传输可靠性
大约 2 分钟
HTTP/3是基于UDP的,但它通过QUIC协议来保证传输的可靠性。下面我来详细解释一下:
QUIC协议的可靠性保证机制
1. 内置的可靠传输机制
QUIC在应用层实现了TCP的可靠性特性:
- 数据包确认机制:每个数据包都需要接收方确认,使用类似TCP的ACK机制
- 重传机制:对于未被确认的数据包,发送方会进行重传
- 拥塞控制:实现了类似TCP的拥塞控制算法,避免网络拥塞
- 流量控制:通过滑动窗口机制控制数据流速
2. 连接管理
QUIC连接 = UDP套接字 + 连接ID- 使用连接ID而不是IP地址和端口来标识连接
- 即使客户端IP发生变化,连接也能保持(例如从WiFi切换到移动网络)
3. 多路复用与流控制
- 独立的流:每个HTTP请求/响应在一个独立的流中传输
- 流级别的错误处理:单个流的错误不会影响其他流
- 优先级管理:可以为不同的流设置优先级
4. 加密与安全
- 内置加密:QUIC在传输层就进行了加密,不需要额外的TLS握手
- 减少握手延迟:0-RTT和1-RTT握手,比传统的TLS握手更快
与TCP+HTTP/2的对比
| 特性 | TCP + HTTP/2 | QUIC + HTTP/3 |
|---|---|---|
| 连接建立 | 需要TCP三次握手+TLS握手 | 集成加密,减少握手次数 |
| 多路复用 | 受队头阻塞影响 | 流独立,无队头阻塞 |
| 连接迁移 | 不支持 | 支持(基于连接ID) |
| 错误恢复 | 影响整个连接 | 只影响单个流 |
实现可靠性的关键技术点
数据包编号和确认
每个QUIC数据包都有唯一的编号,接收方通过发送ACK帧来确认收到的数据包。发送方维护未确认数据包的列表,并对超时未确认的包进行重传。
前向纠错(FEC)
某些实现中使用前向纠错技术,发送冗余数据,使得即使部分数据包丢失也能恢复原始信息。
快速重传和恢复
采用快速重传算法,当检测到数据包丢失时能够快速恢复,而不必等待超时。
总结
HTTP/3虽然基于UDP,但通过QUIC协议提供了比TCP更强大的可靠性保证。它不仅解决了传统TCP的一些问题(如队头阻塞),还提供了更好的性能和安全性。QUIC在应用层重新实现了传输控制的逻辑,使得它能够更好地适应现代网络环境的需求。