MTU を変更する (Windows 7)

SERVER


MTU の設定値を変更する

ネットワークアダプターには、通信の際に扱えるデータの最大バイト数が MTU (Maximum Transmission Unit) という値で設定されています。

この MTU 値よりも大きいデータを送信したい場合には、MTU 値で示されたサイズのデータでそれを分割して、ネットワークにデータを送信することになります。

この MTU 値は、一般的な LAN で採用されているイーサーネットの場合は 1,500 となるのですが、送信先のノードまでの経路中のどこかで MTU 値が低く設定されている場合は、途中でデータを分割するか、または再度、適切なデータサイズで送り直す必要性が出てきます。

この辺りの細かいお話については Path MTU Discovery と PMTUD ブラックホール にも記してみましたので、そちらも参考にしてください。

 

たとえば PPPoE の場合は、経路上の MTU 値は一般に 1,492 に、NTT のフレッツ回線の場合は 1,454 になるようなので、パケットの分割を起こさずに通信を行うためには、または PMTUD ブラックホールによるパケットの焼失を予防するには、適切な MTU 値で通信を行う必要があります。

そのためには、最初の出口となる自分自身のネットワークの MTU 値を調整すれば良いようです。

なお、PC から直接ダイアルアップを行ったり、直接 PPPoE でインターネットに接続するような場合には、適切な MTU 値が設定されるらしいので、ネットワークアダプターの MTU 値を変更する必要はないそうです。

 

 

MTU 値を変更したい場合は、たとえば Windows 7 の場合は、レジストリーの値を調整することで MTU 値を変更することが可能です。

HKEY_LOCAL_MACHINE → SYSTEM → CurrentControlSet → Services → Tcpip → Parameters → Interfaces →

この中に、ネットワークアダプターの GUID が記されているので、該当するインターフェイスの GUID を選択します。

なお、該当するインターフェイスの GUID を調べるには、"HKEY_LOCAL_MACHINE → SYSTEM → CurrentControlSet → Control → Class → {4D36E972-E325-11CE-BFC1-08002BE10318}" を参照して、その中の "0000" や "0001" といったサブキーの "DeviceDesc" の表示内容を確認したり、"MatchingDeviceId" とデバイスマネージャーから確認できる該当インターフェイスの "詳細" タブ内の "一致するデバイス ID" とを照らし合わせるなどする必要があるようです。

該当する "MatchingDeviceId" が見つかったら、同列に登録されている "NetCfgInstanceId" の値を確認します。ここに書かれている {E979443B- ...} 等といった長い文字列が、そのデバイスに対応するインターフェイス GUID になるようです。

 

該当するインターフェイス GUID が見つかったら、その中に DWORD 型の "MTU" という名前の値を作成して、そこに希望する MTU 値を設定します。このとき、間違って 16 進数として入力しないように注意しましょう。

設定が完了したら Windows を再起動することで、インターフェイスに MTU 値が反映されます。

 

 

設定が反映されたかどうかは、ディフォルトゲートウェイに対して ping を実行することによって確認できます。

このとき、設定した MTU 値から、ICMP ヘッダー分の 8 バイトと IP ヘッダー分の 20 バイトの合計 28 バイトを引いた数を "-l" オプションの引数として使用しますj。例えば、MTU を 1454 に設定した場合には、-l オプションを 1426 にして、次のように ping を送信します。

ping -f -l 1426 192.168.1.1

このようにして ping 応答が得られたことを確認したら、続いて "-l 1427" などとして、自分に設定されているよりも大きい MTU を指定して ping を再度送信します。

このとき、DF フラグが設定されていないために送信できない旨を示すメッセージが表示されたら、MTU が適切に反映されていると思って良いと思います。