ネットワークの最適化:MTU値の調整(下) - パソコンVETの診療カルテ - Dengon Net

ネットワークの最適化:MTU値の調整(下)

2006-12-21

皆さん、あけましておめでとうございます。今回は、先月の続きです。MTU値の調整の実際を紹介します。今月はちょっと上級者向きのお話しです。これでわかる人は多分そのとおりにできるでしょう。わからない方は無理せず、誰かわかる方にやってもらってください。

症状: iiNetのADSL2+に加入、接続したが、hotmailなど、特定サイトにアクセスできない。カスタマーサービスにはK.H.さんのパソコンに問題ありと言われた。

最適値を探る

まず、前回の復習です。MTU(Max Transfer Unit)は最大どのくらいのデータを一つのパケットにまとめて送信するか、という値で、小さすぎると通信効率が悪くなり、かといって大きすぎると送り直しの頻度が増えて極端にスピードが落ちたり、特定のサイトが見られなくなるなどの障害が起きます。

したがって、送り直しが頻発しない範囲での最大の値が最適値ということになります。Windowsが持っているMTUの標準値は1500バイトになっていますが、これは最大公約数的な値で、プロバイダによって、あるいは回線の状態によってはもっと小さくした方がいいケースがあるわけです。

最適値は、「ping」というコマンドで調べることができます。このコマンドは単純に相手にパケットを送り、応答が来るまでの時間を表示します。このとき、パケットの大きさを指定できますので、この大きさをいろいろ変えて試してみるというわけです。

まずpingの相手になるアドレスを見つけましょう。契約しているプロバイダのWebサイトなどは確実です。たとえばBigpondならwww.bigpond.com、Netspaceならwww.netspace.net.auです。あるいはwww.yahoo.comでもいいでしょう。とりあえずpingができるかを試します。

ping www.bigpond.com

これで、以下の行が4回表示され、Reply from 144.135.18.32: bytes=32 time=53ms TTL=245 かつ、その後に以下のような文が出て、「0% loss」と表示されれば通信エラーはなく、データが失われずに通信できたことがわかります。

Packets: Sent = 4, Received = 4, Lost = 0 (0% loss)

さて、次にパケットサイズを変えます。これには「-f -l <データ長>」というパラメタをつけます。とりあえず1472という値でやってみてください。

ping -f -l 1472 www.bigpond.com

これで「0% loss」ならMTUはWindowsのデフォルト値1500でOK。それなのにインターネット利用に何か問題があるなら、それはMTUが原因ではないということになります。

一方、このデータ長で、通信エラーが出る場合、以下のようなメッセージが表示されます。

Packet needs to be fragmented but DF set.

この場合、データ長を小さくして試してください。何度か試して、転送エラーなしで安定して通信できる最大長を割り出します。そしてパケットを作るときに添付されるヘッダー長である「28」を足した数字がMTUの最適値となります。たとえばデータ長1334が安定して通信できる最大値だったら、MTUは1334+28=1362が最適値となります。

MTUの変更

MTU値はWindowsではレジストリというシステムデータベースに格納されています。これをregeditで直接変更することも可能ですが、レジストリをヘタに変更すると、システムに深刻なダメージを与え、最悪の場合システムが起動できなくなったりします。

MTU変更には、専用ソフトウェアを使うことをお勧めします。 NetTuneというフリーソフトが有名です。Web検索をすれば簡単に見つかりますから、ダウンロードしてお使いください。

今月の教訓とTips

  • MTUの最適値は通信エラーが起きない範囲の最大データ長。これはpingコマンドでチェックできる。
  • pingで求めた最大値に28を足した値がMTUの最適値。
  • MTUの変更にはNetTuneがお勧め。

さて、年明け早々恐縮ですが、この「パソコンVETの診療カルテ」シリーズは、今回で終了します。

症例を扱っていくと、あまり一般的なお話しができないため、次回からは新シリーズとして、より幅広い読者の方を対象に、さらにわかりやすい解説を目指します。