科学上网后http/3协议打开网站慢的解决

瓦工BIGGERBOX-20-1024

很多网站开启了h3协议,客户端打开网站比h2协议慢,介绍解决方案以及UDP分片和IP分片的区别。

近期使用了自建服务器节点前置代理机场节点,在对本站访问速度的测试中,发现套了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协议打开网站慢的解决

这样设置后,一番设置后HTTP/3协议下打开网站速度恢复正常。

IP分片和UDP分片的区别:

特性UDP 分片IP 分片
层级传输层(应用程序实现)网络层(由路由器或发送端实现)
控制权应用程序负责网络设备自动完成
丢包影响丢失一个片段只需重传该片段丢失一个分片需要重传整个数据包
实现复杂度复杂(需要在应用层实现)简单(自动完成)
效率较高(减少额外的网络开销)较低(每个分片增加额外的 IP 头部)
安全性更安全(控制在应用层,少攻击面)易受攻击(如分片重组攻击)
现代支持度推荐,符合现代网络最佳实践不推荐,现代网络尽量避免使用

技术不断升级,请注意文章时效性。
本站文章,欢迎转发。转载请注明出处:https://www.bandwh.com/net/2157.html

(0)

BandWh.com 折腾之路●一起折腾

上一篇 2024年11月25日 11:58
下一篇 2024年12月22日 10:03
瓦工BIGGERBOX-20-1024

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

请文明评论!