使用IPv6后一些网站无法访问,有时能访问有时无法访问问题解决
使用IPv6后一些网站无法访问,有时能访问有时无法访问问题解决
遇到这个问题有几天了,虽然有时候可以访问,况且也不是一定要快速访问,但是这样半死不活、并且让人不明就里的状态就很烦,所以开始着手解决这个问题。
把光猫分别配置了只用ipv4和ipv4&ipv6两种情况,发现的确只有在ipv6生效的时候才会发生网站加载十分缓慢或者干脆加载不出来的情况。
搜索发现,大多数指导都是说可能网站问题,可能是防火墙问题等抄来抄去的参考答案,并没有切实有效的解决方法和问题分析,但是还是有必要自己试试。
关了杀毒软件、防火墙等东西之后,查看网页状态,并没有一丝一毫的好转,于是继续搜寻。
把范围缩小到IPv6有关的情况细看,发现了另一种解释,那就是DNS的问题,于是自己把光猫的、本地的DNS都试着修改了一边,通过命令行查询DNS解析,也都没有问题,但是网页端去看,还是问题依旧。
几乎绝望之时,原来点开的文章好像加载出来一点了,虽然没有CSS样式,并且粗看内容和别的照搬文章还是有点不同的,分析的挺有道理,也通俗易懂。
但是细看来也搞笑,我看的这个文章作者是看了另一个大佬的文章,而另一个大佬则是其他人的指点。
其实问题就是PMTU黑洞,大佬的严肃讲解已经很精彩了,我理解来看就是这样:
终端(也就是浏览器等)发包可以设置DF(Don't Fragment)来告诉路由“我给你的别再拆分”,那么路由就会听话不拆分,但是超过了规定,超载了怎么怎么办,既然不让拆小件发,并且超限了,那么丢掉好了,并且恢复给ICMP Fragmentation Needed 消息,告诉发包的,下次别整这么大的,发不了。这样发包的下次就会注意,发小一点的了,这个过程叫PMTU Discovery。
但是在网络链路上,有大量的中间设备为了“安全”或者是因为错误配置,遇到超限且不让拆分的包,它就不声不响地把包扔了,也不吱声,这样收的一方和发的一方都不知道具体情况,那么只能是TCP检测到超时丢包了,以为是网络不通畅,再补发一个一模一样的,但是中间设备还是同样处理。所有的包都在中间部分不知所踪,这就被叫做PMTU黑洞。
由于我们包走的网络链路也并不是固定的,访问目标网站也就极不稳定,只要链路中有这种混蛋设备,你的包就不知所踪了,轻则加载缓慢,重则无法访问。
那么怎么解决呢,那就是自觉自律了,严格要求自己,绝不超限,那么设多少呢,下面是大佬的详细解释,有理有据:
现在国内 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 以下。
解决方法:
#set security flow tcp-mss all-tcp mss 1452 set security flow tcp-mss all-tcp mss 1432
按照这种思路我改了自己光猫上的参数,成功解决问题。
注:如果问题仍没解决,试着再把MTU适当减小一点(亲身体会),但是不能小于1280
那么问题来了,为什么一开始没有注意到这篇文章呢?因为这篇文章的网站也是支持IPv6的,所以能加载出来也是巧合,我前面几个小时都看的能正常加载出来的网站。
参考文章:
- 使用IPv6后一些网站无法访问,有时能访问有时无法访问问题解决(看到文章)
- 使用IPv6后一些网站无法访问,有时能访问有时无法访问问题解决(看到的文章引用的文章)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端