2018-05-26

Docomo網ってMTU幾らだからのMTU値の出し方

そもそもは、モバイル通信ってMTU幾らなんだろうと言う所からです。
昨今の環境ではMTUを設定しなくても、速度がそれなりに出るので調整必要無いです。
しかし、偶に手動で設定した場合が良い事もあるので。

基本事項として、Ethernet 1フレームは全体で1518バイトです。
これに、色んな情報が付加されていく関係で、実際のデータ分が減って行きます。
IPとして使えるのはEthernetHeader(18byte)分を引いた分となります。
 1518byte - (Header 14byte + FCS 4byte) = 1500byte
これが、良く出てくるMTU1500の意味です。
この1500byteから更に、IP HeaderやPPPoE Headerが使用していきます。

ここから自分の通信環境のMTUを算出して行く訳ですが、pingで調査して行きます。
IP Headerは標準で20byte消費します。
 1500byte-20byte=1480byte
pingで使用するICMPのHeaderは8byteです。
 1480byte-8byte=1472byte
ping使用時に最高1472byte以下が、1フレーム内で流す事の出来るデータ量になります。

では、実際の調査方法(Windows)
fオプションでパケット分割させない(DFセット)、lオプションでデータサイズ指定します。
ping -f -l 送信サイズ 接続先
e.g.)ping -f -l 1472 yahoo.co.jp

データサイズ+IP/ICMP Header 28byteがMTU値となります。

それでは測定例
ping -f -l 1473 yahoo.co.jp
yahoo.co.jp [183.79.135.206]に ping を送信しています 1473 バイトのデータ:
パケットの断片化が必要ですが、DF が設定されています。
パケットの断片化が必要ですが、DF が設定されています。
パケットの断片化が必要ですが、DF が設定されています。
パケットの断片化が必要ですが、DF が設定されています。

183.79.135.206 の ping 統計:
    パケット数: 送信 = 4、受信 = 0、損失 = 4 (100% の損失)、
ping -f -l 1472 yahoo.co.jp
yahoo.co.jp [183.79.135.206]に ping を送信しています 1472 バイトのデータ:
183.79.135.206 からの応答: バイト数 =1472 時間 =89ms TTL=51
183.79.135.206 からの応答: バイト数 =1472 時間 =79ms TTL=51
183.79.135.206 からの応答: バイト数 =1472 時間 =97ms TTL=51
183.79.135.206 からの応答: バイト数 =1472 時間 =98ms TTL=51

183.79.135.206 の ping 統計:
    パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
    最小 = 79ms、最大 = 98ms、平均 = 90ms
上記結果は、Docomo網でPingした結果です。
1473byteでは断片化して流れ無いが、1472byteでは流れたと言う結果です。
なので、1472byte+28byte=1500byteとなり、MTU1500となります。
この場合、LAN上に設置されたEthernetと同じMTUです。

ちなみにWindowsのpingオプション一覧です。
    -t             中断されるまで、指定されたホストを Ping します。
                   統計を表示して続行するには、Ctrl+Break を押してください。
                   停止するには、Ctrl+C を押してください。
    -a             アドレスをホスト名に解決します。
    -n 要求数      送信するエコー要求の数です。
    -l サイズ      送信バッファーのサイズです。
    -f             パケット内の Don't Fragment フラグを設定します (IPv4 のみ)。
    -i TTL         Time To Live です。
    -v TOS         Type Of Service (IPv4 のみ。この設定はもう使用されておらず、
                   IP ヘッダー内のサービス フィールドの種類に影響しません)。
    -r ホップ数    指定したホップ数のルートを記録します (IPv4 のみ)。
    -s ホップ数    指定したホップ数のタイムスタンプを表示します (IPv4 のみ)。
    -j ホスト一覧  一覧で指定された緩やかなソース ルートを使用します
                   (IPv4 のみ)。
    -k ホスト一覧  一覧で指定された厳密なソース ルートを使用します
                   (IPv4 のみ)。
    -w タイムアウト
                   応答を待つタイムアウトの時間 (ミリ秒) です。
    -R             ルーティング ヘッダーを使用して逆ルートもテストします
                   (IPv6 のみ)。
                   RFC 5095 では、このルーティング ヘッダーは使用されなくなり
                   ました。このヘッダーが使用されているとエコー要求がドロップ
                   されるシステムもあります。
    -S ソースアドレス
                   使用するソース アドレスです。
    -c コンパートメント
                   ルーティング コンパートメント識別子です。
    -p             Hyper-V ネットワーク仮想化プロバイダー アドレスを
                   ping します。
    -4             IPv4 の使用を強制します。
    -6             IPv6 の使用を強制します。
Docomo網ってMTU1500で流れる事に驚いた。

参考までに、Linuxだとコマンドオプション違います。
e.g.)ping -s 1472 -M do -c 4 yahoo.co.jp
意味:データサイズ1472byteでDFセットして4回計測
Linuxの方が括弧内に28byte足した値(MTU)出るので便利なんだけど。(下だと1行目1420の隣の括弧)

ping -s 1420 -M do -c 4 yahoo.co.jp
PING yahoo.co.jp (183.79.135.206) 1420(1448) bytes of data.
1428 bytes from f1.top.vip.kks.yahoo.co.jp (183.79.135.206): icmp_seq=1 ttl=44 time=139 ms
1428 bytes from f1.top.vip.kks.yahoo.co.jp (183.79.135.206): icmp_seq=2 ttl=44 time=139 ms
1428 bytes from f1.top.vip.kks.yahoo.co.jp (183.79.135.206): icmp_seq=3 ttl=44 time=139 ms
1428 bytes from f1.top.vip.kks.yahoo.co.jp (183.79.135.206): icmp_seq=4 ttl=44 time=139 ms

--- yahoo.co.jp ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 139.258/139.431/139.895/0.376 ms
更にFreeBSDも違う
sオプション使うのにroot権限じゃないと通らないと思う。
e.g.)ping -s 1472 -D -c 4 yahoo.co.jp
DオプションがDFセットです。

0 コメント:

コメントを投稿