![无法访问一些网站](https://linux22.com/image/1001111/%E6%97%A0%E6%B3%95%E8%AE%BF%E9%97%AE%E4%B8%80%E4%BA%9B%E7%BD%91%E7%AB%99.png)
我无法访问几个网站,例如 slack.com。因此我搜索了一下,发现我的 Ubuntu 16.04 系统存在一些与 MTU 有关的问题。尝试了一些 ping 请求后,我发现大小为 1497 或更大的数据包没有被发送。因此,为了重新配置 MTU,我使用了
sudo ifconfig enp7s0 mtu 1497
但是,一旦我执行此命令,我的互联网连接就会断开,无法进一步连接。我正在使用 DSL 连接。
请就如何解决此问题提出一些建议。
答案1
重新启动以恢复原始 MTU 大小 (1500)...或尝试使用 sudo ifconfig enp7s0 mtu 1500
...进行设置以恢复网络访问。
除非您的 VLAN 设置不受支持或配置错误,否则 MTU 不应该是问题所在。MTU 是在网络中的每组计算机和路由器之间协商的,数据包的大小会与 MTU 相符。
答案2
您的问题在于 DSL 连接的 MTU 设置。
Ubuntu 的网络配置中有一个 MTU 设置,而路由器中有一个 WAN MTU 设置。
对于 DSL,常见的 MTU 设置是 1492。请先尝试此值,然后查看您的网站现在是否可以访问。
要确定正确的设置,请从所有 MTU 设置 = 1500 和 VPN = 关闭开始。(VPN 需要不同的测试)。
在终端:
ping [-c count] [-M do] [-s packet_size] [host]
使用的选项是:
c count
:ping 次数M hint
:选择路径 MTU 发现策略。可以是do
(禁止碎片,即使是本地碎片),want
(进行 PMTU 发现,当数据包大小较大时在本地进行碎片),或dont
(不设置 DF 标志)。s packet_size
:指定要发送的数据字节数。
您应该始终从 1472 开始,然后每次减少 10。一旦收到回复,就增加 1,直到收到碎片数据包。取该值(最后一个好值)并将 28 添加到该值以考虑各种 TCP/IP 标头。例如,假设 1452 是合适的数据包大小(您第一次收到对 ping 的 ICMP 回复)。实际的 MTU 大小将是 1480,这是我们正在使用的网络的最佳值。
ping -c 4 -M do -s 1472 8.8.8.8 # this will probably show fragmentation
ping -c 4 -M do -s 1462 8.8.8.8 # may show fragmentation
ping -c 4 -M do -s 1452 8.8.8.8 # no fragmentation?
ping -c 4 -M do -s 1453 8.8.8.8 # still no fragmentation?