
无需加好友免费技术支持
发觉近期常有人提及打开 IPv6 联接速度比较慢问题。现阶段,内的确有适用。 IPv6 服务器、CDN 连接点不足,IPv6 国际带宽比 IPv4 网络带宽小,但是不会开启国内网站卡。一般,这个问题说明您存在总体目标云服务器连接中 PMTU 黑洞。
有关 PMTU 黑洞MTU (Maximum transmission unit) 三层数据文件最大的规格能通过一个链接(包含 IP 包头市)。以太网接口默认设置 MTU 是 1500 字节数,但是你与目标服务器之间的路径很有可能低于 MTU 1500 的链接。最小路径 MTU 值是成条路径 PMTU 值。分享外包装时路由器超出 MTU 大小的小包会被分为残片( Fragmentation ),换句话说,一个大包包能被分为好几个不得超过 MTU 传送小包时,传输速度也会降低。
智能终端在承揽的时候也能设 DF ( Don"t Fragment )标识告知路由器不必分片。这时,正中间路由器将遗失超出 MTU 回应一个包 ICMP Fragmentation Needed 信息。接到这个包后,发布者下一次会收小包,这一过程称为 PMTU Discovery 。现实生活中由此可见 HTTPS ( TLS )绝大多数总流量全是戴的 DF 标识的。
但是,网络上有大量中间设备没有回复所谓安全性或者没有恰当配置 ICMP Fragmentation Needed 这也使得在浏览某些网站时,假如某一包大小超过 PMTU,这将被无声的抛下,直至他们被无声的抛下,直至 TCP 协议书发觉请求超时网络丢包重新传输比较慢。在这样的情况下,大家可以这么说你与总体目标服务器之间存有路径 PMTU 黑洞。
除此之外,IPv6 也就是说,不兼容分片可以看作 IPv6 下边每一个包全是戴的 DF 标识的。碰到包时,正中间路由器尺寸超过 MTU 应回复状况 ICMPv6 Packet Too Big 信息。一样,由于种种原因,一些中间设备可能立即网络丢包且不回复 ICMPv6 Packet Too Big 信息,直至 TCP 协议书发觉请求超时网络丢包重新传输。。。
为何 IPv4 并没有这个问题 IPv4 也有这个问题,我不止一次见到朋友说他的软路由系统浏览一些网站特别慢,换回来硬路由器是正常。主要是因为大部分家庭用路由器默认设置 IPv4 中的 TCP 打开了 MSS (maximum segment size) Clamping (应用 OpenWRT 软路由系统的小伙伴可以在网络设置中寻找 MSS Clamping 电源开关)。MSS Clamping 就是针对 PMTU 黑洞的 Workaround,简单的说就是 TCP 握手时有一个 MSS 单个字段由字段名确定 TCP 包最大的规格。路由器能够网络嗅探 TCP 握手包,把 MSS 值缩小,最后三层 IP 包尺寸( MSS TCP 头大小 IP 头顶部尺寸)不得超过特殊值。
汇总目前国内 ISP 一般通过 PPPoE 创建虚拟拨号 WAN 口相连的。Ethernet 的默认设置 MTU 是 1500,可是 PPPoE 隧道施工有 8 个 bytes 因此 PPPoE 虚相连的 MTU 便是 1500-8=1492,减去 IPv4 包头市( 20 字节数)和 TCP 包头市( 20 字节数),就可以知道 IPv4 下需要将 MSS 设成 1452 下列。
IPv6 的包头市是 40 字节数,因此 IPv6 下需要将 MSS 设成 1432 下列。
这时候,那么问题来了。现阶段,很多宽带光猫和家庭用路由器都是对的 IPv6 提升比较差,不兼容 IPv6 中的 TCP 包开展 MSS Clamping,这造成了浏览 IPv6 假如网址存在路径中, PMTU 黑洞开启迟缓。
前不久我帮朋友配备配置 IPv6 宽带光猫和家庭用路由器的固定件难题时会发觉,在我国应用 IPv6 感受不太理想。我打算花费时间开一个专业的文章来讨论各种问题,探讨废弃物生产商。现阶段,如果你想要在我国有梦想的感受 IPv6.你需要将宽带光猫改成桥接模式并用它 OpenWRT 或是 VyOS 这种对 IPv6 适用更加好的软路由系统。
附:在根据 Linux 路由器开启MSS Clamping的指令:
全自动MSS,假定PPPOE虚插口是pppoe0iptables -t mangle -A POSTROUTING -p tcp --tcp-flags SYN,RST SYN -o pppoe0 -j TCPMSS --clamp-mss-to-pmtuip6tables -t mangle -A POSTROUTING -p tcp --tcp-flags SYN,RST SYN -o pppoe0 -j TCPMSS --clamp-mss-to-pmtu
手动式特定MSS,假定PPPOE虚插口是pppoe0$ iptables -t mangle -A POSTROUTING -p tcp --tcp-flags SYN,RST SYN -o pppoe0 -j TCPMSS --set-mss 1452$ ip6tables -t mangle -A POSTROUTING -p tcp --tcp-flags SYN,RST SYN -o pppoe0 -j TCPMSS --set-mss 1432
RouterOS里设定MSS指令pppoe-out1是wan口,1420一定要MSS请结合必须改动值。
/ipv6 firewall mangle add chain=forward out-interface=pppoe-out1 protocol=tcp tcp-flags=syn action=change-mss new-mss=1420
UBNT Edgerouter 系列MSS设定方式:
set firewall options mss-clamp6 interface-type pppoeset firewall options mss-clamp6 mss 1420