当前位置: 首页 > news >正文

QUIC协议详解1

QUIC协议详解1本篇QUIC 系列 ②/④ · QUIC协议详解1· 系列总览见QUIC协议系列导读QUIC 跑在 UDP 上但逻辑单元是Packet包与Frame帧一个 UDP datagram 可含一个或多个 QUIC 包每个包内可叠多个帧。可靠传输靠Packet NumberPN与ACK Range确认丢包后帧内容重封装进新 PN而非 TCP 式原包重发。速览Long HeaderInitial / Handshake / 0-RTTShort Header1-RTT 数据。PN 分Initial / Handshake / Application三个空间单调递增、加密隐藏。丢包靠ACK Range 时间阈值 PTO无 triple dup-ACK 快重传。流控MAX_STREAM_DATA单流MAX_DATA连接MAX_STREAMS并发。目录一、报文模型1. UDP → Packet → Frame2. 包类型与 Long Header3. Short Header 与 PN 隐藏4. 常用帧类型二、可靠传输与流控5. PN 空间与 ACK Range6. 丢包判定与 PTO 重传含时间阈值/TLP7. 连接级与 Stream 级流控8. 面试要点1. UDP → Packet → FrameUDP Datagram └── QUIC Packet (Long 或 Short Header) ├── Frame: CRYPTO ├── Frame: ACK └── Frame: STREAM层级职责UDP端到端 datagram 投递不可靠QUIC Packet加密单元、PN、CIDQUIC Frame语义载荷数据、握手、控制实现上常见一个 UDP 包只放一个 QUIC 包规范允许合并但不常见。2. 包类型与 Long Header类型Header阶段典型内容InitialLong建连ClientHelloCRYPTOHandshakeLong建连ServerHello、Finished0-RTTLong复用早期应用数据ShortShort1-RTTSTREAM、ACK 等RetryLong特殊服务端要求重试 TokenVersion Negotiation特殊版本不支持时的版本列表Long Header 位图RFC 9000 §17.2概念|1| Type(7) | ← Header Form 1 | Version (32) | | DCID Len | Destination CID (*) | | SCID Len | Source CID (*) | | Type-specific (Token / Length 等因 Initial/HS/0-RTT 而异) | | [AEAD Protected PayloadPN 帧列表] |字段说明Header Form 1长头标识TypeInitial0x00 / 0-RTT0x01 / Handshake0x02 / Retry0x03VersionQUIC 版本号DCID / SCID目的 / 源 Connection IDTokenInitial 中可选Retry 后LengthPayload 长度PayloadAEAD 加密含 PN 帧列表Long Header除 Retry/VN 外头部字段明文Payload 密文。Initial / Handshake 包不得与 1-RTT 应用数据混在同一 QUIC 包类型规则下混用实现上分开发。Short HeaderLong Header复用场景InitialHandshake0-RTT1-RTT App Data3. Short Header 与 PN 隐藏Short Header1-RTTRFC 9000 §17.3|0|C|K|1|P| Reserved | ← Form0CKey PhaseK 保留PSpin Bit | Destination CID | | [Packet Number加密/掩码1/2/4 字节] | | AEAD Protected Payload |部分说明Header Form 0短头CKey Phase指示当前 / 下一套密钥Key Update见QUIC协议详解2DCID定位连接无 Version、无 SCIDPN1/2/4 字节加密/掩码PayloadAEAD 保护PN 要点每个加密级别独立 PN 空间严格单调递增。PN 用于丢包检测、ACK 引用、AEAD nonce、防重放。不能像 TCP SEQ 那样明文抓包直读——需解密或 key log。Spin Bit可选用于 RTT 采样部分网络会禁用。4. 常用帧类型帧通用格式Type变长整数 类型相关字段。核心帧数据与可靠帧作用STREAM应用/HTTP 数据含 Stream ID、Offset、FINCRYPTOTLS 握手片段按 Offset 连续重组ACK确认 PN支持多ACK Range流控与连接管理帧作用MAX_DATA连接级接收窗口上限MAX_STREAM_DATA单 Stream 接收上限MAX_STREAMS_BIDI / _UNI允许打开的流数量NEW_CONNECTION_ID下发可用 CID迁移 / 防追踪 / LBRETIRE_CONNECTION_ID退役不再使用的 CIDRESET_STREAM / STOP_SENDING异常中止 / 停止发送HANDSHAKE_DONE服务端握手确认PING保活 / PTO 探测CONNECTION_CLOSE关闭连接PATH_CHALLENGE / PATH_RESPONSE路径验证迁移STREAM 帧概念Type | Stream ID | [Offset] | [Length] | Data… | FIN?同一 Stream 内靠Offset有序FIN1表示发送结束。CRYPTO 帧无 Stream ID绑定当前 PN 空间的隐式 TLS 流Offset 必须连续。注意帧不跨 QUIC 包重组Stream 内靠 Offset 排序。PN 被加密Wireshark 需SSLKEYLOGFILE解密见QUIC应用实践。5. PN 空间与 ACK RangePN Space包类型InitialInitialHandshakeHandshakeApplication DataShort Header规则ACK 只引用同一 PN 空间不同空间 PN 互不影响。ACK 帧携带Largest AcknowledgedACK Delay接收处理延迟用于 RTTACK Range Count 多个区间示例Largest Acked 105 Ranges: [100–105], [90–95] → 确认 PN 90–95 与 100–105表达力≥ TCP SACK发送端据此判断哪些 PNlost。6. 丢包判定与 PTO 重传6.1 判丢简化机制说明PN 超前 时间阈值PN 远小于 Largest Acked − threshold → lostPTO超时未收到任何 ACK → 进入 Probe没有TCP 式triple duplicate ACK 快重传。6.2 PTO 与重传PTOProbe Timeout近似RFC 9000 §6.2此处为简化写法完整算法含指数退避、握手未确认前禁止发 1-RTT 数据、各 PN 空间独立计时等PTO smoothed_rtt max(4 × rttvar, granularity)触发后发新 PN的 probe 包非原 PN 重发。内容常为PING或未 ACK 的STREAM/CRYPTO 帧重新封装。连续 PTO 失败 → 指数退避 → 最终CONNECTION_CLOSE。是PTO发 PNNACK?清除 in_flight新 PN PING/重封装帧与 TCP 对比项TCPQUIC确认SEQ ACKPN ACK Range快重传dup ACK无靠 Range 定时器重传形态同 SEQ 重发帧进新 PN 包6.3 时间阈值判丢与尾丢TLP 思路除 PTO 外RFC 9000 丢包检测还有时间阈值time threshold常取 9/8 × smoothed_rtt某 PN 长期未被 ACK 且小于Largest Acknowledged时可判为lost并重封装发送——工程上常称TLPTail Loss Probe思路在整段 PTO 超时之前处理尾部单包久未确认尾丢、ACK 丢失等。与 PTO 互补机制典型触发作用时间阈值 / TLP 思路有 ACK 进展但尾部 PN 卡住尽早重传疑似丢失帧PTO该 PN 空间完全无 ACK发 probePING 或重封装帧7. 连接级与 Stream 级流控流控与可靠传输解耦流控答「还能不能收」ACK 答「有没有收到」。7.1 MAX_STREAM_DATA单 Stream接收方通告该 Stream 上发送方Offset 不得超过的上限。初始 Max 1MB → 发到 1MB 停等 消费 512KB → 发 MAX_STREAM_DATA 提到 1.5MB → 继续发7.2 MAX_DATA连接级所有 Stream累计未消费字节不得超过连接级上限。7.3 MAX_STREAMS限制对端可打开的双向 / 单向Stream 数量与 Stream ID 编码配合详见QUIC协议详解2。控制粒度MAX_STREAM_DATA单 Stream OffsetMAX_DATA全连接MAX_STREAMS并发 Stream 个数8. 面试要点问题要点PN 与 TCP SEQ分空间、加密、重传进新 PN如何判丢ACK Range 时间阈值TLP 思路PTOInitial 为何要 padding防 UDP 放大攻击未验证前限制响应大小帧与包关系多帧一包Stream 靠 Offset 有序发送/接收路径小结发送app → STREAM 帧 → 检查 MAX_* → 封装 Packet(PN) → in_flight 接收解密 → 按 Offset 入缓冲 → ACK → 更新 MAX_STREAM_DATA一句话QUIC协议详解1钉死两件事——线上长什么样Long/Short、帧丢了怎么办PN、ACK Range、PTO、流控。连接语义与 TLS 见QUIC协议详解2HTTP/3 见QUIC应用实践。
http://www.zskr.cn/news/1346151.html

相关文章:

  • 2026年4月高大空间冷暖风机实力厂家推荐,乏风取热箱/高大空间冷暖风机/干冷器/空气幕,高大空间冷暖风机品牌推荐 - 品牌推荐师
  • NodeMCU PyFlasher完整指南:3分钟学会ESP8266固件烧录的终极免费方案
  • 地下自来水管道漏水检测技术解析 专业服务商怎么选 - 奔跑123
  • 社区医院管理系统|基于SprinBoot+vue社区医院管理系统设计与实现(源码+数据库+文档)
  • 终极指南:3分钟学会用Awoo Installer免费安装Switch游戏
  • 苹果USB网络共享驱动:Windows用户的终极救星,3分钟彻底解决连接难题
  • 蛋白质-配体相互作用分析终极指南:PLIP工具从入门到精通
  • IDEA 中 Build、Maven、Run 三者的本质区别 —— 为什么你的代码在 IDE 能编译却在 CI/CD 失败?
  • 终极XCOM 2模组管理器指南:如何用AML轻松管理数百个游戏模组
  • 鸿蒙 HarmonyOS 6 | Pura X Max 鸿蒙原生适配 10:横屏下页面从上下结构改为左右结构
  • NodeMCU PyFlasher:告别命令行困扰,3步搞定ESP8266固件烧录的智能方案
  • 3步掌握ESP32-A2DP蓝牙音频传输核心原理
  • 学生用户画像——考勤主题扩展标签构建
  • 如何快速配置OpenProject开发环境:跨平台部署的终极指南
  • 终极指南:如何免费获取Cursor Pro功能,轻松突破试用限制
  • MPV播放器终极配置指南:10个简单技巧打造专业级视频体验
  • OpenProject开发环境一站式编织指南:打造你的项目管理交响乐团
  • Go 微服务必备:服务发现、配置中心、中间件是怎么协作的?
  • 潮州话TTS落地最后一公里:ElevenLabs音频后处理秘技(含潮汕童谣节奏建模与语义停顿注入)
  • Betaflight飞控固件2026完全指南:从入门到精通的7个实用技巧
  • OpenPLC Editor终极指南:如何用开源工具实现工业自动化编程
  • 裸辞转行AI大模型:我的探索与收获,收藏这份经验助你启程!
  • 大模型赋能政务审批:从 “人工审” 到 “智能核”
  • 课程管理|基于Javavue的在线课程管理系统(源码+数据库+文档)
  • 一眸科技 | 情感认知智能,让AI更懂人心
  • 天勤期权交易入门:询价字段与期货下单不要混用
  • GitLab CI|CD 配置笔记
  • d2s-editor:暗黑破坏神2存档编辑器的终极免费Web工具指南
  • 如何永久保存你的微信聊天记忆?WeChatMsg终极解决方案
  • 前端工程化:React + TypeScript + Tailwind CSS 的组件化实践