MTUの最適な値を調べる方法を紹介しています。サイトを利用して手軽に調べる方法と、コマンドを利用して詳細に調べる方法の両方を記載しています。
MTU値を最適化することによってネットワーク効率が良くなるため、家のインターネットの高速化をする時やVPNやsambaが遅い時などに有効です。
MTUとは
MTUの概念
MTUとは(Maximum Transmission Unit)の略で、ネットワークで一回に送信できるデータの最大サイズのことを指します。
ネットワークを流れるパケットは、MTUで定められた最大サイズに分割して送信されます。
送信側のサイズよりも受信側のサイズが小さいと受信できず、受信側のMTUに合わせて再分割されたうえで再送信されます。
この再分割のことをIPフラグメンテーションといい、通信エラーや通信速度の遅延が起こります。
MTU値が高いほど一度に送ることができるデータが大きくなるので、伝送効率が良くなり回線速度も速くなる傾向にあります。
フラグメンテーションと問題点
フラグメント化されたパケットを元の状態に戻すのは、受信側の端末となります。この再構成は、そのデータに必要な全てのパケットが揃うまで行われません。そのため、受信側端末に負荷がかかり、ネットワークの速度が遅くなることがあります。
また、パケットの送信経路にフラグメントを禁止している端末がある場合、そこから先への通信ができなくなります。これは、ファイヤーウォールによってフラグメント化されたパケットを受け取らないように設定されている場合があるからです。(DoS攻撃防止のため)
つまり、フラグメンテーションが発生しないようにMTU値に収まるようなパケットだけを送信する方が回線速度のパフォーマンスが向上します。
一般的なプロバイダのMTU値
Ethernet(一般的なインターネットプロトコル)の場合、デフォルトのMTUは1500バイトに設定されていますが、使用するプロバイダによってMTUの設定値が違います。
以下の表は代表的なプロバイダのMTU値です。NURO光が最も高効率で、フレッツ光は低い傾向にあります。
回線名 | MTU値 |
---|---|
NURO光 | 1500(高) |
auひかり | 1492 |
フレッツ光(IPv6対応) | 1460 |
フレッツ光 | 1454(低) |
※フレッツ光・ドコモ光・ソフトバンク光などは全て「フレッツ回線」を使用しています。
※回線業者によってMTU値が異なる可能性があるため、必ずしも表の値になるとは限りません。正確なMTU値を確認したい場合は後述の方法をお試しください。
最適なMTU値の調べる方法(Webサイト利用)
以下のサイトにアクセスすると、現在の通信環境での最適なMTU値を知ることができます。
MTU調査サイト:https://www.speedguide.net/analyzer.php
「MTU = xxxx」のように記載してあるxxxxの部分が最適なMTU値です。
最適なMTU値を調べる方法(pingコマンド利用)
pingコマンドでデータサイズを変えながらパケットを送信することによって最適なMTU値を調査します。
pingコマンド
ping(ピン)コマンドは、通信相手にデータを送信し、ネットワーク接続ができているかどうかを確認できるツールです。
Windowsではコマンドプロンプトから利用できます。
ping 192.168.1.10
オプション値 | |
---|---|
-F | IPフラグメント禁止。 フラグメンテーションが起こった場合はエラーを返す。 |
-l {size} | {size}バイトのデータを送信する。 |
TCP/IPヘッダーとping値の求め方
ネットワークで送信されるパケットは、TCPヘッダー(20バイト)とIPヘッダー(8バイト)を付与された上で通信します。
そのため、調査したいMTU値が1500の場合は1500-20-8の1427がpingの値となります。
MTU調査方法
Windowsのコマンドプロンプトで以下のコマンドを実行します。このコマンドにより、example.comに1472バイトのデータを4回送ります。
ping -f -l 1472 example.com
フラグメンテーションが起きる場合
コマンド実行後に「パケットの断片化が必要ですが、DFが設定されています。」と表示された場合、フラグメント化が起こっています。(DF = Don’t Fragment)
上記の画像の場合、1472バイトのパケットを4回送信して4回ともパケットが失われています(損失100%)。1472バイトはMTU値1500を調査する時のバイト数です。
最適なMTU値を絞り込むには
このコマンドの1472の部分を少しずつ変えていき、pingに成功した値に28を足した値が最適なMTU値です。最初は10か20程度マイナスしていって大雑把な範囲を絞込み、その後に1ずつ値を増減していくのが効率的です。
最終的にデータ損失がなくなった値に28を足した数値がお使いのネットワーク環境での最適なMTU値ということになります。
フラグメンテーション起きない場合
上記の画像の場合、1426バイトのデータを4回送って4回とも送信されています(損失率0%)。1426バイトはMTU値1454を調査する時のバイト数です。
従って、MTU値1454に設定すればフラグメント化を起こさずにパケットを送信することができます。
送信できる最大値を設定したい場合は、1427バイトのデータも送ってみてどの値からフラグメント化が起きるのか確かめてみましょう。
コメント