陶辉:Nginx上实现HTTP3及其性能优化之道.docx
NGINX上实现HTTP3及其性能
优化之道
陶辉矩尺网络CTO
个人介绍
陶辉
矩尺网络CTO
《深入理解Nginx》作者
极客时间《系统性能优化必知必会》专栏作者
视频课《Web协议详解与抓包实战》《Nginx核心知识100讲》讲师腾讯云TVP
1HTTP3协议概述
2stream层:多路复用
3connection层:连接迁移
4性能优化安全加固
01HTTP3
协议概述
HTTP协议的发展轨迹
队头阻塞:HTTP2overTCP
RTT减少:握手速度的提升
连接迁移的意义:移动网络
HTTP3的特性
?QUIC
?报文格式
?UDP
?Packet
?QUICFrame
?HTTP3Frame
?安全
?TLS实现
?放大攻击防御
?连接ID
?连接迁移
?stream
?可靠有序
?多路复用?HTTP3
?stream流
?单向流
?推送流
?QPACK
?控制流
?双向流:请求
部署Nginx支持HTTP3
?仅client七层
?四层不支持QUIC
?拥塞控制算法不可更改
?仅RFC9002,类似TCPNewReno
?初始拥塞窗口遵循RFC6928?编译
?--with-http_v3_module
?--with-cc-opt=-DNGX_QUIC_DEBUG_PACKETS-DNGX_QUIC_DEBUG_CRYPTO“
?开启服务
?listen8443quicreuseport;
?http3on;
?协议升级
?add_headerAlt-Svch3=:8443;ma=86400;
ngx_min(
10*qc-tp.max_udp_payload_size,
ngx_max(2*qc-tp.max_udp_payload_size,14720)
);
02stream
多路复用
无队头阻塞版
HTTP3QPACK多路复用
HTTP3QPACK
Syntax:http3_max_concurrent_streamsnumber;
Default:http3_max_concurrent_streams128;
Context:http,server
QUICSTREAM
核心概念:抓包分析
?UDPPacket
?QUICConnection
?QUICPacket
?QUICFrame
?QUICStream?HTTP3Frame
QUIC报文格式
--为什么一个UDP报文包含多个Packet?--为什么一个Packet包含多个Frame?
QUIC
StreamFrame
NginxQUICFrame
NginxQUICFrame
系统调用
事件模块
QUIC模块
HTTPV3模块
HTTP框架
HTTP模块
#defineNGX_QUIC_FT_PADDING0x00
#defineNGX_QUIC_FT_PING0x01
#defineNGX_QUIC_FT_ACK0x02
#defineNGX_QUIC_FT_ACK_ECN0x03
#defineNGX_QUIC_FT_RESET_STREAM0x04
#defineNGX_QUIC_FT_STOP_SENDING0x05
#defineNGX_QUIC_FT_CRYPTO0x06
#defineNGX_QUIC_FT_NEW_TOKEN0x07
#defineNGX_QUIC_FT_STREAM0x08
#defineNGX_QUIC_FT_STREAM10x09
#de