■ Jumbo Frameって何?
“Jumbo Frame”、あるいは“Jumbo Packet”といわれることもありますが、最近はごく一般的な技術になってきました。ギガビットに対応したハブやLANカードのパッケージに“Jumbo Frame対応!”というシールが貼ってあるケースも珍しくありません。では、このJumbo Frameとはどういったものなのでしょうか?
一言で言えば、「従来のイーサネットの規格で定められたサイズ以上の長さを持つフレームサイズ」のことをJumbo Frameと呼びます。当然これは、従来のイーサネットとは互換性がありません。では、どうして互換性がないものをサポートするようになったのかを、今回は順を追って説明していきたいと思います。
■ フレームサイズ=最大1,518バイト
以前、13回目にイーサネットについて説明しましたが、実はこの際に1つ説明してないことがありました。それは37回目で多少説明しましたが、イーサネット中に流れるパケットは、イーサネットパケットあるいはイーサネットフレームと呼ばれ、その内部はMACアドレスをベースとした送信先/送信元アドレスとデータから構成されますという点です。このフレーム構造をもう少し細かく描いたのが図1で、各用語は以下のような意味になります。
|
図1:イーサネットのフレーム構造
|
プリアンプル |
「ここからデータ送信がはじまる」ことを示すためのもので、値は一定です |
SFD |
SFDの次から実際のデータがはじまることを示すフィールドで、これも値は一定です |
送信先アドレス |
このパケットがどこに向けて送信されたかを示すもので、宛先を示すMACアドレスが入っています |
送信元アドレス |
パケットがどこから送信されたかを示すもので、送り元を示すMACアドレスが入っています |
データサイズ |
これに続くデータ部がどれだけの長さになるかを示すものです |
データ |
実際にデータがここから入ります |
PAD |
データサイズが最低サイズに満たない場合、最低サイズになるまで埋める(Padding)ためのフィールドです。単にサイズ合わせのためだけのものです |
FCS |
Frame Check Sequenceの略で、フレーム全体がエラーを起こしていないかどうかを確認するためのものです。送信側は送信先アドレスからデータ(+Pad)の最後までに対して32bitのCRCを計算、これをFCSに格納して送り出します。受信側は受け取ったフレームについて同様に32bit
CRCの値を計算し、これがFCSの値と一致していなければ受信エラーとしてパケット破棄を行ないます |
|
|
図2:IEEE 802.3のMACフレーム構造
|
実はここで紹介したものはイーサネットのフレームで、これとは別にIEEE 802.3で定義されたフレームは図2のようになっているのですが、概ね構造は変わらず、最近のイーサネット機器はどちらのフレームでも扱えるようになっています。まぁ、これはあまり大きな問題ではないので良いでしょう。
さて、問題はフレームサイズが最大でも1,518バイトと定められている点です。実際にはプリアンプルまで入れて1,526バイトですが、10BASE-Tの時代にはこのくらいがちょうど良いサイズとされました。あまり大きなパケットになると、送受信の際の負荷が大きくなります(当時のマシンの性能は、今とは比較にならないほど低かったことに注意してください)。また、大きすぎるパケットで少量のデータを送るのは無駄が多い、という事情もありました。
その後、10BASEから100BASE-TXに移行するにあたり、このフレームの構造は一切変更されませんでした。つまり、相変わらずデータは46~1,500バイト、フレームサイズは64~1,518バイト以内に制限されていました。
変更しないメリットは、既存の環境からの移行がきわめて容易であることです。10BASE-2/5/Tと100BASE-TXにおける違いは唯一転送速度だけでしたから、例えば移行期には図3のような構成でも問題なく通信が可能でした。仮にフレームの構造を変えたら、速度の変換だけではなく、フレーム構造の変換も必要になるので、ルータか何かを介する必要があったでしょう。
これはその後1000BASE-Tが登場した際も同じで、やはり速度以外は完全に同じフレーム構造を踏襲した関係で、移行は極めてスムーズに行なわれました。
|
図3:10Mbpsと100Mbpsの混在
|
■ フレームサイズの問題
ただ1000BASE-Tの時代になってくると、さすがに「回線は1Gbpsのはずなのに、あまり速くない」という声が聞こえるようになってきました。これには2つ理由があります。100BASE-TXの時は理論上12.5MB/sec、実質10MB/sec強のスピードになるわけですが、今ではPCのHDDが50MB/secとか60MB/secといったスピードで転送を行なえるわけで、10MB/sec程度の帯域を使い切るのはかなり容易でした。
ところが1,000Mbpsは同様に理論上125MB/sec、実質100MB/sec強ということになりますが、PC内部に使われているPCIというバスの転送速度が最大でも133MB/sec、実質70~80MB/secが限界とされているだけに、100MB/secは使い切れないという問題があります。これは特に家庭内などでGbE構成にしても「あんまり速く感じない」というケースの原因となることが多いです。
もう1つの問題は、フレームサイズが1,518バイトで据え置かれていることに起因します。要するに、転送速度に比べてフレームのサイズが小さいというわけです。10BASE-Tの場合、理論的には1,518Byte(プリアンプル部まで入れると1,526バイト)のフレームを、毎秒約823回通信することができます。
実際はこのほかにIFG(Inter Frame Gap:フレーム間の間隔)を12バイト分取らないといけないので、最大でも毎秒約817個となりますが、おおむねそんなところです。そして、100BASE-TXではこれが約8,170個、1000BASE-Tでは約81,699個となりますが、さすがに毎秒8万個となると、これを処理するのはちょっと負荷が大きすぎます。
通信機器(PCのみならず、ルータやスイッチなども含みます)は、1個フレームが到来すると割り込み処理と呼ばれる特殊な処理ルーチンを呼び出し、パケットの処理を行なってから元に戻るという仕組みを取っています。このため、フレームの数が1桁増えると、機器の負荷も1桁増えることになってしまいます。結果として、こうした通信機器のオーバーヘッドの増加が実質的な転送速度を下げることになってしまいました。また、上でちょっと説明したIFGがいっぱい入ってしまうというのも、実行転送速度を下げる大きな理由の1つです。
■ Jumbo Frameの登場
|
図4:異なる最大フレームサイズ
|
実はこうした話は1000BASE-Tの仕様の検討時からわかっていたことです。対処法は簡単で、フレームサイズを大きくすれば良いという話ですが、この場合、「どこまで大きくするか」「旧来のイーサネットフレームとの互換性がなくなる」という2つの問題が出てきてしまいます。
まず前者ですが、最小フレームサイズは64バイトのまま変えずに、最大フレームサイズを4倍の6,000バイト程度まで増やすことが検討されていました。ところがこれではまだ足りないという話もあり、その後9,000バイトや12,000バイト、15,000バイトなど、さまざまなサイズが検討された結果、結局「決まらない」という情けない結果になってしまいました。この結果、「Jumbo Frame対応」と謳っていても、各社ともに対応している最大フレームサイズはまちまちだったりします。
例えば図4のような構成の場合、フレームサイズは6,000バイト以下にしないとうまく通信できず、かえって通信速度が落ちるといったことが発生してしまいます。このあたりをうまく制御する方法は今のところなく、結局ユーザーが調整するしかなかったりします。
|
図5:Jumbo Frame非対応機材の混在
|
もう1つの問題は、Jumbo Frame非対応機材と混ぜた場合、通信ができなくなってしまうことです。例えば、図5のようなケースで、C→AやC→Bは問題なくデータを送れますが、A→C、B→CでJumbo Frameを送られると、Cはこれを認識できずに破棄してしまうため、再送を何度も行なうことになります。ここでAやBが、エラーがあるとサイズを変えて再送するような機能を持っていれば、やがては通信できますが、そうした機能がないと永遠にデータが届かない(というか、破棄されてしまう)ために結局通信ができないことになります。
厄介なのはこのケースでも、フレームサイズが1,518バイト以下ならちゃんと届くので、「あるアプリケーションは通信できても、別のアプリケーションは駄目」といった摩訶不思議な現象になってしまうことで、これが理由でトラブルの切り分けが遅れたりします。
|
図6:Jumbo Frame非対応機材を使うためには……
|
今のところ、これを解決するうまい方法はありません。現実的な方法は、図6のようにJumbo Frame対応機器と非対応機器を別々のネットワークに分離し、間をルータで繋ぐというやり方でしょう。本当はブリッジの方が管理が楽で良いのでしょうが、筆者の知る限りでは、Jumbo Frameがきたらそれを従来のサイズに分割して流してくれるというブリッジは存在しないので、ネットワークが異なるのを覚悟で図6のような構成にするしかないようです。
2005/09/12 11:05
槻ノ木 隆 国内某メーカーのネットワーク関係「エンジニア」から「元エンジニア」に限りなく近いところに流れてきてしまった。ここ2年ほどは、企画とか教育、営業に近いことばかりやっており、まもなく肩書きは「退役エンジニア」になると思われる。(イラスト:Mikebow) |
|