第7回 イーサネット(その2) - イーサネットのフレーム構造:詳説 TCP/IPプロトコル(3/3 ページ)
TCP/IPとともに広く普及したイーサネット。今回は、イーサネットのフレーム構造とMACアドレスについて解説。
イーサネットでは、パケットという用語の代わりににフレームという用語が使われ、イーサネット・フレームとも呼ばれている。DIXイーサネットとIEEE 802.3のフレーム・フォーマットは、「タイプ」フィールドが「長さ/タイプ」フィールドとして使われている点と、オプション・フィールドが追加された点以外は基本的には同じである。
イーサネットのフレーム・フォーマット
DIXイーサネットとIEEE 802.3のフレーム・フォーマットは、「タイプ」フィールドが「長さ/タイプ」フィールドとして使われている点と、オプションが追加された点以外は基本的には同じである。
■プリアンブル
イーサネットのフレームは「プリアンブル」から始まる。これはLANに接続しているインターフェイスにフレーム送信の開始を認識させ、同期をとるタイミングを与えるための信号である。DIXイーサネットでは、サイズが8オクテット(64bit)のフィールドで、1と0が交互に続き、最後の1ビット(64bit目)が1で終わる。
IEEE 802.3ではサイズが7オクテットの「プリアンブル」フィールドと、1オクテットの「SFD(Start Frame Delimiter)」フィールドに分けられている。「プリアンブル」は1と0が交互に続くパターンで、「SFD」は「10101011」というパターンであり、DIXと同じである。プリアンブルを受信中に、その最後が「10101011」となっていることを検出すると、その次のビットから宛先アドレス部が始まると解釈される。プリアンブルは8オクテット分あるが、リピータなどを1段ずつ通過する際に、(内部処理の遅れや、同期回路の起動の遅れなどによって)何ビットか消失することがある。そのため、全体の長さで判断せず、最後の連続する「10101011」によってプリアンブルの終了と宛先アドレス部の始まりを検出することになっている。
プリアンブルのフォーマット
LANに接続しているインターフェイスにフレーム送信の開始を認識させ、同期をとるタイミングを与えるための信号。8オクテット目の最後のビットが“1”になっていることに注意。この最後のオクテットのことを、IEEE 802.3では特にSFDと呼んでいる(DIXイーサネットでは特に名前はない)。プリアンブルは、「1」と「0」の繰り返しであり、その最後が「10101011」になっていると、その次のビットから宛先アドレス部が始まると解釈される。プリアンブルは、8オクテット分あるが、リピータなどを1段ずつ通過する際に、(内部処理の遅れや、同期回路の起動の遅れなどによって)何ビットか消失することがある。そのため全体の長さで判断せず、最後の連続する「10101011」によってプリアンブルの終了と宛先アドレス部の始まりを検出することになっている。
■宛先アドレス
サイズが6オクテット(48bit)のフィールドで、宛先となるステーションのインターフェイスのMACアドレスを設定する。複数のインターフェイス宛てのマルチキャスト・アドレスを設定することもできる。
■送信元アドレス
サイズが6オクテット(48bit)のフィールドで、フレームを送信したインターフェイスのMACアドレスを設定することになっている。上位のプロトコルやラーニング・ブリッジが参照するフィールドである。
■VLANタグヘッダ
サイズが4オクテット(32bit)のフィールドで、VLAN(Virtual LAN)用のタグヘッダを指定することができる。VLANはスイッチング・ハブが利用するもので、IEEE 802.1Qで規定されている。このフィールドはVLANを利用する場合にだけ付加するオプションのフィールドである。VLANとは、1つのスイッチング・ハブの各ポート(もしくはMACアドレス)をグループ分けし、それぞれのグループを独立したLAN(ブロードキャスト・ドメイン)として機能させるメカニズムである。詳細については次回解説する。
■長さ/タイプ
DIXイーサネットでは「タイプ」、IEEE 802.3では「長さ/タイプ」と定義されている、サイズが2オクテット(16bit)分のフィールドである。DIXイーサネットとIEEE 802.3のフレーム・フォーマットで実質的に違うのはこのフィールドだけである。
「タイプ」フィールドは、多重化/多重分離のために、次に続く「データ」フィールドに格納する上位層プロトコルを示すIDを設定する。例えばTCP/IPならば、IPv4(0x0800)やARP(0x0806)などがここに入り、データ部には、IPv4やARPプロトコルのパケットが入ることになる。このIDはSTD2「Assigned Numbers」で参照できる。
IEEE 802.3における「長さ/タイプ」フィールドは、当初は「長さ」フィールドと定義されていて、「データ」フィールド部のサイズ(オクテット数)を指定するフィールドであった。フィールドには「データ」フィールドの最大サイズである1500までしか指定できないため、フィールドの値が1500以下の場合はIEEE 802.3のフレーム、それ以外はDIXイーサネットのフレームと判断でき、イーサネット・インターフェイスはDIXイーサネットとIEEE 802.3の両方をサポートすることができた。
IEEE 802.3が「タイプ」フィールドを「長さ」フィールドに変更した理由は、通信のオーバーヘッドとエラーレートを減らすためであったようだ。IEEE 802.3のフレームは、その上位層としてIEEE 802.2で規定される「LLCパケット」をデータとして転送する。LLCはさまざまなLANで利用する目的で作られたため、LLC中には多重化/多重分離のための「DSAP(Destination Service Access Point)」フィールドがある。これはDIXイーサネットの「タイプ」フィールドと同様な役割を持つので、DIXイーサネットの「タイプ」フィールドを残すと、無駄な重複ができてしまい、通信のオーバーヘッドにつながる。また、DIXイーサネットでは通信路がアイドル状態(信号の無い状態)になるのを見てフレームの最後を判断するため、フレームに続くノイズを拾ってしまい、エラーとなる可能性がある。フレームのサイズが分かっていれば、フレームサイズ以上の信号(ノイズ)を受信することもないため、IEEE 802.3では「タイプ」フィールドを「長さ」フィールドに変更したのであろう。
しかし、TCP/IPはもともとDIXイーサネット形式を利用していたので、STD3「Host Requirements ? Applications」でもDIXイーサネット形式のフレームを推奨しており、ほとんどのイーサネット・インターフェイスは互換性のためにこのフィールドをタイプ・フィールドとして使用している。そのため、IEEE 802.3でも、後に「長さ」フィールドを「長さ/タイプ」フィールドに改訂した。「長さ/タイプ」フィールドはその値が1500以下の場合はデータのサイズ、1536(0x0600)以上の場合はタイプと判断する。1501から1535については未定義となっている。
■データ
「データ」フィールドには、最小46オクテットから最大1500オクテットまでのデータを格納することができる。もし、データが46オクテット未満の場合にはパディング データを付加し46オクテットにする。これは、フレームの全体長(先頭のプリアンブル部は除き、宛先アドレスからFCS部まですべて含んだ長さ)が64オクテット以上になるようにするためである。前回述べたように、この長さはセグメント内での衝突検出を確実に行うために(コリジョンの範囲を決定するために)必要な長さである。
「長さ/タイプ」フィールドに1500以下の値が設定されている場合は、IEEE 802.2のLLCパケットを格納する。しかし、TCP/IPでは一般的にDIXイーサネットのフレームを利用しているため、LLCパケットは使われない。
■FCS(Frame Check Sequence)
フレームのエラーを検出するための4オクテットのフィールド。宛先アドレス、送信元アドレス、長さ/タイプ、データの各フィールドから計算したCRC(Cyclic Redundancy Check)値を設定する。受信側でも同様にCRCを計算し、FCSフィールドの値と一致しない場合はエラーが発生したと判断し、そのフレームを破棄する。
今回のまとめ
- MACアドレスの第1オクテットの最下位ビットが0ならばユニキャスト・アドレス、1ならばグループ・アドレス、48bitがすべて1ならばブロードキャスト・アドレスとなる。
- イーサネットにおけるMACアドレスは、3オクテットのOUI番号と、3オクテットのベンダ独自の管理番号から構成されている。
- イーサネットのフレームは、1と0が繰り返す、8オクテットのプリアンブルから始まる。プリアンブルの最後のオクテットは「10101011」。
- プリアンブルに続いて、宛先MACアドレス、送信元MACアドレスが続き、次に2オクテットの「長さ/タイプ」フィールドが続く。「長さ/タイプ」フィールドは、値が1500以下の場合はデータ部の長さを、1536以上の場合は(データ部にある)上位プロトコルのプロトコル・タイプを、それぞれ表す。
- データ部の最小サイズは46オクテットであり(プリアンブル部を除いて最小でも64オクテットになるようにするため)、それに満たないデータの場合はダミーとなるデータを埋めておく。最大サイズは1500オクテットまでである。
- 最後の4オクテットはFCSであり、ここにはフレームのCRC値を入れておいて、伝送エラーを検出する。
Copyright© Digital Advantage Corp. All Rights Reserved.