イーサネットフレーム (英語 : Ethernet frame )は、有線LAN 規格のイーサネット による通信で処理されるデータ書式のこと。「MACフレーム」とも。
イーサネットの通信データ処理部はMAC と呼び、これはOSI参照モデル の第2層にあたるデータリンク層 に位置する。データリンク層プロトコルでのデータ単位(PDU )を一般に「フレーム 」と呼ぶ。通信はイーサネットの各種物理層規格 における物理信号を利用し、物理層パケット の内部にイーサネットフレームが含まれた形で送受される[ 1] 。
フレーム送付の前に、送信開始の合図としてプリアンブル とSFD と呼ぶ信号を送る。フレームの先頭には宛先と送信元のMACアドレス があり、ネットワーク機器による転送処理判断に使われる。フレームの中央にペイロードがあり、任意の主データが配置できる。フレーム末尾にはフレームチェックシーケンス (FCS)があり、転送中のデータ破損を検出することができる。
なお、以降では「バイト 」の語を8ビット(1オクテット )の意味として用いる。
構造
イーサネットフレームとそれを含む物理層パケット は、バイナリデータで構成されている。IEEE 802.3 では以下の図表に示すフレーム構造を規定している[ 1] 。データは図の左・表の上から順に送信されるが、各バイト内では最下位ビット (LSB)を最初に送る[ 注釈 1] 。
イーサネットの物理層パケット。プリアンブルとSFDを除いた部分がイーサネットフレーム
ここではMTU が1500バイト以下のペイロード長を持つものを示した。ギガビットイーサネット 以降では、ジャンボフレーム と呼ばれるさらに大きなフレームの対応を実装した製品もある。
また、VLANタグはオプションとして括弧で示しており必須ではない。通常は4バイトであるが、二重タグ の場合は8バイトとなる。
プリアンブルとSFD
物理層パケット は、イーサネットフレームを送る前に以下の信号から始まる[ 注釈 2] 。
7バイトのプリアンブル (preamble, 「前置き」の意)
1バイトのSFD (start frame delimiter, 「フレーム開始の区切り目 」の意)
これらの伝送路上のビットパターンは以下のようになる[ 3] 。ここでは左のビットから順に送信される形で記載した[ 注釈 3] 。
10101010 10101010 10101010 10101010 10101010 10101010 10101010 10101011
プリアンブルではビットの交互パターン10
を連続させており、受信側はこれによりビットレベルで容易に同期できる。その後のSFDではこの交互パターンの最後が崩れて11
となり、受信側はこれによりバイトレベルで同期しながらフレームの開始を検出できる[ 4] 。
なお、これらの信号はLSB が先頭となる十六進表現 を使うことがある。特にPHY (物理層デバイス)・MAC (データリンク層デバイス)間の並列バスであるMII を経由する場合などでは、以下のように表す。
100Mbps通信 のMII は4並列バスのため、ニブル値(4ビット値)表現で、プリアンブルは14個の0x5
、SFDは0x5 0xD
の順となる。
1Gbps通信 のGMII は8並列バスのため、バイト値(8ビット値)表現で、プリアンブルは7個の0x55
、SFDは0xD5
となる。
イーサネットヘッダ
フレーム先頭の以下の欄を「イーサネットヘッダ」または「MACヘッダ」と呼ぶ[ 5] [ 6] 。
レイヤ2スイッチ (MACブリッジ)はヘッダの内容を見て転送処理を行っている。その処理動作はIEEE 802.1D で最初に規定され、その後の改版でIEEE 802.1Q に引き継がれている。MACアドレスは、フレームの転送先を判断したり、送信元を記録したりするのに用いる。VLANタグでは、所属するLANと優先度(QoS )が示され、同様に転送先や転送タイミングの判断に用いる。
タイプ/長さ
タイプ/長さの欄は、用途が2種類ある[ 7] 。
この値が1536(0x0600
)以上の場合は、EtherType と解釈される。
この値が1500(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の実装に使われる値
算出方法
順方向(左シフト)
逆方向(右シフト)
CRC多項式
0x04C11DB7
0xEDB88320
CRC検証値
0x38FB2284
0x2144DF1C
CRC検証値の補数
0xC704DD7B
0xDEBB20E3
ビット列を逆順にして演算することがある。フレーム内の他の欄はLSBが先頭に来る形式であるため、FCSもこれに合わせてあらかじめビット列を逆順にして右シフトのCRC多項式を用いるほうが効率が良い。
受信時に送信側と同じ方法でCRCを算出するのではなく、FCSを含む受信フレーム全体にCRC算出を行うことがある。この結果、エラーがなければ常に同じ非ゼロの値が得られるため、これを「CRC検証値」「CRCマジックチェック」などと呼ぶ[ 17] 。
CRC算出の回路実装では、LFSR に記録する値は補数 をとらないことがある。この場合は、送信時や取得時に補数変換する必要がある。
これらの方式により、演算に用いる値は右表のようなバリエーションがある。
フレームの終わり(物理層)
フレームの終わり (EOF: end of a frame) は通常、物理層でのデータストリームの終了シンボルやキャリア信号の消失によって示される。特に、リンク確立中のアイドリング信号(継続的なキャリア)が常に送信されるような物理層規格では、明示的にend of data またはend of stream のシンボルやシーケンスを使うことがある。
パケット間隔
パケット間隔 は、 IFG (interframe gap) または IPG (interpacket gap)とも呼ぶ。送信側はフレーム送信終了後に次のフレームを送信するまで最低96ビット(12バイト)のアイドル状態を維持する必要がある。これもCSMA/CD の物理的制約に基づいて決められている[ 20] 。
種類
イーサネットフレームには歴史的にいくつかの種類がある。主なものを下表に示したが、現在ではこのうち Ethernet II 以外のものはほとんど使われていない。
これら4種はタイプ/長さ欄やペイロード欄の差異によって識別でき、同じ物理媒体上に共存できる。また、いずれもVLANタグがつけられる。
Ethernet II
Ethernet II は、タイプ/長さ 欄をEtherType として使うフレーム。
DEC ・Intel ・Xerox の3社が主に設計・規定したもので、3社の頭文字をとってDIX仕様 とも呼ぶ[ 21] 。1979年の仕様公開から事実上の標準 として広く普及していたが、1997年のIEEE 802.3x で正式に標準化され、この欄をタイプ/長さとして併用することが明記された[ 22] 。
最も一般的な Ethernet IIフレーム (DIXフレーム)
この書式以外の3種はすべてこの欄を長さ(ペイロード長)として使うよう規定されている。この仕様は1983年のIEEE 802.3 初版に基づいており、標準化の際にDIX仕様から変更されたものであるが、1997年の改版時に併用として先祖返りする形となっている。
ノベルIPXカプセル
ペイロード部分に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] 。
IEEE 802.2 LLC カプセル
ペイロード部分にLLC パケットを置くもの。LLCヘッダには、SAP (service access points) と呼ばれる2つのアドレス値が含まれている。制御バイトの値によってコネクションレス型 ・コネクション型の通信モードのどちらでも動作できる。
イーサネットヘッダ
802.2 LLC ヘッダ
ペイロード
宛先MAC
送信元MAC
長さ
宛先SAPアドレス
送信元SAPアドレス
制御
6バイト
6バイト
2バイト
1バイト
1バイト
1-2バイト
任意バイト
この書式は、過去には多くの社内LANでイーサネットとトークンリング やFDDI とのトランスペアレント変換ブリッジ に使われたが、現在一般的なネットワークではほとんど使われない。ノベルのNetWare 4.10以降ではデフォルトのIPX通信にも使われたが、ほとんどはIP 通信に移行している。
IEEE 802.2 SNAP カプセル
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などの物理層規格の値をそのまま採る。一方、「伝送効率」はいくつかの観点で計算されることがあり、いずれも共通の分母を持つ。
ペイロード伝送の効率 = (ペイロード長) ÷ (物理層パケット 長 + パケット間隔長)
ネットワーク運用効率として示される値。VLANタグの有無によって値が変わる。
フレーム伝送の効率 = (フレーム長) ÷ (物理層パケット長 + パケット間隔長)
ネットワークスイッチ 性能として示される値。イーサネットヘッダ を含む。
物理層パケット伝送の効率 = (物理層パケット長) ÷ (物理層パケット長 + パケット間隔長)
チャネル占有率として示される値。プリアンブル ・SFD ・イーサネットヘッダ を含む。
これらの式を用いた伝送効率の計算例を下表に示す。
最短フレーム (タグなし)
最短フレーム (タグつき)
最長フレーム (タグなし)
最長フレーム (タグつき)
サイズ
ペイロード長
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] 。主な異常フレームには以下のようなものがある。
受信フレームのFCSの値がCRCの算出値に一致しないもの。CRC Alignmentエラーとして計上される。
最小フレーム長である64バイトより短いもの。CRCが一致するものはUndersize (不足フレーム)、しないものはFragment (途切れたフレーム)として計上される。後者は一般にコリジョン(衝突) によって発生する。その他の考えられる原因として、ネットワークカード の誤動作、バッファアンダーラン 、デュプレックスの不一致 、ソフトウェアの不具合がある[ 28] 。
最大フレーム長(主に1522バイト)を超えるもの。CRCが一致するものはOversize (超過フレーム), しないものはJabber (饒舌の意)として計上される。前者はジャンボフレーム やVLAN タグフレームに未対応の機器でそれらのフレームを受信した場合など、後者はフレームの終了 を通知・検出できない回路異常などが考えられる。
フレーム終了時の受信ビット数が8の倍数にならない異常や、物理信号が物理層で定義されたシンボルとして認識できない異常などが発生した場合に、PHY がRX_ER通知をMII バスで通知し、これを検出・計上するものがある。
脚注
注釈
^ FCS を除く[ 2] 。
^ プリアンブルとSFDは、LANアナライザ では表示されない。LANアナライザがレイヤ2に渡されたデータ収集する前に、レイヤ1でNIC がこれらを取り除いてしまうためである。プリアンブルとSFDが表示可能なレイヤ2キャプチャを使えば物理的な接続問題の検出もできるがこれは高価である。
^ IEEE 802.3規格書4.2節の記載と同じ。LSB が先頭になるバイト値表現とは異なる点に注意。
^ VLANタグがある場合、42および46バイトの最小値の両方が有効である[ 10] 。
^ "Ethernet I" (イーサネットバージョン1)は8ビットのMACアドレスを使う初期プロトタイプだったが、商用として用いられなかった。
出典
^ a b IEEE 802.3-2022 :section 3.1.1
^ IEEE 802.3-2022, section 3.3, annex 31A
^ IEEE 802.3-2022, section 3.2.1 Preamble field, section 3.2.2 Start Frame Delimiter (SFD) field, section 4.2.5 Preamble generation, section 4.2.6 Start frame sequence
^ IEEE 802.3-2022:section 4.2.5
^ “イーサネットヘッダ ”. IT用語辞典 e-Words . 2023年12月12日 閲覧。
^ “IPアドレスとMACアドレスをひも付ける、「ARP」プロトコルの動きを完全図解 ”. 日経クロステック . 2023年12月12日 閲覧。
^ IEEE 802.3-2022 :§3.2.6
^ “IEEE 802 Numbers ”. IANA (2015年10月6日). 2023年12月12日 閲覧。
^ IEEE 802.3-2022:Annex B.1.2, B.1.3
^ IEEE 802.1Q-2022:Annex G.2.3
^ “IEEE P802.3ac VLAN TAG Task Force ”. 2023年12月12日 閲覧。
^ “IEEE P802.3as Frame Expansion Task Force ”. 2023年12月12日 閲覧。
^ “Cyclic Redundancy Check ” (PDF). hackersdelight.org (2009年7月28日). 2015年5月3日時点のオリジナル よりアーカイブ。2015年6月2日 閲覧。
^ Nanditha Jayarajan (2007年4月20日). “Configurable LocalLink CRC Reference Design ” (PDF). xilinx.com . p. 14. 2014年6月30日 閲覧。
^ IEEE 802.3-2022:section 3.2.9
^ IEEE 802.3-2022:section 4.2.4.1.2
^ “Specification of CRC Routines V4.5.0 R4.1 Rev 3 ”. AUTOSAR . p. 24. 2023年12月11日 閲覧。
^ Charles E. Spurgeon (February 2000). Ethernet: The Definitive Guide . O'Reilly. pp. 41, 47. https://books.google.com/books?id=MRChaUQr0Q0C&printsec=frontcover&source=gbs_ge_summary_r&redir_esc=y#v=onepage&q&f=false 2014年6月30日 閲覧。
^ IEEE 802.3-2022:§40.1.3.1
^ IEEE 802.3-2022:Section 4.2.3.2
^ Drew Heywood; Zubair Ahmad (2001). Drew Heywood's Windows 2000 Network Services . Sams. p. 53. ISBN 0-672-31741-9
^ IEEE 802.3x-1997 . IEEE. https://standards.ieee.org/ieee/802.3x/1082/
^ Don Provan (17 September 1993). "Ethernet Framing" . Newsgroup : comp.sys.novell . Usenet: 1993Sep17.190654.13335@novell.com 。 (HTML-formatted version Archived 18 April 2015 at the Wayback Machine .) — a classic series of Usenet postings by Novell's Don Provan that have found their way into numerous FAQs and are widely considered the definitive answer to the Novell Frame Type usage.
^ A Standard for the Transmission of IP Datagrams over IEEE 802 Networks (英語). February 1988. doi :10.17487/RFC1042 . RFC 1042 。
^ IEEE 802.11-2016
^ RFC 5180 , Annex A.1. Ethernet
^ RFC 2819 , Section 5. Definitions
^ “Troubleshooting Ethernet ”. Cisco Systems. 2016年8月13日 閲覧。
速度 全般 組織 媒体 歴史的な規格 応用 トランシーバ インターフェース 機器