QUIC基础学习

概念理解

原视频: QUIC核心原理和握手过程_哔哩哔哩_bilibili

quic包传输原理

每个quic包都有自己的号码, 如果丢失一个quic包就知道丢失了quic包里的什么数据流, 其他quic包不需要停着不动等待前面丢失的quic包重传, 只需要重传必要的quic包, 以此来解决TCP的队头阻塞问题

但是丢包的数据刚好是阻塞浏览器渲染页面的文件, 比如是CSS的一部分, 那么我们的页面还是无法渲染, 看着解决了队头阻塞问题, 另一个问题又出现了

0-RTT

三次握手为什么是1-RTT, 因为在第三次client发送ack的时候就可以直接发送数据了, 不需要等待, 所以实际上只有1-RTT.

为什么quic的通信可以是0-RTT?

因为quic包将加密方式和信息都已经整合到发送的quic包中了, 所以可以和数据一起进行发送, 从而达到0-RTT.

所以可以理解为1-RTT是quic的首次通信, 而0-RTT是通信的恢复.

1-RTT握手的本质还是: TCP+TLS

  1. 一开始客户端会发送client hello 打招呼
  2. 接着服务端会响应server hello作为确认
  3. 这两步的作用可以理解为加密初始化, 两步完成以后下面的信息都是加密信息了

数据包解析

1-RTT建立连接

  1. 发送client hello 数据包

在最开始打招呼的时候就已近包含了加密随机数,加密套件, 压缩方式等等加密信息

  1. 响应server hello数据包

服务端的server hello 也提供了相应的加密参数内容

正是两步双方提供了各自需要的加密参数, 生成了人中间人不知道的秘钥

  1. 服务端发送数据包

除了连接信息就是加密信息了

意思就是服务端在发送server hello 之后, 还会把一些关于安全的扩展信息跟着一起发送,比如证书.

  1. 客户端响应Finished

  1. 服务端响应HANDSHAKE_DONE

而且这些quick包一般会分为多个同时进行发送, 在确认发送完毕以后客户端会响应Finished来表示握手正式完成, 一般来说服务端也会响应 HANDSHAKE_DONE 来表示握手正式完成.同理实际上在客户端发送HANDSHAKE_DONE的同时就已经可以发送数正式的据包了.

  1. 接下来就是包含HTTP/3的数据传输

0-RTT通信恢复

quic实现

GitHub - netty/netty-incubator-codec-quic

使用示例: reactor-netty/reactor-netty-incubator-quic at main · reactor/reactor-netty · GitHub

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值