Ethernetの標準規格(IEEE 802.3)MAC層のフレーム構造
転送パケットのフレーム構造がこの第3章で定義されています。
図9にそのフレーム構造を示しますが、フレームは以下の7つの部分に分けて定義されています。 ネットワーク関係の技術では、8ビットの集合単位をバイト(Byte)ではなくオクテット(Octet)として表現することが多く、IEEE規格でもオクテット表現ですの覚えておいて下さい 。
プリアンブル部(Preamble)
クロック同期のためのトレーラ部分で、"1"と"0"の交互繰返しパターンが続きます。7オクテット(56ビット)長のフィールドです。
フレーム開始部(Start Frame Delimiter)
フレームの開始を示す1オクテット(8ビット)長のフィールドです。パターンは"10101011"です。多くのハードウェアでは、オクテットパターンの検出ではなく最後の連続した"1"の検出でその代用としていますので、現実的には62ビットのプリアンブル部に2ビットのフレーム開始部(SFD部)という解釈もあることを考慮しておいて下さい。
送信先アドレス部(Destination Address)
フレームの送信先アドレス用のフィールドです。規格では、16ビット長と48ビット長の2種のアドレスが定義されていますが実際には48ビット長しか使用されていません。アドレス部のフォーマットを図に示します。このアドレスは一般にはMACアドレスと呼ばれるもので、最初の24ビットがメーカ固有の番号となっています。この番号の登録管理はIEEEで行われ、各メーカは自社の番号を取得後、残りの24ビット部分を自己管理します。通常は、製品種別とその製造シリアル番号の組み合わせで管理されることが多いようです。
このMACアドレスの唯一性が保証されているのは非常に重要ですので、最近のLAN機器はすべてROMもしくはEPROMにMACアドレスが書き込まれています。一昔前は、MACアドレスをファイルからロードするものやバッテリバックアップRAMに格納したものがあり、それらに起因したMACアドレスからみのトラブルも多かったようです。もちろん、現在でもソフトウェアにより任意のMACアドレスの設定は可能ですが、デバッグ時の緊急対処に限るべきであり、恒常的に使用するべきではありません。 図10にメーカ別の固有コードの例を示しておきます。
送信元アドレス(Source Address)
フレームの送信元アドレス用のフィールドです。アドレスの定義は、送信先アドレスと同じで、16ビット長と48ビット長の2種のアドレスが定義されていますが実際には48ビット長しか使用されていません。
データ長部(Length)
データフィールドの有効データ長をオクテット単位で指定する2オクテット(16bit)のフィールドです。ネットワーク上には上位オクテットから送信されます。このフィールドはIEEE 802.3とEthernetの代表的な違いの一つです。Ethernetでは、このフィールドはプロトコルを指定するタイプフィールドでした。これに関する詳細については、EthernetとIEEE 802.3の違いのところで説明しますが、プロトコルのタイプ定義はすべてデータの最大長である1500オクテットより大きい値となっているので、両者の共存が可能であると同時に、このフィールドを使用して両者の区別も可能です。
データ領域部(Data and PAD)
データが格納されるフィールドで、46オクテットから1,500オクテットまでの大きさを持つ可変長フィールドです。データが46オクテットに満たない場合は、PADと呼ばれるダミーデータを付加して46オクテットになるように補正し、最少フレーム長を確保します。このPADのパターンには特に規定がなく、任意のパターンを使用できます。
フレームチェック部(Frame Check Sequence)
フレームの伝送誤り検出用に付加される4オクテット(32ビット)のフィールドで、バースト誤り検出能力が高いと言われているでAutoDIN II多項式によって生成されるCRC(Cyclic Redundancy Check)値が格納されます。CRCの計算範囲は、送信先・送信元アドレス部、データ長部、データ部(PAD含む)です。受信側でも同様のアルゴリズムでCRC値を計算して比較し、一致しない場合はエラーフレームとして廃棄されます。
フレームの各オクテットは、フレームチェック部を除いて下位ビット側からネットワーク上に送出されます。フレームチェック部だけは上位ビットから送出され、32ビットのデータが上位ビットから下位ビットへ連続した形を保ちます。図11にフレームのビット送信順について示しておきます。
また、以下の項目に一つでも該当する場合は無効フレームとして廃棄し、上位層であるLLC層にデータを渡してはいけないことが定義されています。但し、エラー集計等の管理用としての利用は許可されています。
- データ長フィールドの値から類推されるフレーム長と実際のフレーム長に矛盾がある場合
- プリアンブル部を除いたフレーム長がオクテットの整数倍になっていない場合(余分なビットはドリブルビットと呼ばれます)。
- CRCエラーとなった場合。