ネットワークで送信可能なパケットの最大サイズをMTUという。IPパケットのサイズがMTUサイズを超えるとパケットの分割処理(IPフラグメンテーション)が行われる。フラグメントしたIPパケットはファイアウォールでブロックされ、トラブルの原因になることがある。このような場合は、ネットワーク・インターフェイスのMTUを変更してフラグメントを止める。
TIPS「pingでMTUサイズを調査する」では、MTUのサイズとは何か、pingコマンドを使ってネットワークのMTUサイズを調査する方法について説明した。MTUサイズとは、ネットワーク上で送信可能なパケットの最大サイズのことであり、具体的には、IPフラグメントなしに送信できるパケットの最大サイズのことである。例えばイーサネットの最大フレーム(パケット)サイズ(MTU)は1500bytesなので、フラグメントを起こさずに送信できるIPパケットの最大サイズは1500bytesとなる(これはIPヘッダを含むサイズ。実際に送信可能なIPパケットのデータ部分のサイズはもっと小さくなる)。
このMTUサイズを超える大きなIPパケットを送信したい場合は、1つのIPパケットを複数のIPパケットに分割する「IPフラグメンテーション」が行われる。だがフラグメンテーションは、ネットワークの攻撃に利用されることもあるので(フラグメントが必要な大きなサイズのパケットを送りつけ、受信側のネットワーク処理部分に負荷をかける攻撃)、フラグメント化されたIPパケットの受信を禁止されている組織も少なくない(そのようなIPパケットを受信しても、ファイアウォールで破棄する)。その結果、サイトによっては、例えばWebページがうまく表示されなくなったり、データ転送やメールの送受信がうまくできなくなったりすることがある。
このような事態を防ぐため、MTUがイーサネットの標準サイズでないネットワークを利用している場合は、ネットワーク・インターフェイスのMTUサイズを変更して、フラグメントなしで通信できるようにする必要がある。例えばBフレッツのようなPPPoEネットワークを利用している場合、PPPoEのヘッダの分だけ、イーサネットのMTUよりも小さくなるので、それを補正する。具体的には、MTUを1500(イーサネットのデフォルト値)ではなく、1454にする(実際には、さらにその先のネットワークでMTUが制限されている場合があるかもしれないので、必要ならば前出のTIPSの方法でMTUサイズを算出し、それに合わせること)。
もっともすべての環境でこのような設定変更が必要になるわけではない。例えば、Windows OSを利用しているコンピュータから直接PPPoEでインターネットに接続している場合、接続ツールの初期設定や、ネットワーク接続時の自動ネゴシエーションで、最適なMTU値がそのネットワーク・インターフェイスに設定されるからだ(MTUは、インターフェイスごとに設定する)。
だが、ブロードバンド・ルータを介してインターネットに接続している場合(特に固定IPアドレスのサービスを利用し、NAT/NAPTなしで運用している場合)、コンピュータ自身には(PPPoEのための設定作業を)何も行わないので、MTUはデフォルトの1500のままとなる。コンピュータから見れば単にイーサネットで相互に接続しているのと何も違いはないからだ。その結果、コンピュータはMTUが1500だと想定してパケットを送信するが、ブロードバンド・ルータがインターネットへパケットをフォワードする場合には、実際のMTUに合わせてフラグメンテーションが行われてしまう。このような、意図しないフラグメンテーションが行われるのを防ぐためには、ブロードバンド・ルータに接続しているインターフェイス(Windows OSでいえば「ローカル接続」などと名付けられているインターフェイスのこと)のMTUを最初から1454に制限しておけばよい(ルータに接続していないネットワーク・インターフェイスでは特にMTUを制限する必要はない)。
Windows OSでMTUサイズを変更するには、該当するネットワーク・インターフェイスに対するレジストリを操作する必要がある。対象となるレジストリは、以下の情報などを参照していただきたい。Windows 2000、Windows XP、Windows Server 2003のいずれでも同じレジストリを操作する。
ネットワーク・インターフェイスのMTUを(イーサネットのデフォルトの1500から)1454などに変更するには、以下のレジストリを変更する。
項目 | 内容 |
---|---|
キー | HKEY_LOCAL_MACHINEの \SYSTEM\CurrentControlSet\Services\Tcpip\Parametersの下にある \Interfaces\interfaceGUID |
値の名前 | MTU(デフォルトでは存在していないので、新規作成する) |
型 | REG_DWORD |
値の内容 | 設定したいMTUサイズ値(例えば1545にする)。 (値が存在しないときの)デフォルト値は0xFFFFFFFFFであり、これはネットワーク媒体ごとのデフォルト値を利用することを意味する。例えばイーサネットなら1500(0x000005DC)となる |
MTUサイズの設定 MTUサイズはネットワーク・インターフェイスごとに設定する。そのため、レジストリのキーもインターフェイスごとに分かれているので、関係ないインターフェイスのレジストリを変更しないように注意する。「interfaceGUID」は、実際にはインターフェイスを表すGUID文字列である。 |
MTUサイズはネットワーク・インターフェイスごとに設定する。そのため、レジストリのキーもインターフェイスごとに分かれている。表中の「interfaceGUID」は、実際にはネットワークを識別するためのGUID文字列であり、システムごとに異なっているので、実際のシステムで確認の上、正しいインターフェイスでのみ変更する。
以上の値を設定後、システムを再起動すれば、MTUサイズが変更されているはずである。TIPS「pingでMTUサイズを調査する」の方法で、MTUサイズを確認しておこう(pingする相手は、MTUを変更したインターフェイスが接続されているルータにすること)。
■関連リンク
■この記事と関連性の高い別の記事
Copyright© Digital Advantage Corp. All Rights Reserved.