イーサネットフレーム(英語: Ethernet frame)は、有線LAN規格のイーサネットによる通信で処理されるデータ書式のこと。「MACフレーム」とも。
イーサネットの通信データ処理部はMACと呼び、これはOSI参照モデルの第2層にあたるデータリンク層に位置する。データリンク層プロトコルでのデータ単位(PDU)を一般に「フレーム」と呼ぶ。通信はイーサネットの各種物理層規格における物理信号を利用し、物理層パケットの内部にイーサネットフレームが含まれた形で送受される[1]。
フレーム送付の前に、送信開始の合図としてプリアンブルとSFDと呼ぶ信号を送る。フレームの先頭には宛先と送信元のMACアドレスがあり、ネットワーク機器による転送処理判断に使われる。フレームの中央にペイロードがあり、任意の主データが配置できる。フレーム末尾にはフレームチェックシーケンス(FCS)があり、転送中のデータ破損を検出することができる。
なお、以降では「バイト」の語を8ビット(1オクテット)の意味として用いる。
イーサネットフレームとそれを含む物理層パケットは、バイナリデータで構成されている。IEEE 802.3では以下の図表に示すフレーム構造を規定している[1]。データは図の左・表の上から順に送信されるが、各バイト内では最下位ビット(LSB)を最初に送る[注釈 1]。
内容 | サイズ[Byte] | 範囲 | |
---|---|---|---|
プリアンブル | 7 | ↑ 物理層パケット (72–1534) ↓ | |
SFD | 1 | ||
宛先MACアドレス | 6 | ↑ イーサネットフレーム (64–1526) ↓ | |
送信元MACアドレス | 6 | ||
(VLANタグ) | (4 or 8) | ||
タイプ/長さ | 2 | ||
ペイロード | 46-1500 | ||
FCS | 4 | ||
パケット間隔 | 12 |
ここではMTUが1500バイト以下のペイロード長を持つものを示した。ギガビットイーサネット以降では、ジャンボフレームと呼ばれるさらに大きなフレームの対応を実装した製品もある。
また、VLANタグはオプションとして括弧で示しており必須ではない。通常は4バイトであるが、二重タグの場合は8バイトとなる。
物理層パケットは、イーサネットフレームを送る前に以下の信号から始まる[注釈 2]。
これらの伝送路上のビットパターンは以下のようになる[3]。ここでは左のビットから順に送信される形で記載した[注釈 3]。
10101010 10101010 10101010 10101010 10101010 10101010 10101010 10101011
プリアンブルではビットの交互パターン10
を連続させており、受信側はこれによりビットレベルで容易に同期できる。その後のSFDではこの交互パターンの最後が崩れて11
となり、受信側はこれによりバイトレベルで同期しながらフレームの開始を検出できる[4]。
なお、これらの信号はLSBが先頭となる十六進表現を使うことがある。特にPHY (物理層デバイス)・MAC (データリンク層デバイス)間の並列バスであるMIIを経由する場合などでは、以下のように表す。
0x5
、SFDは0x5 0xD
の順となる。0x55
、SFDは0xD5
となる。フレーム先頭の以下の欄を「イーサネットヘッダ」または「MACヘッダ」と呼ぶ[5][6]。
レイヤ2スイッチ(MACブリッジ)はヘッダの内容を見て転送処理を行っている。その処理動作はIEEE 802.1Dで最初に規定され、その後の改版でIEEE 802.1Qに引き継がれている。MACアドレスは、フレームの転送先を判断したり、送信元を記録したりするのに用いる。VLANタグでは、所属するLANと優先度(QoS)が示され、同様に転送先や転送タイミングの判断に用いる。
タイプ/長さの欄は、用途が2種類ある[7]。
0x0600
)以上の場合は、EtherTypeと解釈される。0x05DC
)以下の場合は、ペイロード長と解釈される。1500と1536の間の値は未定義。
ほとんどのイーサネットフレームがEtherTypeを用いる。EtherTypeは、ペイロード欄にカプセル化されているデータが何のプロトコルかを示すもので、例えば0x0800
はIPv4パケット、0x0806
はARPフレーム、0x86DD
はIPv6フレーム、0x8100
はVLANタグつきフレームを表す[8]。このときフレーム長は明示されていないが、FCSやEOFなどによってフレーム末尾を検出することでフレーム長がわかるようになっている。
ペイロード長を用いるフレームの実例については#種類の節を参照のこと。
ペイロードは「MACクライアントデータ」とも呼び、通信に使う主データを配置する。任意のプロトコルを配置することができ、多くの場合は第3層にあたるIPパケットのデータがIPヘッダを含んだ形で格納される。
最小ペイロード長は、VLANタグがある場合は42バイト、ない場合は46バイトである。この値は、フレーム長が最低64バイトになるように設定されており、初期イーサネットでのCSMA/CDの衝突検出にかかる時間によって決まった[9]。実際のペイロードが最小ペイロード長よりも短い場合は、最小ペイロード長になるまでパディングされる[注釈 4]。
最大ペイロード長は初期には1500バイトと規定されていたが、1998年にIEEE 802.3acでVLANタグ対応のため1504バイト[11]、2006年にIEEE 802.3asで1982バイトに拡張されている[12]。規格外の独自仕様であるジャンボフレームでは、さらに大きなペイロード長に対応できる実装もある。
フレームチェックシーケンス (FCS) は、送信側がフレーム末尾につける4バイト値で、これにより受信側でフレーム全体のデータ破損を検出して破棄することができる。また、受信側でペイロード長がわからなくてもFCSを検証することでフレームの末尾がわかるようになる[13][14]。
FCSの値は、32ビットの巡回冗長検査 (CRC) であり、イーサネットフレームからFCS欄を除いた部分(送信元MAC・宛先MAC・長さ/タイプ・ペイロード)を入力として計算する。この計算ではCRC-32の標準多項式0x04C11DB7
を用いる。CRCの値は、最上位ビット (ビット31) を最初に、最下位ビットを最後に送信するようにFCS欄に割り付けられる[15]。このフレーム受信時には、CRCを同様に計算し、フレーム内のFCSと比較するものとしている[16]。
上記の規定と等価な実装方法として、以下のようなアレンジが施されることがある。
算出方法 | 順方向(左シフト) | 逆方向(右シフト) |
---|---|---|
CRC多項式 | 0x04C11DB7 |
0xEDB88320
|
CRC検証値 | 0x38FB2284 |
0x2144DF1C
|
CRC検証値の補数 | 0xC704DD7B |
0xDEBB20E3
|
これらの方式により、演算に用いる値は右表のようなバリエーションがある。
フレームの終わり (EOF: end of a frame) は通常、物理層でのデータストリームの終了シンボルやキャリア信号の消失によって示される。特に、リンク確立中のアイドリング信号(継続的なキャリア)が常に送信されるような物理層規格では、明示的にend of dataまたはend of streamのシンボルやシーケンスを使うことがある。
パケット間隔は、 IFG (interframe gap) または IPG (interpacket gap)とも呼ぶ。送信側はフレーム送信終了後に次のフレームを送信するまで最低96ビット(12バイト)のアイドル状態を維持する必要がある。これもCSMA/CDの物理的制約に基づいて決められている[20]。
イーサネットフレームには歴史的にいくつかの種類がある。主なものを下表に示したが、現在ではこのうち Ethernet II 以外のものはほとんど使われていない。
種類 | タイプ/長さ 欄の値 |
ペイロードの 先頭2バイト |
備考 |
---|---|---|---|
Ethernet II[注釈 5] | ≥ 1536 | 任意 | DIX仕様とも。今日最も一般的に使用される。 |
ノベルIPXカプセル | ≤ 1500 | 0xFFFF |
ベンダ固有書式。 |
IEEE 802.2 LLC カプセル | ≤ 1500 | SAPアドレス | IEEE 802.3初期仕様の1つ。 |
IEEE 802.2 SNAP カプセル | ≤ 1500 | 0xAAAA |
IEEE 802.3初期仕様の1つ。 |
これら4種はタイプ/長さ欄やペイロード欄の差異によって識別でき、同じ物理媒体上に共存できる。また、いずれもVLANタグがつけられる。
Ethernet IIは、タイプ/長さ欄をEtherTypeとして使うフレーム。
DEC・Intel・Xeroxの3社が主に設計・規定したもので、3社の頭文字をとってDIX仕様とも呼ぶ[21]。1979年の仕様公開から事実上の標準として広く普及していたが、1997年のIEEE 802.3xで正式に標準化され、この欄をタイプ/長さとして併用することが明記された[22]。
この書式以外の3種はすべてこの欄を長さ(ペイロード長)として使うよう規定されている。この仕様は1983年のIEEE 802.3初版に基づいており、標準化の際にDIX仕様から変更されたものであるが、1997年の改版時に併用として先祖返りする形となっている。
ペイロード部分にIPXパケットを置くもの。1983年にノベルがIEEE 802.3策定中の仕様をもとにしてNetWareなどに独自実装したプロトコルで、1990年代半ばまで使われた。
イーサネットヘッダ | ノベル独自ペイロード | |||
---|---|---|---|---|
宛先MAC | 送信元MAC | 長さ | 識別子 | データ |
6バイト | 6バイト | 2バイト | 2バイト0xffff
|
任意バイト |
長さ欄のすぐ後にIPXパケットが始まる。これは規格準拠ではないが、ペイロードの先頭2バイトを0xFFFF
としており、次節のIEEE 802.2 LLC カプセルでそのパターンになることはごく稀であるため、実用上は他の書式と識別可能だった。ただし、DECnetの初期の形式では、この仕様が混乱を招いたものがある。
IP普及がまだ進んでいなかった時代は、NetWareでデフォルトだったこの形式によるIPX通信がイーサネット通信のほとんどを占めていた[23]。
ペイロード部分にLLCパケットを置くもの。LLCヘッダには、SAP (service access points) と呼ばれる2つのアドレス値が含まれている。制御バイトの値によってコネクションレス型・コネクション型の通信モードのどちらでも動作できる。
イーサネットヘッダ | 802.2 LLC ヘッダ | ペイロード | ||||
---|---|---|---|---|---|---|
宛先MAC | 送信元MAC | 長さ | 宛先SAPアドレス | 送信元SAPアドレス | 制御 | |
6バイト | 6バイト | 2バイト | 1バイト | 1バイト | 1-2バイト | 任意バイト |
この書式は、過去には多くの社内LANでイーサネットとトークンリングやFDDIとのトランスペアレント変換ブリッジに使われたが、現在一般的なネットワークではほとんど使われない。ノベルのNetWare4.10以降ではデフォルトのIPX通信にも使われたが、ほとんどはIP通信に移行している。
SNAP (Subnetwork Access Protocol)は、IEEE 802.2 LLCを拡張し、特にEtherTypeを格納する欄を設けてプロトコルの識別ができるようにしたもの。
LLCヘッダのSAPがともに値0xAA
の場合、LLCヘッダの後に以下のようなSNAPヘッダを置くことができる。SNAPヘッダでは、プロトコルID欄にEtherType値を入れることができる。
イーサネットヘッダ | 802.2 LLC ヘッダ | SNAP拡張 | ペイロード | |||||
---|---|---|---|---|---|---|---|---|
宛先MAC | 送信元MAC | 長さ | 宛先SAP | 送信元SAP | 制御 | OUI | プロトコルID | |
6バイト | 6バイト | 2バイト | 1バイトAA
|
1バイトAA
|
1-2バイト | 3バイト | 2バイト | 任意バイト |
1987年にリリースされたMac OSのEthertalkでこの書式を使用していた。
1988年のRFC 1042では、IEEE 802.2 LLCのSAP/SNAPフレームに、IPv4通信をカプセル化する仕様が規定された[24]。FDDI・トークンリング・IEEE 802.11(EtherTypeを使用する5.9 GHz帯域を除く)[25]などで使用されているが、イーサネットではほとんど実装されていない。同様にIPv6もIEEE 802.2 LLC SAP/SNAPを用いたイーサネット通信が可能であるが、これもまたほとんど使用されていない。
イーサネットのスループットは以下の式で表せる。
ここで、「回線速度」はファーストイーサネットなら100Mbps、ギガビットイーサネットなら1Gbpsなどの物理層規格の値をそのまま採る。一方、「伝送効率」はいくつかの観点で計算されることがあり、いずれも共通の分母を持つ。
これらの式を用いた伝送効率の計算例を下表に示す。
最短フレーム (タグなし) |
最短フレーム (タグつき) |
最長フレーム (タグなし) |
最長フレーム (タグつき) | ||
---|---|---|---|---|---|
サイズ | ペイロード長 | 46バイト | 42バイト | 1500バイト | 1500バイト |
フレーム長 | 64バイト | 64バイト | 1518バイト | 1522バイト | |
伝送効率 | ペイロード率 | 54.76% (=46/84) | 50.00% (=42/84) | 97.53% (=1500/1538) | 97.28% (=1500/1542) |
フレーム率 | 76.19% (=64/84) | 76.19% (=64/84) | 98.70% (=1518/1538) | 98.70% (=1522/1542) | |
物理層パケット率 | 85.71% (=72/84) | 85.71% (=72/84) | 99.22% (=1526/1538) | 99.22% (=1530/1542) |
スループットはこれらの伝送効率を用いて計算することができる。例えば1000BASE-Tでタグつきフレームを通信させる場合の最大スループットは、上表の最右列の値を1Gbps倍して、それぞれ972.8 Mbps, 987.0 Mbps, 992.2 Mbpsと得る。
スイッチ性能としてのスループットは、pps (パケット毎秒)で表現することもあり、 回線速度 ÷ 8 ÷ (物理フレーム長 + パケット間隔長) で得られる。1Gbps通信の最短フレームの場合、1G / 8 / 84 = 1488095 ppsと得られ、この値がベンチマークテストに用いられる[26]。
IETFではRMONと呼ばれるLAN管理機能を規定しており、その一環としてフレームの統計情報の収集機能では異常な書式のフレームを定義している[27]。主な異常フレームには以下のようなものがある。