近期使用了自建服务器节点前置代理机场节点,在对本站访问速度的测试中,发现套了Cloudflare的本站停用缓存后在http3协议下速度慢的不可接受,浏览器和服务端协商到http2则网站打开速度较快。理论来说,h3应该比h2快才对。
本站针对国内网友的瓦工反代服务器NGINX也开启了Http/3,h3访问速度完全正常。浏览了Cloudflare的论坛,发现这个问题还是很普遍的,国外用户也有同样问题,所以套cf的网站目前建议在cf不要开启http/3。除了Cloudflare自身的问题外,对不套cf的网站浏览慢的情况可能是分片的问题。
H3使用QUIC传输协议,QUIC 在 UDP 的基础上增加了许多 TCP 的特性,例如可靠传输、拥塞控制、流量控制、多路复用、加密等。QUIC 为了实现各种功能,在 UDP 头部之上添加了大量的头部信息,在有效载荷相同的情况下,QUIC 数据包的整体大小会比 H2的TCP 数据包大很多。由于QUIC数据包大,如果 IP 数据包的大小超过网络路径的 MTU,路由器或发送端根据 MTU 将 IP 数据包拆分成多个片段,接收端负责重组,这就是IP分片。在IP分片的情况下,如果一个分片丢失,整个 IP 包会被丢弃,需要重新传输。由于各种原因,udp可能会丢包,这是导致http/3协议打开网站慢的重要原因之一。
另外防火墙规则里有ct state invalid counter drop
这样的规则也可能导致http/3变慢,由于 UDP 是无状态协议,没有类似 TCP 的握手机制,因此可能导致连接跟踪模块无法正确识别某些数据包而导致丢包。对服务器安全环境要求不严格的话可以关闭该条防火墙规则。
针对IP分片的缺点,现代网络常避免使用 IP 分片,鼓励应用程序或传输层协议自行适应 MTU。现在各科学上网软件也都设计了UDP分片,UDP 分片是应用层协议(如 Shadowsocks)在发送较大的 UDP 数据包时,将数据通过软件自动切割成适合网络传输的更小片段,每个片段通过单独的 UDP 包发送到目标主机,并在接收端进行重组。具有以下优点,分片逻辑由应用程序控制,避免了依赖底层网络设备。更灵活,可以为不同网络环境调整分片策略。避免了 IP 分片引起的性能问题(如丢失单个 IP 分片会导致整个包重传)。因此我们需要将IP分片改为UDP分片。目前我这里使用的是HOMEPROXY(sing-box内核),homeproxy里面提供了UDP分片功能,在homeproxy 节点设置
处修改你的节点,勾选udp 分片
即可。vps服务端也可增加UDP分片的设置。
这样设置后,一番设置后HTTP/3协议下打开网站速度恢复正常。
IP分片和UDP分片的区别:
特性 | UDP 分片 | IP 分片 |
---|---|---|
层级 | 传输层(应用程序实现) | 网络层(由路由器或发送端实现) |
控制权 | 应用程序负责 | 网络设备自动完成 |
丢包影响 | 丢失一个片段只需重传该片段 | 丢失一个分片需要重传整个数据包 |
实现复杂度 | 复杂(需要在应用层实现) | 简单(自动完成) |
效率 | 较高(减少额外的网络开销) | 较低(每个分片增加额外的 IP 头部) |
安全性 | 更安全(控制在应用层,少攻击面) | 易受攻击(如分片重组攻击) |
现代支持度 | 推荐,符合现代网络最佳实践 | 不推荐,现代网络尽量避免使用 |
技术不断升级,请注意文章时效性。
本站文章,欢迎转发。转载请注明出处:https://www.bandwh.com/net/2157.html