我需要设置一个启用巨型帧的本地连接。
我将网络适配器的 MTU 设置为 9000。
~$ ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 9000
inet 10.0.0.3 netmask 255.255.255.0 broadcast 10.0.0.255
inet6 fe80::215:5dff:fe8a:1792 prefixlen 64 scopeid 0x20<link>
ether 00:15:5d:8a:17:92 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 5 bytes 398 (398.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
我检查了我的网络适配器设置,一切正常。我使用的是 WSL2,Ubuntu 和我的网络适配器设置中的 MTU 大小为 9000(使用netsh
和Get-NetAdapterAdvancedProperty
来自 Powershell)。
但是,当我通过指定数据包大小来 ping 远程设备 (IP 10.0.0.10) 时,我遇到了失败。奇怪的是,显示的不是“大数据包”错误消息,而只是“ping 失败”。为了进行比较,让我向您展示正常 ping (#1)、数据包过大 (#2) 和应由巨型帧处理的数据包 (#3) 的 ping 的结果。
# 1.
~$ ping 10.0.0.10
PING 10.0.0.10 (10.0.0.10) 56(84) bytes of data.
64 bytes from 10.0.0.10: icmp_seq=2 ttl=64 time=1.49 ms
# 2.
~$ ping 10.0.0.10 -c 10 -M do -s 10000
PING 10.0.0.10 (10.0.0.10) 10000(10028) bytes of data.
ping: local error: message too long, mtu=9000
# 3.
~$ ping 10.0.0.10 -c 10 -M do -s 8900
PING 10.0.0.10 (10.0.0.10) 8900(8928) bytes of data.
--- 10.0.0.10 ping statistics ---
10 packets transmitted, 0 received, 100% packet loss, time 9368ms
如您所见,行为 #1 和 #2 是正常的,但 #3 则不正常。数据包大小不是太大,MTU 无法处理(否则,我会遇到与 #2 相同的错误)。
我在网上查找了这个问题并找到了以下答案:我的 PC 配置正确,但接收设备的 MTU 不够大。但是,该设备是专门为处理这些大数据包而设计的,我联系了该设备的制造商,他们告诉我它可以原生处理巨型帧。
问题似乎出在我的连接上,但我找不到任何东西。