イーサネットフレーム

コンピュータネットワークにおいて、イーサネットフレーム（英語: Ethernet frame）とは、イーサネットにおけるフレームであり、データリンク層のプロトコルデータユニットである。イーサネットフレームは、基礎となるイーサネット物理層（英語版）の転送機構を使用して転送される。つまり、イーサネットリンク上のパケットは、ペイロードとしてイーサネットフレームを転送する。 イーサネットフレームの前には、プリアンブルと開始フレーム識別子（SFD: start frame delimiter）が続く。これらは物理層のイーサネットパケットの一部である。各イーサネットフレームはイーサネットヘッダで始まる。イーサネットヘッダの最初の2つのフィールドは宛先と送信元のMACアドレスである。フレームの中央部はペイロードデータである。ペイロードデータには、フレームで伝送される他のプロトコル（Internet Protocolなど）の任意のヘッダを含む。フレームは、フレームチェックシーケンス(FCS)で終わる。これは、データの転送中の破損を検出するために使用される32ビットの巡回冗長検査(CRC)である。 伝送路上のデータパケットとそのペイロードとしてのフレームは、バイナリデータで構成されている。イーサネットは最上位オクテットを先頭にしてデータを送信する。ただし、各オクテット内では、最下位ビットが最初に送信される。 イーサネットフレームの内部構造は、IEEE 802.3に規定されている。以下の表は、MTUが1500オクテットまでのペイロードサイズについて、送信されたときのイーサネットパケットと内部のフレームを示している。ギガビットイーサネットなどの高速イーサネットの実装では、ジャンボフレームと呼ばれるより大きなフレームに対応している。 オプションの802.1Qタグは、フレーム内の追加スペースを消費する。このオプションのフィールドサイズは上記の表の括弧内に示されている。IEEE 802.1ad（英語版） (Q-in-Q) では、1つのフレーム内に複数のタグを含めることができる。上記の表にはこのオプションは示されていない。 イーサネットパケットは、7オクテットのプリアンブルと1オクテットの開始フレーム識別子（SFD: start frame delimiter）で始まる。プリアンブルは、1と0のビットが交互に現れる56ビット（7バイト）のパターンで構成されているため、ネットワーク上のデバイスは受信クロックを簡単に同期させて、ビットレベルの同期をとることができる。その後に続くSFDで、バイトレベルの同期を提供し、新しい着信フレームをマークする。大きなシンボルの代わりにシリアルビットを送信するイーサネットの変種では、プリアンブルの（コード化されていない）伝送路上のビットパターンは、フレームのSFD部分と合わせて10101010 10101010 10101010 10101010 10101010 10101010 10101010 10101011となり、ビットは左から右へ順番に送信される。 SFDは8ビット（1バイト）の値で、イーサネットパケットの最初のフィールドであるプリアンブルの終わりと、イーサネットフレームの始まりを示す。SFDはプリアンブルのビットパターンを崩し、実際のフレームの開始を知らせるように設計されている。SFDの直後に宛先MACアドレスが続く。宛先MACアドレスは、イーサネットフレームの最初のフィールドである。SFDは二進数シーケンス10101011（イーサネットLSBの最初のビット順序で0xD5、10進213）である。 イーサネットMACを物理媒体に接続するには、物理層トランシーバ回路（PHY）が必要である。PHYとMACとの間の接続は物理媒体とは無関係であり、媒体独立インターフェース（MII、GMII、RGMII、SGMII、XGMII）のバスを使用する。ファストイーサネットトランシーバチップはMIIバスを使用する。これは4ビット（1ニブル）幅のバスであるため、プリアンブルは14個の0x5として表され、SFDは（ニブルとして）0x5 0xDとなる。ギガビットイーサネットトランシーバチップは8ビット幅のインターフェイスであるGMIIバスを使用するので、プリアンブルとSFDは0x55 0x55 0x55 0x55 0x55 0x55 0x55 0xD5（バイト単位）になる。 ヘッダには、宛先と送信元のMACアドレス（それぞれ6オクテット）、EtherTypeフィールド、およびオプションでIEEE 802.1QタグまたはIEEE 802.1ad（英語版）タグがある。 EtherTypeフィールドの長さは2オクテットであり、2つの異なる目的のために使われる。この値が1500以下の場合は、オクテット単位のでペイロードのサイズを意味し、1536以上の場合は、フレームのペイロードにカプセル化されているプロトコルを示すEtherTypeとして使用されることを示す。EtherTypeとして使用される場合、フレームの長さはパケット間隔と有効なフレームチェックシーケンス（FCS）の位置によって決まる。 IEEE 802.1Qタグ、IEEE 802.1adタグ（オプション）は4オクテットのフィールドで、仮想LANのメンバーシップとIEEE 802.1pプライオリティを示す。タグの最初の2オクテットはタグプロトコル識別子 (TPID: Tag Protocol IDentifier) と呼ばれ、フレームが802.1Qまたは802.1adタグ付きであることを示す。802.1Qの場合のTPIDは0x8100、802.1adの場合は0x88a8である。 最小ペイロードサイズは、802.1Qタグが存在する場合は42オクテット、存在しない場合は46オクテットである。実際のペイロードが最小ペイロードよりも小さい場合は、最小ペイロードサイズになるまでパディングバイトが追加される。最大ペイロードサイズは1500オクテットである。非標準のジャンボフレームでは、最大ペイロードサイズを大きくすることができる。 フレームチェックシーケンス (FCS) は、受信側でフレーム全体内の破損データの検出を可能にする4オクテットの巡回冗長検査 (CRC) である。FCSの値は、保護されたMACフレームフィールド（送信元アドレスと宛先アドレス、長さ/タイプフィールド、MACクライアントデータ、パディング。つまり、FCS以外の全てのフィールド）の関数として計算される。 CRCコードを含む受信フレームデータに対してCRCアルゴリズムを実行すると、CRCは多項式で除算されたデータの剰余であるため、エラーのない受信データに対しては常にゼロになる。ただし、この手法ではエラーの検出に失敗する可能性があり、末尾にゼロがあるデータも同じゼロ残差になる。これを回避するために、ペイロードデータの最後に付加される前に送信側によってFCSは補数が取られる（ビットごとに反転される）。この方法では、データが正しく受信されたとき、アルゴリズムの結果は常に0xC704DD7B（マジックナンバーまたはCRC32剰余と呼ばれる）になる。これにより、FCSフィールドが実際に開始される場所を知らなくても、フレームを受信してFCSを検証することができる。 フレームの終わり (EOF: end of a frame) は通常、物理層でのデータストリームの終わりのシンボル、またはキャリア信号の消失によって示される。例えば10BASE-Tでは、受信側はキャリアの消失によって送信されたフレームの終わりを検出する。後の仕様の物理層では、特にキャリアがフレーム間で継続的に送信される場合に、曖昧さを避けるために明示的なend of dataまたはend of streamのシンボルやシーケンスを使用する。例えば8b/10bによるギガビットイーサネットでは、フレームが送信される前後に特別なシンボルを送信する。 パケット間隔 (IPG: interpacket gap) は、パケット間のアイドル時間である。パケットが送信された後、送信側は次のパケットを送信する前に最低96ビット（12オクテット）のアイドル状態を維持する必要がある。 イーサネットフレームにはいくつかの種類がある。 Ethernet IIフレーム（イーサネットバージョン2またはDIXフレームともいう）は、Internet Protocolで直接使用されることが多い、今日最も一般的に使用されている種類である。 ノベル raw IEEE 802.3 non-standard variation frame IEEE 802.2 Logical Link Control (LLC) frame IEEE 802.2 Subnetwork Access Protocol（英語版） (SNAP) frame 異なるフレームタイプは異なるフォーマットとMTU値を持つが、同じ物理媒体上に共存できる。右の表のようにフレームの種類を区別することができる。 さらに、4つのイーサネットフレームの種類全てに、オプションでIEEE 802.1Qタグを含めることができ、それが属するVLANとその優先順位（Quality of Service）を識別できる。このカプセル化はIEEE 802.3ac（英語版）で定義されており、最大フレームを4オクテット増加させる。 IEEE 802.1Qタグは、送信元アドレスとEtherType/Lengthフィールドの間に配置される。タグの最初の2オクテットは、タグプロトコル識別子 (TPID: Tag Protocol IDentifier) 0x8100である。これはタグがない場合のEtherType/Lengthフィールドと同じ場所にあるため、EtherType値が0x8100であることはフレームがタグ付けされていることを意味し、実際のEtherType/Lengthはタグの後ろに配置される。タグの後ろの2オクテットはタグ制御情報(TCI: Tag Control Information)（IEEE 802.1pの優先度（Quality of Service）とVLAN ID）である。タグの後には、上記の種類のいずれかによる、フレームの残りの部分が続く。 Ethernet IIフレーム（設計の主要な参加者であるDEC、Intel、XeroxからDIXイーサネットともいう）は、宛先・送信元MACアドレスの前に、2オクテットのEtherTypeフィールドを定義する。EtherTypeは、フレームデータによってカプセル化された上位層プロトコルを識別するのに使用する。例えば、EtherType値0x0800は、フレームにIPv4データグラムが含まれていることを示す。同様に、0x0806のEtherTypeはARPフレーム、0x86DDはIPv6フレームを示し、0x8100は前述の通りIEEE 802.1Qタグの存在を示す。 この業界標準規格が正式なIEEE標準化プロセスを経るにつれて、EtherTypeフィールドは新しい802.3標準規格のデータ長フィールドに変更された。受信者はまだフレームを解釈する方法を知る必要があるので、規格では長さに続いて、タイプを指定するためにIEEE 802.2ヘッダが要求された。何年も後に、802.3x-1997規格、および802.3規格のそれ以降のバージョンでは、両方の種類のフレーミングが正式に承認された。Ethernet IIフレームは、その単純さと低いオーバーヘッドにより、イーサネットLANでは最も一般的である。 Ethernet IIのフレーミングを使用するフレームとオリジナルの802.3フレーミングを使用するフレームを同じイーサネットセグメントで使用できるようにするには、EtherType値を1536（0x0600）以上にする必要がある。802.3フレームのペイロードフィールドの最大長が1500オクテット（0x05DC）であるため、その値が選択された。従って、フィールドの値が1536以上の場合、フレームはEthernet IIフレームでなければならず、そのフィールドはEtherTypeを表す。それが1500以下の場合、それはIEEE 802.3フレームでなければならず、そのフィールドは長さを表す。1500と1536の間の値は未定義である。この規約により、ソフトウェアはフレームがEthernet IIフレームかIEEE 802.3フレームかを判断することができ、同じ物理媒体上で両方の規格を共存させることができる。 ノベルのraw 802.3フレームフォーマットは、初期のIEEE 802.3の開発作業に基づくものである。ノベルはこれを出発点として、イーサネットを介した独自のIPX（英語版）ネットワークプロトコルの初の実装を作成した。raw 802.3フレームフォーマットでは、LLCヘッダを使用せず、長さフィールドのすぐ後にIPXパケットが開始する。これはIEEE 802.3規格には準拠していないが、IPXでは常に最初の2オクテットを0xFFとするので（IEEE 802.2 LLCでそのパターンになることは理論的にはあり得るが、極めて可能性が低い）、他のイーサネット実装と同じ物理媒体上で共存できる。ただし、DECnetの初期のいくつかの形式は、この仕様によって混乱している。 ノベルのNetWareは、1990年代半ばまでデフォルトでこのフレームタイプを使用しており、NetWareが広く普及しIPがまだ普及していなかった頃には、世界のイーサネットトラフィックのほとんどはIPXを伝送するraw 802.3フレームフォーマットを介していた。NetWare 4.10以降、IPXを使用するときのNetWareのデフォルトはLLCによるIEEE 802.2（NetWareフレームタイプEthernet_802.2）である。 OSI参照モデル用に設計されたプロトコルの中には、コネクション型とコネクションレス型の両方のネットワークサービスを提供するIEEE 802.2 LLCカプセル化の上で直接動作するものもある。 IEEE 802.2 LLCのカプセル化は、IPを介したNetWareへの移行がまだ完了していない大企業のNetWare環境を除いて、現在、一般的なネットワークでは広く使用されていない。過去には、多くの企業ネットワークで、IEEE 802.2を使用して、イーサネットとトークンリングやFDDIネットワーク間のトランスペアレント変換ブリッジをサポートしていた。 IEEE 802.2 LLCのSAP/SNAPフレームに、IPv4トラフィックをカプセル化するためのインターネット標準がある。FDDI、トークンリング、IEEE 802.11（EtherTypeを使用する5.9 GHz帯域を除く）やその他のIEEE 802 LANで使用されているが、イーサネットではほとんど実装されていない。IPv6は、IEEE 802.2 LLC SAP/SNAPを使用してイーサネット経由で送信することもできるが、これもまたほとんど使用されていない。 802.2 LLCヘッダを調べることによって、その後にSNAPヘッダが続くかどうかを判断することが可能である。LLCヘッダには、OSIの用語で「サービスアクセスポイント」(SAPs: service access points) と呼ばれる2つの8ビットアドレスフィールドが含まれている。送信元と宛先の両方のSAPが値0xAAに設定されている場合、LLCヘッダの後にSNAPヘッダが続く。SNAPヘッダを使用すると、EtherType値を全てのIEEE 802プロトコルで使用でき、プライベートプロトコルIDスペースにも対応できる。 IEEE 802.3x-1997では、MACアドレスの後の16ビットフィールドを長さフィールドまたはタイプフィールドとして使用することを明示的に許可するようにIEEEイーサネット規格が変更された。 Mac OSは、イーサネット上のAppleTalk v2プロトコルスイート (EtherTalk) にIEEE 802.2 LLC+SNAPカプセル化を使用する。 イーサネットのプロトコルオーバーヘッドをパーセンテージ（IPGを含むパケットサイズ）として次の式で計算できる。 Protocol overhead = Packet size − Payload size Packet size {\displaystyle {\text{Protocol overhead}}={\frac {{\text{Packet size}}-{\text{Payload size}}}{\text{Packet size}}}} イーサネットのプロトコル効率は次の式で計算できる。 Protocol efficiency = Payload size Packet size {\displaystyle {\text{Protocol efficiency}}={\frac {\text{Payload size}}{\text{Packet size}}}} 最大効率は、最大許容ペイロードサイズで達成され、その値は以下のように計算される。 1500 1538 = 97.53 % {\displaystyle {\frac {1500}{1538}}=97.53\%} タグなしフレームの場合、パケットサイズは最大ペイロード1500オクテット+プリアンブル8オクテット+ヘッダ14オクテット+トレーラ4オクテット+最小パケット間隔12オクテットに=1538オクテットである。最大効率は以下のように計算される。 1500 1542 = 97.28 % {\displaystyle {\frac {1500}{1542}}=97.28\%} 802.1Q VLANタグが使用されているとき、スループットは効率から計算できる。 Throughput = Efficiency × Net bit rate {\displaystyle {\text{Throughput}}={\text{Efficiency}}\times {\text{Net bit rate}}\,\!} 物理層の正味のビットレート（ワイヤビットレート）はイーサネットの物理層規格に依存し、10 Mbit/s、100 Mbit/s、1 Gbit/s、10 Gbit/sのいずれかである。その結果、100BASE-TXイーサネットの最大スループットは、802.1Qなしで97.53 Mbit/s、802.1Qありで97.28 Mbit/sになる。 チャネル利用率(Channel utilization)は、プロトコル効率とよく混同される概念である。これは、ペイロードまたはオーバーヘッドのいずれかで、送信されるデータの性質を無視して、チャネルの使用のみを考慮する。物理層は、リンクチャネルや機器はデータフレームと制御フレームの違いを区別できない。チャネル利用率は次のように計算できる。 Channel utilization = Time spent transmitting data Total time {\displaystyle {\text{Channel utilization}}={\frac {\text{Time spent transmitting data}}{\text{Total time}}}} 合計時間(total time)は、チャネルに沿ったラウンドトリップ時間、ホストでの処理時間、およびデータと確認応答の送信時間を考慮したものである。データの送信に費やされた時間(time spent transmitting data)には、データと確認応答が含まれる。 ラントフレーム(runt frame)は、IEEE 802.3の最小長64オクテットより短いイーサネットフレームである。ラントフレームは一般に衝突によって引き起こされる。その他の考えられる原因として、ネットワークカードの誤動作、バッファアンダーラン、デュプレックスの不一致（英語版）、ソフトウェアの不具合がある。