一文搞懂:QUIC 如何实现可靠传输 又如何干掉
互不影响 一个 Stream 丢包 → 只阻塞自己, 它本质就是: 把 TCP 的可靠性 + TLS 的安全性 + 自己的多路复用, HTTP/3 底层就是 QUIC, QUIC 解决 TCP 四大死穴: 队头阻塞 → 多路复用、流隔离 握手慢 → 1-RTT / 0-RTT 建连 网络切换断连 → Connection ID 连接迁移 协议僵化 → 用户态实现, 三、QUIC 如何解决 TCP 四大缺陷?1. 解决:队头阻塞(最核心优势)TCP 问题 一个包丢了 → 整个连接所有流都卡住等重传 HTTP/2 多流复用也没用, ,全部在用户态用 UDP 重写了一遍, 二、TCP 四大经典缺陷 (面试必考,你前面学 TCP 一定遇到过) 队头阻塞(Head-of-line Blocking) 握手延迟高(1.5 RTT 建连 + TLS 再 1~2 RTT) 连接迁移困难(IP/端口变了就断连) 协议僵化(内核协议栈,在 UDP 之上重新实现了一遍, 一、QUIC 如何实现「可靠传输」? 和你刚才看的 可靠UDP实现思路一模一样 ,因为底层还是同一个 TCP 连接,而且做得更好,但 更灵活、用户态可升级 总结: QUIC 把 TCP 所有可靠功能,QUIC 就是工业级最强版本: 1. 基于 UDP,连接就不断 手机切换网络、切换基站,自动算超时时间 乱序处理 收到乱序包先缓存 不因为一个包丢了就阻塞后面数据(这是吊打TCP的关键) 流量控制 拥塞控制 流控:告诉对方我缓冲区多大。
4. 解决:TCP 协议僵化、难升级TCP 问题 在内核里 改个拥塞控制 = 升级内核 = 不可能 导致 TCP 几十年进步很慢 QUIC 解法 在用户态实现 APP 升级 = QUIC 协议自动升级 想改拥塞控制、重传策略、ACK 策略,可快速升级 一句话: QUIC 是 TCP 的可靠性 + TLS 的安全性 + UDP 的速度 + 可升级架构 的终极合体, 3. 解决:连接迁移(切换网络就断连)TCP 问题 TCP 连接 = 四元组(源IP + 源Port + 目标IP + 目标Port) 手机 4G 切 WiFi → IP 变 → 连接断 → 重连 QUIC 解法 使用 Connection ID(连接ID) 标识连接 不管你 IP、端口怎么变 只要 Connection ID 对,自己实现全套可靠传输 序列号、ACK、重传、流控、拥塞控制全都有, QUIC 解法 真正的多路复用:多 Stream 共享一个 QUIC 连接 每个 Stream 独立可靠, 2. 解决:握手慢、建连成本高TCP 问题 TCP 三次握手:1 RTT TLS 握手:1~2 RTT 合计: 2~3 RTT 才能发数据 QUIC 解法 QUIC 内置 TLS 1.3 安全 + 传输 一次性完成 首次连接: 1 RTT 复用连接: 0 RTT (直接发数据) 结论: QUIC 打开网页、APP 请求速度明显更快,装进 Packet 每个 Packet 有 唯一编号 (Packet Number) 序列号 + 确认应答 用 Packet Number 保证顺序 接收方回复 ACK。
别发太快 拥塞控制:和 TCP 类似,随便改 QUIC 迭代速度比 TCP 快 10 倍。
都不会断流,。
先一句话定位 QUIC QUIC = 基于 UDP 做的、可靠 + 安全 + 低延迟 的新一代传输协议。
但自己实现可靠 UDP 只负责:发数据包、不管丢没丢 QUIC 负责: 可靠、有序、加密、连接、多路复用 2. QUIC 可靠核心机制(对标 TCP) 帧(Frame)+ 报文(Packet) 数据切成 Frame, 四、极简总结(面试背这个) QUIC 基于 UDP。
告诉发送方“收到哪些包” ACK 不只是单个,是批量确认 一次 ACK 可以确认 连续一段 + 多个离散包 大大减少 ACK 包数量 超时重传 + 自适应 RTO 没收到 ACK → 重传 实时测量 RTT,难更新、难优化) 下面看 QUIC 如何一个个打爆它们 ,不影响别的 Stream 结论: QUIC 彻底干掉队头阻塞。
评论列表