最適なMTU値を調査する方法

サーバ

MTUの最適な値を調べる方法を紹介しています。サイトを利用して手軽に調べる方法と、コマンドを利用して詳細に調べる方法の両方を記載しています。

MTU値を最適化することによってネットワーク効率が良くなるため、家のインターネットの高速化をする時やVPNやsambaが遅い時などに有効です。

OpenVPNでsambaが遅い場合に高速化する方法

スポンサーリンク

MTUとは

MTUの概念

MTUとは(Maximum Transmission Unit)の略で、ネットワークで一回に送信できるデータの最大サイズのことを指します。

ネットワークを流れるパケットは、MTUで定められた最大サイズに分割して送信されます。
送信側のサイズよりも受信側のサイズが小さいと受信できず、受信側のMTUに合わせて再分割されたうえで再送信されます。
この再分割のことをIPフラグメンテーションといい、通信エラーや通信速度の遅延が起こります。

MTU値が高いほど一度に送ることができるデータが大きくなるので、伝送効率が良くなり回線速度も速くなる傾向にあります。

MTU値がデータ送信に与える影響

データサイズ < MTU —-> 送信できる
データサイズ > MTU —-> 分割して送信

フラグメンテーションと問題点

フラグメント化されたパケットを元の状態に戻すのは、受信側の端末となります。この再構成は、そのデータに必要な全てのパケットが揃うまで行われません。そのため、受信側端末に負荷がかかり、ネットワークの速度が遅くなることがあります。

また、パケットの送信経路にフラグメントを禁止している端末がある場合、そこから先への通信ができなくなります。これは、ファイヤーウォールによってフラグメント化されたパケットを受け取らないように設定されている場合があるからです。(DoS攻撃防止のため)

つまり、フラグメンテーションが発生しないようにMTU値に収まるようなパケットだけを送信する方が回線速度のパフォーマンスが向上します。

DoS攻撃とは

サーバーをクラッキングする手法の1つ。
過剰なパケットを送付してサーバー負荷を高め、サーバーを過負荷でダウンさせたりサービスを妨害したりする攻撃のこと。

一般的なプロバイダの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値です。

Webサイトを利用して最適なMTU値を調べる方法
最適なMTU値が記載されている個所

最適なMTU値を調べる方法(pingコマンド利用)

pingコマンドでデータサイズを変えながらパケットを送信することによって最適なMTU値を調査します。

pingコマンド

ping(ピン)コマンドは、通信相手にデータを送信し、ネットワーク接続ができているかどうかを確認できるツールです。

Windowsではコマンドプロンプトから利用できます。

Code192.168.1.10にデータを送る
ping 192.168.1.10
オプション値
-FIPフラグメント禁止。
フラグメンテーションが起こった場合はエラーを返す。
-l {size}{size}バイトのデータを送信する。

TCP/IPヘッダーとping値の求め方

ネットワークで送信されるパケットは、TCPヘッダー(20バイト)とIPヘッダー(8バイト)を付与された上で通信します。

そのため、調査したいMTU値が1500の場合は1500-20-8の1427がpingの値となります。

計算式

1500 (MTU) – 20 (TCPヘッダ) – 8(IPヘッダ) = 1472

MTU調査方法

Windowsのコマンドプロンプトで以下のコマンドを実行します。このコマンドにより、example.comに1472バイトのデータを4回送ります。

Code1472バイト(MTU=1500)のデータを送る
ping -f -l 1472 example.com

フラグメンテーションが起きる場合

pingを使ったMTU調査方法:フラグメント化が起こっている様子。
フラグメント化が起こっている。

コマンド実行後に「パケットの断片化が必要ですが、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バイトのデータも送ってみてどの値からフラグメント化が起きるのか確かめてみましょう。

コメント

タイトルとURLをコピーしました