[分享]开启 IPv6 后网速变得很慢?可能是 PMTU 黑洞的问题

xwbar的头像
2025-08-15 14:10:18
/
世界杯克罗地亚

查看: 8283|回复: 75

[分享]

开启 IPv6 后网速变得很慢?可能是 PMTU 黑洞的问题

[复制链接]

chengyiqun

chengyiqun

当前离线

UID4720714

最后登录1970-1-1

阅读权限70

精华

主题

回帖0

积分3906

PB币

威望

贡献

技术

活跃

发消息

电梯直达

楼主

chengyiqun

发表于 2024-12-20 14:24

|

只看该作者

|只看大图

|倒序浏览

|阅读模式

本帖最后由 chengyiqun 于 2024-12-20 16:08 编辑

来自: https://v2ex.com/t/800024

发现最近经常有人提到开启 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 支持较好的软路由。

本主题由 subaobao_ok 于 2024-12-20 16:10 审核通过

收藏16

分享

回复

使用道具

举报

提升卡

沉默卡

喧嚣卡

变色卡

千斤顶

Benzk

Benzk

当前离线

UID239643

最后登录1970-1-1

阅读权限50

精华

主题

回帖0

积分1828

PB币

威望

贡献

技术

活跃

发消息

沙发

Benzk

发表于 2024-12-20 15:22

|

只看该作者

既然 IPv6 MSS 计算结果为 1432,为什么 UBNT 要设置为 1420?

回复

使用道具

举报

殇0情

殇0情

当前离线

UID4859361

最后登录1970-1-1

阅读权限30

精华

主题

回帖0

积分441

PB币

威望

贡献

技术

活跃

发消息

板凳

殇0情

发表于 2024-12-20 15:35

|

只看该作者

查了下V4V6都是1500

回复

使用道具

举报

chengyiqun

chengyiqun

当前离线

UID4720714

最后登录1970-1-1

阅读权限70

精华

主题

回帖0

积分3906

PB币

威望

贡献

技术

活跃

发消息

4F

chengyiqun

楼主|

发表于 2024-12-20 15:37

|

只看该作者

Benzk 发表于 2024-12-20 15:22

既然 IPv6 MSS 计算结果为 1432,为什么 UBNT 要设置为 1420?

具体以实际为准, 设置的MTU稍微小一点点是没事的.

回复

使用道具

举报

chengyiqun

chengyiqun

当前离线

UID4720714

最后登录1970-1-1

阅读权限70

精华

主题

回帖0

积分3906

PB币

威望

贡献

技术

活跃

发消息

5F

chengyiqun

楼主|

发表于 2024-12-20 15:42

|

只看该作者

殇0情 发表于 2024-12-20 15:35

查了下V4V6都是1500

家用路由器在v4下都有硬件加速, 一般也会自动处理超过的分片. 但是v6下可能就没有

手动设置河里的MTU分片大小, 可能有助于提升网络性能

回复

使用道具

举报

181579033

181579033

当前离线

UID1027774

最后登录1970-1-1

阅读权限40

精华

主题

回帖0

积分567

PB币

威望

贡献

技术

活跃

发消息

6F

181579033

发表于 2024-12-20 15:50

|

只看该作者

sorry 我不用pppoe

IPoE路过

回复

使用道具

举报

CatFss

CatFss

当前离线

UID299064

最后登录1970-1-1

阅读权限40

精华

主题

回帖0

积分664

PB币

威望

贡献

技术

活跃

发消息

7F

CatFss

发表于 2024-12-20 15:51

|

只看该作者

我是设置跟路由一样:1480

回复

使用道具

举报

chengyiqun

chengyiqun

当前离线

UID4720714

最后登录1970-1-1

阅读权限70

精华

主题

回帖0

积分3906

PB币

威望

贡献

技术

活跃

发消息

8F

chengyiqun

楼主|

发表于 2024-12-20 16:00

|

只看该作者

本帖最后由 chengyiqun 于 2024-12-20 16:10 编辑

CatFss 发表于 2024-12-20 15:51

我是设置跟路由一样:1480

因为绝大多数数据都是用Ethernet格式

,不需要802.3 SNAP+802.1Q那12个字节,所以大多数PPPoE拨号宽度的MTU设置成1492也能工作

from https://www.zhihu.com/question/61111362?sort=created

回复

使用道具

举报

chengyiqun

chengyiqun

当前离线

UID4720714

最后登录1970-1-1

阅读权限70

精华

主题

回帖0

积分3906

PB币

威望

贡献

技术

活跃

发消息

9F

chengyiqun

楼主|

发表于 2024-12-20 16:02

|

只看该作者

本帖最后由 chengyiqun 于 2024-12-20 16:04 编辑

chengyiqun 发表于 2024-12-20 16:00

因为绝大多数数据都是用Ethernet格式

MTU是在连接的时候会协商的, 不同设备之间取最小的, 嗯, 所以直接在路由器上设置是比较好的, 确实没必要在主机上设置呢

但是部分路由器没有ipv6的mtu设置, 所以在pc上设置可能是有点用的, 总是遇到问题了再设置, 如果没有ipv6速度奇慢的问题, 就别管比较好呢

回复

使用道具

举报

tnwss

tnwss

当前离线

UID4591833

最后登录1970-1-1

阅读权限30

精华

主题

回帖0

积分216

PB币

威望

贡献

技术

活跃

发消息

10F

tnwss

发表于 2024-12-20 16:02

|

只看该作者

PixPin_2024-12-20_16-02-22.png (110.76 KB, 下载次数: 8)

下载附件

保存到相册

2024-12-20 16:02 上传

还真是 windows

回复

使用道具

举报

梦回忆

梦回忆

当前离线

UID4559159

最后登录1970-1-1

阅读权限30

精华

主题

回帖0

积分214

PB币

威望

贡献

技术

活跃

发消息

11F

梦回忆

发表于 2024-12-20 16:43

|

只看该作者

我这宽带只能双栈内网ip或者单v4公网ip,我选择不要v6

回复

使用道具

举报

zoozkop

zoozkop

当前离线

UID386854

最后登录1970-1-1

阅读权限30

精华

主题

回帖0

积分220

PB币

威望

贡献

技术

活跃

发消息

12F

zoozkop

发表于 2024-12-20 16:48

|

只看该作者

目前我也碰到这个问题,路由器是华硕BE6500+电信光猫300Mbps,MTU设置的是1492,

1、但是在刷抖音直播时经常会卡顿,但是刷视频又很流畅。

2、用今日头条看新闻很正常,但是有时候打开评论就很慢,要停顿好一会儿才能刷出来。

3、王者荣耀延迟比较大。

4、迅雷下载一般可以达到35MB-40MB左右,网络测速能跑满350Mbps。

不清楚是不是和MTU设置有关系?

回复

使用道具

举报

风之暇想

风之暇想

当前离线

UID3048251

最后登录1970-1-1

阅读权限30

精华

主题

回帖0

积分484

PB币

威望

贡献

技术

活跃

发消息

13F

风之暇想

发表于 2024-12-20 16:51

|

只看该作者

目前是国内Doh限速导致慢

回复

使用道具

举报

chengyiqun

chengyiqun

当前离线

UID4720714

最后登录1970-1-1

阅读权限70

精华

主题

回帖0

积分3906

PB币

威望

贡献

技术

活跃

发消息

14F

chengyiqun

楼主|

发表于 2024-12-20 16:52

|

只看该作者

zoozkop 发表于 2024-12-20 16:48

目前我也碰到这个问题,路由器是华硕BE6500+电信光猫300Mbps,MTU设置的是1492,

1、但是在刷抖音直播时 ...

不知道这个MTU对ipv6是不是单独设置的,可以试试给路由器设置 1432,不过也可以试试换个dns

回复

使用道具

举报

zoozkop

zoozkop

当前离线

UID386854

最后登录1970-1-1

阅读权限30

精华

主题

回帖0

积分220

PB币

威望

贡献

技术

活跃

发消息

15F

zoozkop

发表于 2024-12-20 16:58

|

只看该作者

chengyiqun 发表于 2024-12-20 16:52

不知道这个MTU对ipv6是不是单独设置的,可以试试给路由器设置 1432,不过也可以试试换个dns ...

1432去试试看,DNS用的是223.5.5.5这个,回头换一下试试看

回复

使用道具

举报

rubycon

rubycon

当前离线

UID456912

最后登录1970-1-1

阅读权限160

精华

主题

回帖0

积分89807

PB币

威望

贡献

技术

活跃

发消息

16F

rubycon

发表于 2024-12-20 17:03

|

只看该作者

华为光猫,IPv6 已经 使用多年了,并未遇到什么 IPv6 网站访问很慢的问题。

回复

使用道具

举报

chengyiqun

chengyiqun

当前离线

UID4720714

最后登录1970-1-1

阅读权限70

精华

主题

回帖0

积分3906

PB币

威望

贡献

技术

活跃

发消息

17F

chengyiqun

楼主|

发表于 2024-12-20 17:16

|

只看该作者

rubycon 发表于 2024-12-20 17:03

华为光猫,IPv6 已经 使用多年了,并未遇到什么 IPv6 网站访问很慢的问题。

说明已经默默做好优化了,从硬件层面上

回复

使用道具

举报

chengyiqun

chengyiqun

当前离线

UID4720714

最后登录1970-1-1

阅读权限70

精华

主题

回帖0

积分3906

PB币

威望

贡献

技术

活跃

发消息

18F

chengyiqun

楼主|

发表于 2024-12-20 17:17

|

只看该作者

本帖最后由 chengyiqun 于 2024-12-20 17:32 编辑

zoozkop 发表于 2024-12-20 16:58

1432去试试看,DNS用的是223.5.5.5这个,回头换一下试试看

阿里云和腾讯云的免费公用dns都有ip限速,它限制请求频率的。

路由器一般不建议使用除运营商dns之外的dns。(除非你自己引入一套dns缓存体系, 例如 mosdns, smartdns, dnsmasq)

而且第三方dns除非支持eDNS, 否则可能解析到非当前运营商的ip, 总所周知, 跨运营商速度会大打折扣

对于手机/pc等终端设备, 只建议设置dns为路由器的dns, 而不要单独设置dns,

这样才能让dns的缓存充分发挥

如何选择适合的公共 DNS? [2020] | Sukka's Blog

https://blog.skk.moe/post/which-public-dns-to-use/

回复

使用道具

举报

webcxy

webcxy

当前离线

UID427581

最后登录1970-1-1

阅读权限0

精华

主题

回帖0

积分133

PB币

威望

贡献

技术

活跃

发消息

头像被屏蔽

19F

webcxy

发表于 2024-12-20 17:47

|

只看该作者

提示: 作者被禁止或删除 内容自动屏蔽

回复

使用道具

举报

zoozkop

zoozkop

当前离线

UID386854

最后登录1970-1-1

阅读权限30

精华

主题

回帖0

积分220

PB币

威望

贡献

技术

活跃

发消息

20F

zoozkop

发表于 2024-12-23 09:03

|

只看该作者

chengyiqun 发表于 2024-12-20 17:17

阿里云和腾讯云的免费公用dns都有ip限速,它限制请求频率的。

路由器一般不建议使用除运营商dns之外的dns ...

好的,我也去试试看

回复

使用道具

举报

backspace是哪个键
汽车之家