DFビットが設定されており、パケットサイズがルーターにとって大きすぎるため、リモートサイトにpingを実行すると、最初のICMP "フラグメンテーションが必要です"メッセージがルーターから送信されます。私のローカルホストから。
Netstat -rC(Linux)では、ルーティングテーブルキャッシュを表示できますが、
1)MSSと呼ばれる列の下にMTUを表示しているようです(これは、リンクのTCP MSSであると予想されます)。
2)値は常に1500と表示されます
私のローカルホストはPMTUをどこかにキャッシュしている必要があるため、フラグメンテーションが必要なメッセージを生成できます。しかし、どうすればそれを確認できますか?
これが私のマシンの例です(netstatの-nはDNSの逆ルックアップを禁止します)。
[root@vbcentos ~]# ping -c 4 -M do -s 1431 212.58.244.69
PING 212.58.244.69 (212.58.244.69) 1431(1459) bytes of data.
From 217.155.134.6 icmp_seq=1 Frag needed and DF set (mtu = 1458)
From 217.155.134.4 icmp_seq=2 Frag needed and DF set (mtu = 1458)
From 217.155.134.4 icmp_seq=2 Frag needed and DF set (mtu = 1458)
From 217.155.134.4 icmp_seq=2 Frag needed and DF set (mtu = 1458)
--- 212.58.244.69 ping statistics ---
1 packets transmitted, 0 received, +4 errors, 100% packet loss, time 1002ms
[root@vbcentos ~]# netstat -rCn
Kernel IP routing cache
Source Destination Gateway Flags MSS Window irtt Iface
217.155.134.3 217.155.134.4 217.155.134.4 il 0 0 0 lo
217.155.134.4 212.58.244.69 217.155.134.6 1500 0 0 eth0
217.155.134.4 217.155.134.4 217.155.134.4 l 16436 0 0 lo
217.155.134.3 217.155.134.255 217.155.134.255 ibl 0 0 0 lo
217.155.134.4 212.58.244.69 217.155.134.6 1500 0 0 eth0
217.155.134.6 217.155.134.4 217.155.134.4 il 0 0 0 lo
212.58.244.69 217.155.134.4 217.155.134.4 l 0 0 0 lo
[root@vbcentos ~]#
編集:提案に従って:
ip route get to 212.58.244.69
与える
212.58.244.69 via 217.155.134.6 dev eth1 src 217.155.134.4
cache mtu 1500 advmss 1460 hoplimit 64
MSSはmtuよりもわずか40だけ小さいため、これも間違っているように見えます。これは、PMTUではなくインターフェースmtuです。
多分
ip route get to 212.58.244.69
MSSはMTUより40バイト少なくする必要があります(IPv4(20バイト)およびtcp(20)バイトヘッダーは含まれません)。それは正しいです。
ICMPフラグメンテーション必要メッセージは、サーバーではなくルーターによって送信されます。
Windowsでは、netshコマンドを使用して、この情報を保持する「宛先キャッシュ」を表示します。例(IPv4を想定):
netsh interface ipv4 show destinationcache