使用巨型帧进行 ping 操作失败,但返回默认 ping 失败消息

使用巨型帧进行 ping 操作失败,但返回默认 ping 失败消息

我需要在我的 Windows 11 PC 和外部设备 (IP 10.0.0.10) 之间建立本地连接,并启用巨型帧 (MTU 9000)。我的 PC 上的最终目标是从 WSL2 连接到远程设备,它目前可以工作,但有相同的 MTU 问题。

在文章的最后,我放上了设置 MTU 所遵循的步骤。

但是,我仍然无法 ping 大数据包大小的设备。奇怪的是,我得到了一个默认ping 失败消息,而不是数据包太大ping 失败消息。

为了进行比较,让我向您展示正常 ping(#1)、数据包过大的 ping(#2)以及应由巨型帧处理的数据包的 ping(#3)的结果。

  • 在 Powershell 上:
# 1.
ME> ping 10.0.0.10
Envoi d’une requête 'Ping'  10.0.0.10 avec 32 octets de données :
Réponse de 10.0.0.10 : octets=32 temps<1ms TTL=64

# 2.
ME> ping 10.0.0.10 -f -l 10000
Envoi d’une requête 'Ping'  10.0.0.10 avec 10000 octets de données :
Le paquet doit être fragmenté mais paramétré DF.

# 3. 
ME> ping 10.0.0.10 -f -l 8200
Envoi d’une requête 'Ping'  10.0.0.10 avec 8200 octets de données :
Délai d’attente de la demande dépassé.
Statistiques Ping pour 10.0.0.10:
    Paquets : envoyés = 1, reçus = 0, perdus = 1 (perte 100%),
  • 在 WSL2 上(相同结果):
# 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 返回 ping,#2 返回数据包过大错误,而 #3 返回默认错误。如您所见,行为 #1 和 #2 是正常的,但 #3 不是。数据包大小不是太大,MTU 无法处理(否则,我会遇到与 #2 相同的错误)。

我在网上查找了这个问题,找到的答案是:我的 PC 配置正确,但接收设备的 MTU 不够大。但是,此设备是专门为处理这些大数据包而设计的,我联系了设备制造商,他们告诉我它本身就可以处理巨型帧。

这个问题从何而来,我该怎么做才能将大数据包发送到 10.0.0.10?

问题似乎出在我的连接上,但我找不到任何东西。


设置 MTU 的步骤如下

  1. 电源外壳:
PS C:\Users\me> Set-NetAdapterAdvancedProperty "Ethernet*" -DisplayName "Jumbo Packet" -RegistryValue "9014"
PS C:\Users\me> Get-NetAdapterAdvancedProperty
Name                      DisplayName                    DisplayValue                   RegistryKeyword RegistryValue
----                      -----------                    ------------                   --------------- -------------
(...)
Ethernet 4                Jumbo Packet                   9014 Bytes                     *JumboPacket    {9014}
(...)
  1. 命令行:
netsh interface ipv4 set subinterface "Ethernet 4" mtu=9000 store=persistent
netsh interface ipv4 show subinterfaces

       MTU  État détect supp      Octet entrant     Octet sortant  Interface
----------  ---------------  ------------  ------------  -------------
(...)
      9000  5             0             0  Ethernet 4 - Adaptateur TPL Blanc
(...)

  1. ncpa.cpl(网络管理工具):
  • 以太网 4 --> 配置 --> 高级 --> 巨型数据包 --> 9000
  1. WSL:
~$ sudo ifconfig eth0 mtu 9000 up
~$ 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 74  bytes 12574 (12.5 KB)
        RX errors 0  dropped 3  overruns 0  frame 0
        TX packets 34  bytes 92254 (92.2 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

答案1

您没有提到您的机器和远程机器之间的确切网络拓扑,但路径中的每个网络设备都必须支持巨型帧(并且必须实际启用)或配置为允许数据包分段,以便它适合较小的帧大小。

最好的故障排除策略是尽可能靠近远程设备进行数据包捕获。确保大型 ping 实际上是从源计算机到远程设备进行的,并查看远程设备是否响应。

另一个故障排除方法是将您控制的机器与远程设备放在同一个网段上,并相应地设置其 MTU。然后,您可以检查网络本身是否如您所期望的那样支持巨型帧。

相关内容