Pocket

Pingコマンド(Windows端末)でMTU調査

  • add this entry to hatena bookmark

ある端末から通信対象のネットワーク機器までの通信状態が芳しくない状態であった為、調査の一環として、Pingコマンドを用いて調査対象ネットワーク経路のMTU値の調査を行いました。以下に記録しておきます。

MTUについて

MTU(Maximum Transmission Unit)とは、一度に送信することができるデータのサイズの事です。プロトコルや媒体毎に固有の値があります。

規格情報

  • IPプロトコル(1つのIPパケット)のサイズ:最大64,000bytes(IPv4)
  • MTUの最小サイズ:576bytes。

MTU 数値情報

  • イーサネット(無線LANも含む):1パケット(1フレーム)のサイズは最大1500bytes。
  • FDDI(光ファイバ):最大4352bytes
  • フレッツ:最大1454bytes

Pingコマンドを打つ前に

Pingコマンドでは、以下の計算がある事を前提に、結果を判断する事になります。

イーサネット(MTU:1500bytes)の場合

  • IPヘッダ:20bytes
  • ICMPヘッダ:8bytes
  • データサイズ:最大1472bytes(1500bytes から、IPヘッダとICMPヘッダを引いた値)

上記より、フラグメント化せずに送信することができるデータサイズは最大1472bytesとなる。

Pingコマンド

コマンドプロンプトを起動し、Pingコマンドを発行する形になりますが、使うオプションは以下になります。

>ping -f -l (MTUサイズ) 対象IPアドレス

オプション「-f」は、IPパケットのフラグメントをさせない、という指定になります。
オプション「-l」は、送信バッファーのサイズです。

使い方としては、「-l」で実際に送る送信バッファー(データ)のサイズを少しずつ大きい値に変更しながら、Pingコマンドを実行する形となります。あるサイズに達すると、「-f」によってIPパケットのフラグメントができないため、エラーが返ってくるようになります。エラーが返ってくる値の一つ前の値(最後に正常にPing応答が確認できた時の値)がMTUの値となります。

なお、対象機器との間のネットワーク経路には、様々なネットワークや機器が存在するわけですが、特定できるMTUサイズは、ネットワーク経路の中で最も小さいMTUサイズが得られます。

以下に実際の使い方を記載します。

Pingコマンドの実行例(MTUサイズの判断方法)

オプション「-l」で、適度な送信バッファーのサイズ値を決め打ちで指定しながら、DF(Don’t Fragment)bit が発生する値を探す事になります。

C:\Users\test>ping -f -l 1471 192.168.0.254

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

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

C:\Users\test>ping -f -l 1472 192.168.0.254

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

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

C:\Users\test>ping -f -l 1473 192.168.0.254

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

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

C:\Users\test>

オプション「-l」でPing導通が問題ない事が確認できた一番大きな値がキー値になります。その値に、ICMPヘッダ(8bytes)と、IPヘッダ(20bytes)を足した値がMTUサイズとなります。

上記の実行結果では、「1472」が問題なかった送信バッファーサイズであるため、1472 + 8 + 20 = 1500bytes となり、イーサネットのMTUサイズ(1500bytes)と合致する形になります。

ググってみると、より深い情報がたくさん出てきます。

Wiki MTU

Pocket

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


*

チェックサイト RSS Feed読者登録はいかがでしょうか?RSS配信中です。