Sononi Limited / 有限会社その弐

弊社の技術資料やコラム等を公開しています。
内容に誤りや、社会通念上不適切な点があることが考えられますが、弊社では本サイトの情報の使用により生じたいかなる損害も責任を負いかねますことをご了承ください。


pingで最大セグメントサイズ(MSS)を調べる方法

初出:2019-08-14 00:00:00  更新:2019-08-14 00:00:00
カテゴリ: IT   タグ: Linux Windows

MSS(最大セグメントサイズ)を調べるためにpingを使用する方法。
送信データサイズを指定してpingを送る。この際、パケット分割できないようにする(必須ではないが、こうしておいたほうが切り分けしやすい)。
ping応答があれば指定したデータサイズでの送信が可能、そうでなければ不可。MSSの算出は送信可能サイズの最大値を探索することになる。

Windows

  • ping -f -l [データサイズ] [宛先アドレス]
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    C:\>ping -f -l 1472 192.168.89.11

    192.168.89.11 に ping を送信しています 1472 バイトのデータ:
    192.168.89.11 からの応答: バイト数 =1472 時間 <1ms TTL=64
    192.168.89.11 からの応答: バイト数 =1472 時間 <1ms TTL=64
    192.168.89.11 からの応答: バイト数 =1472 時間 <1ms TTL=64
    192.168.89.11 からの応答: バイト数 =1472 時間 <1ms TTL=64

    192.168.89.11 の ping 統計:
    パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
    ラウンド トリップの概算時間 (ミリ秒):
    最小 = 0ms、最大 = 0ms、平均 = 0ms

    C:\>ping -f -l 1473 192.168.89.11

    192.168.89.11 に ping を送信しています 1473 バイトのデータ:
    パケットの断片化が必要ですが、DF が設定されています。
    パケットの断片化が必要ですが、DF が設定されています。
    パケットの断片化が必要ですが、DF が設定されています。
    パケットの断片化が必要ですが、DF が設定されています。

    192.168.89.11 の ping 統計:
    パケット数: 送信 = 4、受信 = 0、損失 = 4 (100% の損失)、

Linux

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
root@test:~# ping -s 1472 -M do 192.168.89.11
PING 192.168.89.11 (192.168.89.11) 1472(1500) bytes of data.
1480 bytes from 192.168.89.11: icmp_seq=1 ttl=64 time=0.193 ms
1480 bytes from 192.168.89.11: icmp_seq=2 ttl=64 time=0.192 ms
^C
--- 192.168.89.11 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 17ms
rtt min/avg/max/mdev = 0.192/0.192/0.193/0.013 ms
root@kvm01:~# ping -M do -s 1472 192.168.89.11
PING 192.168.89.11 (192.168.89.11) 1472(1500) bytes of data.
1480 bytes from 192.168.89.11: icmp_seq=1 ttl=64 time=0.186 ms
1480 bytes from 192.168.89.11: icmp_seq=2 ttl=64 time=0.223 ms
1480 bytes from 192.168.89.11: icmp_seq=3 ttl=64 time=0.230 ms
1480 bytes from 192.168.89.11: icmp_seq=4 ttl=64 time=0.198 ms
1480 bytes from 192.168.89.11: icmp_seq=5 ttl=64 time=0.230 ms
^C
--- 192.168.89.11 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 86ms
rtt min/avg/max/mdev = 0.186/0.213/0.230/0.022 ms
root@test:~# ping -M do -s 1473 192.168.89.11
PING 192.168.89.11 (192.168.89.11) 1473(1501) bytes of data.
ping: local error: Message too long, mtu=1500
ping: local error: Message too long, mtu=1500
ping: local error: Message too long, mtu=1500
ping: local error: Message too long, mtu=1500
^C
--- 192.168.89.11 ping statistics ---
4 packets transmitted, 0 received, +4 errors, 100% packet loss, time 36ms

エラーにならず、単に応答がないという場合がある。

この場合、経路途中で何らかのデータが追加されてMSSが縮んでいる可能性がある。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 普通にエラーになる場合。pingのパケットサイズがノードに設定したMTUを超えている。
[root@vm]# ping -M do -s 1473 192.168.73.91
PING 192.168.73.91 (192.168.73.91) 1473(1501) bytes of data.
ping: local error: Message too long, mtu=1500
ping: local error: Message too long, mtu=1500
ping: local error: Message too long, mtu=1500
ping: local error: Message too long, mtu=1500
^C
--- 192.168.73.91 ping statistics ---
4 packets transmitted, 0 received, +4 errors, 100% packet loss, time 3001ms

# 単に応答が帰ってこない場合。
[root@vm]# ping -M do -s 1472 192.168.73.91
PING 192.168.73.91 (192.168.73.91) 1472(1500) bytes of data.
^C
--- 192.168.73.91 ping statistics ---
55 packets transmitted, 0 received, 100% packet loss, time 53987ms

# この例ではサイズ1430でやっと応答が返ってきた。
[root@vm]# ping -M do -s 1430 192.168.73.91
PING 192.168.73.91 (192.168.73.91) 1430(1458) bytes of data.
1438 bytes from 192.168.73.91: icmp_seq=1 ttl=64 time=0.662 ms
1438 bytes from 192.168.73.91: icmp_seq=2 ttl=64 time=0.737 ms
1438 bytes from 192.168.73.91: icmp_seq=3 ttl=64 time=0.769 ms
1438 bytes from 192.168.73.91: icmp_seq=4 ttl=64 time=0.724 ms
^C
--- 192.168.73.91 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3003ms
rtt min/avg/max/mdev = 0.662/0.723/0.769/0.038 ms