さてそれでは、ジャンボ・フレームを使って通信してみよう。
ジャンボ・フレームを使って通信するために必要な条件としては、通信経路の途中にあるすべてのハブやネットワーク機器、デバイス・ドライバなどがジャンボ・フレームに対応している必要がある。さらにジャンボ・フレームで通信できるように、あらかじめOSやシステムに指示を与えておく必要もある。具体的には、次の図のような環境を用意する。
■必要条件1――ジャンボ・フレーム対応機器をまとめてハブで接続する
この図は、通常のハブを使ったネットワークと何も違いはないように見えるが、実際その通りである。ただ、図の左側半分のPCやサーバ(実際にはネットワーク・カード)、ハブは、すべて「ジャンボ・フレーム対応」となっている製品で構成する必要がある。従来のジャンボ・フレーム非対応のハブやPCをジャンボ・フレーム対応ハブに接続してもよいが、当然ジャンボ・フレームを使った通信には参加できない。従来の非ジャンボ・フレームの通信のみが可能である。また、通信ペアの片方だけがジャンボ・フレーム通信に対応している場合は、やはり従来どおりの通信が行われる。ジャンボ・フレームで通信するには、通信する双方のコンピュータやそれを中継するハブがすべてジャンボ・フレームに対応している必要がある。
■必要条件2――複数のハブを経由する場合は、すべてジャンボ・フレーム対応ハブにすること
2台のコンピュータ間に2つもしくはそれ以上のハブが存在する場合、その経路の途中にあるハブはすべてジャンボ・フレーム対応ハブにすること。経路の途中に非対応のハブがあると、そこでジャンボ・フレームが破棄されてしまい、通信できなくなる(通常の通信は当然可能)。
この条件を考慮すると、ジャンボ・フレーム対応のネットワーク・セグメントを作る場合は、必ず1カ所にまとめてジャンボ・フレーム対応のセグメントにする必要がある。同じIPアドレスのネットワーク・セグメント内に複数のジャンボ・フレーム対応ハブを導入し、それぞれをジャンボ・フレーム非対応のハブで相互に接続しても、通信相手によってはジャンボ・フレームが通らず、非常に面倒なことになる。
なおハブを購入する場合は、サポートされているジャンボ・フレームのMTUサイズにも注意する。サポートされているMTUが異なるジャンボ・フレーム対応ハブを接続すると、一番小さいMTU以上のサイズのフレームが通らなくなり、そこで通信が途絶する。もちろんこのMTUサイズは、接続するすべてのコンピュータのジャンボ・フレームのMTUサイズと同じか、それよりも大きくなっていることも必要である。例えばPC間で9Kbytesのジャンボ・フレームを送受信しようとしているのに、ハブのMTUサイズが5Kbytesしかなければ、5Kbytesのジャンボ・フレームまでしか使えない。
ベンダのサイトにあるネットワーク・カードやハブなどの製品仕様を見ると、「ジャンボフレームサイズ 9Kbytes」などと記述されていることがあるが、製品を導入する場合は1の位まで仕様を確認すること。単に「9Kbytes」と書いてあるけれども、実際には「9216(=1024×9)」のほか、「9000」や「9014」など、さまざまな製品が存在している(9000は9014からイーサネットのヘッダ14bytesを引いたものと同じかもしれないが、もし本当に9000しかないとすると、MTUが9000のフレームが通らないので、問題となる可能性がある)。ハブやスイッチ、ルータでは余裕を持って9.5Kbytes程度まで扱える製品もあるが、実際には「9600」や「9578」「9500」など、やはりいろいろあるようだ。可能なら接続するどのPCよりも大きな値のものにしたいが、それが不可能な場合は接続するPC側でMTUサイズを抑えるなどの対策が必要になる。
■必要条件3――ネットワーク・インターフェイスでジャンボ・フレームを有効にしておくこと
デフォルトではジャンボ・フレームは無効になっているので、必要に応じて各コンピュータのインターフェイスでジャンボ・フレームを有効にしておく。Windows OSの場合は、ネットワーク・インターフェイスのプロパティ画面で設定できる。
それでは実際にジャンボ・フレームを有効にしてみよう。この設定はOSやシステムごとに異なるが、例えばWindows 7なら[コントロール パネル]の[ネットワークと共有センター]の画面左側にある[アダプターの設定の変更]でネットワーク・インターフェイスの一覧を表示させ(デバイス・マネージャから選択してもよい)、ジャンボ・フレームを設定させたいインターフェイスの[プロパティ]を表示させる。
次に[詳細設定]画面を表示させる。
以上の操作を行うと、一度ネットワーク・インターフェイスが無効になって、すぐに有効になる。これで準備はできているはずなので、どこか適当なサイトやいつも使っているサーバなどに接続してみよう。pingコマンドなどでほかのホストへ到達するかどうかをチェックするのもよい。TCP/IP通信を使っている限り、ジャンボ・フレームを有効にしても、通常の通信はほとんどそのまま何の変わりもなく使えるはずである。だがもし大きなファイルの転送などで失敗することがあるようなら、例えば途中のハブなどでジャンボ・パケットが破棄されている可能性もあるので、構成をチェックしよう。
ジャンボ・フレームのMTUサイズが実際にいくつになっているのかは、例えば通信させてみてネットワーク・モニタなどで確認すればよいが(関連記事参照)、もっと簡単にはnetshコマンドでも確認できる。
C:\>netsh interface ipv4 show interfaces……ipv4のMTUの表示
Idx Met MTU 状態 名前
--- ------ ---------- --------- ---------------------------
1 50 4294967295 connected Loopback Pseudo-Interface 1
23 30 1500 connected ローカル エリア接続 2
10 10 9202 connected ローカル エリア接続 ……これが目的のインターフェイス
24 20 1500 connected VMware Network Adapter VMnet1
25 20 1500 connected VMware Network Adapter VMnet8
この画面には、現在登録されているネットワーク・インターフェイスと、そのMTUサイズが表示されている。今回設定したインターフェイスでは「9202」となっているが、これはイーサネットのヘッダ部分(14bytes)を除いた、MTU部分だけのサイズである。ヘッダのサイズを加えると「9202+14=9216(=1024×9)」となり、先ほど設定した「9KB」になっていることが分かる。
ちなみにこのインターフェイスでは常にMTUサイズは9202となるが、通信相手のMTUサイズはこのサイズでなくても構わない。もっと小さいMTUサイズでもよいし、標準の1500でも構わない。MTUサイズが異なるのにどうして(TCPで)接続できるのかについては、後述する。
このインターフェイスではMTUサイズが9202となっているため、理屈の上では、このサイズのIPパケットまではフラグメント化(断片化)せずに通信できるはずである。pingコマンドを使ってこれを確認してみよう。
次の例は、pingコマンドで通信相手(192.168.0.185)にフラグメント化を禁止したpingのジャンボ・フレームを送信しているところである。MTUサイズは、ローカル側(自分の側)は9202だが、相手側は9000である。そのため、相手側で受信可能な最大pingパケットのサイズは8972bytesまでである。このサイズは「MTU−28=9000−28=8972」で求められる。28はIPヘッダのサイズ20bytes+ICMPのサイズ8bytesである(詳細は関連記事参照)。3番目の例の9175は、自分の側のMTUサイズを1byte超えるサイズである。これは送信もせずにエラーになるはずだ。
C:\>ping 192.168.0.185 -f -n 2 -l 8972……相手側MTU内に収まるpingパケットを送信
192.168.0.185 に ping を送信しています 8972 バイトのデータ:
192.168.0.185 からの応答: バイト数 =8972 時間 <1ms TTL=128 ……応答あり
192.168.0.185 からの応答: バイト数 =8972 時間 <1ms TTL=128 ……応答あり
192.168.0.185 の ping 統計:
パケット数: 送信 = 2、受信 = 2、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
最小 = 0ms、最大 = 0ms、平均 = 0ms
C:\>ping 192.168.0.185 -f -n 2 -l 8973……相手側MTUを1byte超えるpingパケットを送信
192.168.0.185 に ping を送信しています 8973 バイトのデータ:
要求がタイムアウトしました。 ……応答なし
要求がタイムアウトしました。 ……応答なし
192.168.0.185 の ping 統計:
パケット数: 送信 = 2、受信 = 0、損失 = 2 (100% の損失)、
C:\>ping 192.168.0.185 -f -n 2 -l 9175……ローカル側MTUを1byte超えるpingパケットを送信
192.168.0.185 に ping を送信しています 9175 バイトのデータ:
パケットの断片化が必要ですが、DF が設定されています。 ……送信できない
パケットの断片化が必要ですが、DF が設定されています。 ……送信できない
192.168.0.185 の ping 統計:
パケット数: 送信 = 2、受信 = 0、損失 = 2 (100% の損失)、
C:\>
この例では、相手のMTU内にちょうど入るpingには応答があるが、MTUサイズを1byte超えるpingには応答がない。相手のネットワーク・バッファに入る前に、破棄されているからだ。3番目のものは自分の側のMTUサイズすら超えているので、そもそも送信されない。この様子をネットワーク・モニタで見ると次のようになっている。
Copyright© Digital Advantage Corp. All Rights Reserved.