HTTP3.0有了解过吗?

5 分钟阅读 820 字 + 422 词
  1. 无队头阻塞: QUIC 使用 UDP 协议来传输数据 一个连接上的多个stream之间==没有TCP层的序列号应答依赖==, 如果一个stream丢了一个UDP包,不会影响后面的stream 不存在 队头阻塞问题
  2. 零 RTT 连接建立 :QUIC 允许在 首次连接时进行零往返时间连接建立 ,从而减少了连接延迟,加快了页面加载速度。
  3. == 连接迁移 ==: QUIC 允许在网络切换(如从 Wi-Fi 到移动网络)时,将连接迁移到新的 IP 地址,从而减少连接的中断时间。具体的实现是==利用一个64位的随机数作为ID来标识==,而==不是利用四元组进行标识一条连接==
  4. 向前纠错机制 每个数据包除了它本身的内容之外,还包括了部分其他数据包的数据 ,因此少量的丢包可以通过其他包的冗余数据直接组装而无需重传。 向前纠错牺牲了每个数据包可以发送数据的上限,但是减少了因为丢包导致的数据重传。
  5. 安全性: HTTP/3默认使用TLS加密,确保了数据传输的安全性。
  6. 滑动窗口的起始位置是 当前收到的最大offset ,而不是TCP中下一个还没有收到的ACK的包。
参考答案:
HTTP/3是HTTP协议的最新版本,它基于QUIC协议,具有以下特点:
  1. 无队头阻塞: QUIC 使用 UDP 协议来传输数据 一个连接上的多个stream之间没有依赖, 如果一个stream丢了一个UDP包,不会影响后面的stream 不存在 队头阻塞问题
  2. 零 RTT 连接建立 :QUIC 允许在首次连接时进行零往返时间连接建立,从而减少了连接延迟,加快了页面加载速度。
  3. 连接迁移 QUIC 允许在网络切换(如从 Wi-Fi 到移动网络)时,将连接迁移到新的 IP 地址,从而减少连接的中断时间。
  4. 向前纠错机制 :每个数据包除了它本身的内容之外,还包括了部分其他数据包的数据,因此少量的丢包可以通过其他包的冗余数据直接组装而无需重传。 向前纠错牺牲了每个数据包可以发送数据的上限,但是减少了因为丢包导致的数据重传。
  5. 安全性: HTTP/3默认使用TLS加密,确保了数据传输的安全性。
QUIC 也有个序列号,是递增的。任何一个序列号的包只发送一次,下次就要加一了。例如,发送一个包,序号是 100,发现没有返回;再次发送的时候,序号就是 101 了;如果返回的 ACK 100,就是对第一个包的响应。如果返回 ACK 101 就是对第二个包的响应,RTT 计算相对准确。但是这里有一个问题,就是怎么知道包 100 和包 101 发送的是同样的内容呢?
QUIC 定义了一个 offset 概念。QUIC 既然是面向连接的,也就像 TCP 一样,是一个数据流,发送的数据在这个数据流里面有个偏移量 offset,可以通过 offset 查看数据发送到了哪里,这样只要这个 offset 的包没有来,就要重发;如果来了,按照 offset 拼接,还是能够拼成一个流。