目錄
前言
第1章 QUIC產生背景
1.1 網路傳輸協議
1.1.1 UDP
1.1.2 TCP
1.1.3 SCTP
1.1.4 其他協議
1.2 TLS版本演化
1.2.1 SSL系列協議
1.2.2 TLS 1.0
1.2.3 TLS 1.1
1.2.4 TLS 1.2
1.2.5 TLS 1.3
1.3 HTTP版本演化
1.3.1 HTTP
1.3.2 HTTP1.1
1.3.3 HTTP2
1.4 QUIC的誕生
第2章 QUIC報文
2.1 分層
2.2 報文格式
2.2.1 長首部報文
2.2.2 短首部報文
2.2.3 無狀態重置報文
2.3 連接標識
2.3.1 發布連接標識
2.3.2 撤銷連接標識
2.3.3 零長度的連接標識
2.3.4 連接標識協商與驗證
2.4 報文編號
2.4.1 報文編號空間
2.4.2 報文編號編碼
2.4.3 報文編號解碼
2.5 流
2.5.1 流標識
2.5.2 流的打開和關閉
2.5.3 流狀態
2.6 幀
2.6.1 PADDING幀
2.6.2 PING幀
2.6.3 ACK幀
2.6.4 RESET_STREAM幀
2.6.5 STOP_SENDING幀
2.6.6 CRYPTO幀
2.6.7 NEW_TOKEN幀
2.6.8 STREAM幀
2.6.9 MAX_DATA幀
2.6.10 MAX_STREAM_DATA幀
2.6.11 MAX_STREAMS幀
2.6.12 DATA_BLOCKED幀
2.6.13 STREAM_DATA_BLOCKED幀
2.6.14 STREAMS_BLOCKED幀
2.6.15 NEW_CONNECTION_ID幀
2.6.16 RETIRE_CONNECTION_ID幀
2.6.17 PATH_CHALLENGE幀
2.6.18 PATH_RESPONSE幀
2.6.19 CONNECTION_CLOSE幀
2.6.20 HANDSHAKE_DONE幀
2.6.21 擴展其他幀
2.7 錯誤碼
2.7.1 連接錯誤碼
2.7.2 應用錯誤碼
2.8 傳輸參數
2.9 變長整型編碼
第3章 QUIC基礎
3.1 報文確認
3.1.1 生成確認
3.1.2 處理確認和重傳
3.1.3 RTT計算
3.1.4 丟包檢測
3.1.5 探測超時
3.2 流控
3.2.1 流級別的流控
3.2.2 連接級別的流控
3.3 擁塞控制
3.3.1 擁塞控制概述
3.3.2 QUIC擁塞控制的改進
3.3.3 ECN
3.3.4 QUIC擁塞控制演算法NewReno
3.3.5 QUIC擁塞控制演算法BBR
3.4 PMTU探測
3.4.1 PMTUD
3.4.2 DPLPMTUD
3.5 地址驗證
3.5.1 連接建立期間隱式地址驗證
3.5.2 通過重試報文進行地址驗證
3.5.3 通過NEW_TOKEN幀進行地址驗證
3.5.4 通過PATH_CHALLENGE幀進行地址驗證
3.6 連接遷移
3.6.1 客戶端有意的連接遷移
3.6.2 客戶端無意的連接遷移
3.6.3 客戶端遷移安全考慮
3.6.4 伺服器移到首選地址
3.7 中間件的RTT測量
第4章 QUIC加密與保護
4.1 TLS 1.3介紹
4.1.1 TLS 1.3的密鑰
4.1.2 TLS 1.3首次連接
4.1.3 TLS 1.3恢復連接
4.1.4 密鑰更新
4.2 QUIC與TLS 1.3
4.2.1 TCP與TLS
4.2.2 QUIC與TLS的關係
4.2.3 QUIC與TLS的介面
4.2.4 QUIC對TLS的修改
4.3 QUIC的報文保護
4.3.1 QUIC的加密級別
4.3.2 丟棄密鑰
4.4 首部保護
4.5 負載保護
4.5.1 初始報文
4.5.2 重試報文
4.5.3 密鑰更新
4.6 連接恢復與0-RTT
4.6.1 0-RTT的發送與接收
4.6.2 0-RTT密鑰
第5章 QUIC連接的建立與關閉
5.1 首次建立連接
5.1.1 QUIC報文交互
5.1.2 驗證客戶端證書
5.1.3 建立連接時TLS參數不匹配
5.1.4 建立連接過程中丟包
5.1.5 版本協商
5.2 連接恢復
5.2.1 連接恢復過程
5.2.2 0-RTT傳輸參數
5.2.3 0-RTT安全
5.2.4 0-RTT例子
5.3 連接關閉
5.3.1 空閑超時
5.3.2 立即關閉
5.3.3 無狀態重置
第6章 QUIC中間件
6.1 簡單的負載均衡
6.1.1 伺服器共享地址
6.1.2 伺服器不共享地址
6.2 協作的負載均衡
6.2.1 連接標識的格式
6.2.2 配置代理
6.2.3 伺服器生成連接標識
6.2.4 負載均衡器路由演算法
6.3 重試卸載
6.3.1 不共享狀態的重試卸載
6.3.2 共享狀態的重試卸載
第7章 QUIC擴展協議
7.1 多路QUIC
7.1.1 多路QUIC傳輸參數
7.1.2 報文編號空間
7.1.3 增加的新幀
7.1.4 多路的加解密
7.1.5 新路徑建立和拆除過程
7.1.6 數據的調度
7.2 不可靠數據報
第8章 HTTP3
8.1 流的使用
8.1.1 控制流
8.1.2 推送流
8.1.3 編碼器流和解碼器流
8.2 HTTP3幀
8.2.1 DATA幀
8.2.2 HEADER幀
8.2.3 CANCEL_PUSH幀
8.2.4 SETTING幀
8.2.5 PUSH_PROMISE幀
8.2.6 GOAWAY幀
8.2.7 MAX_PUSH_ID幀
8.3 HTTP3交互
8.3.1 建立連接
8.3.2 請求和響應
8.3.3 伺服器推送
8.3.4 連接關閉
8.4 QPACK
8.4.1 前綴整數編碼
8.4.2 靜態字典
8.4.3 動態字典
8.4.4 欄位行集合編碼
8.4.5 QPACK例子
第9章 基於QUIC的其他協議
9.1 DNS
9.1.1 DNS簡介
9.1.2 DoQ
9.2 使用QUIC的通用考慮
9.2.1 0-RTT使用的考慮
9.2.2 保活的考慮
9.2.3 傳輸協議回退的考慮
9.2.4 流的使用
9.2.5 連接關閉
9.2.6 應用標識
第10章 QUIC開源代碼與應用實例
10.1 介面介紹
10.1.1 QUIC的配置
10.1.2 TLS的配置
10.1.3 伺服器介面
10.1.4 客戶端的介面
10.1.5 連接的介面
10.1.6 流的介面
10.2 源碼使用
10.2.1 使用QUIC
&n