イーサネットについて
イーサネットというと、物理構造(有線ケーブル)のイメージが強いですが、要はイーサネットの仕様に沿って利用することになるデバイス達の振る舞い部分についての規程というのもあったりします。
イーサネットのフレーム仕様について(前段)
少しややこしいですが、イーサネットに関わる規格は2つあります。
IEEE802.3
物理層(レイヤー1)とデータリンク層(レイヤー2)の規格
物理層の規格は、イーサネットのケーブルやコネクタ、信号の電圧などを定義しています
データリンク層の規格は、イーサネットフレームの構造やMACアドレスのフォーマットを定義しています
DIX
イーサネットのフレームフォーマットを定義した規格
DIXは、DEC(デジタル・イクイップメント・コーポレーション)、Intel、Xeroxの頭文字を取ったものです
DIXは、イーサネットの初期のバージョンである10BASE5や10BASE2に基づいています
実際には後者(DIX仕様)が広く使われています。 構造的にはほぼ同じですが、『形式(DIX)』を指すか『サイズ(802.3)』を指すかで区別されていると見れば大丈夫です。
フレーム仕様(本編)
出典: Wikipedia
ここからがイーサネットの信号とわかるように、7オクテット(=バイト)のプリアンブルと1オクテットのSFD信号が最初につきます、一般にこの部分はイーサネットのフレームとして認識されません
10101010 10101010 10101010 10101010 10101010 10101010 10101010(プリアンブル) 10101011(SFD)
その後にイーサネットヘッダが続きます
6オクテットの宛先MACアドレス
6オクテットの送信元MACアドレス
2オクテットのタイプフィールド(プロトコル識別子)
十進数で1536以上(0x0600)の値が入る場合: ペイロードのデータの種類を示します。(DIX仕様はこの値で認識されます) 例:
0x0800: IPv4
0x0806: ARP
0x86DD: IPv6
1500(0x05DC)以下の値が入る場合: ペイロードの長さを示します。(IEEE802.3仕様はこの値で認識されます)
実データと終端
46〜1500オクテットのデータフィールド(ペイロード[1])
データフィールドやペイロードと高尚な名前がついていますが、本来送りたかったデータ(の断片)のことです
最小値が46なのは、イーサネットフレームの最小値が64オクテット(46+6+6+2とFCSの4で合計64)とするためです
FCS(4オクテット)
フレームチェックシーケンス
CRC32でフレームの整合性を確認するためのフィールド
受信側はFCSを計算し、送信側のFCSと比較して、エラーがないか確認します
終端はどのように検出するか
終端の4オクテットがFCSとして扱われるので、終端を検出することは重要である
受信側は、信号のための搬送波の消失部分でデータの終了と判断して直前の4オクテットをFCSとします
なおタイプフィールドが10進数で1500以下(802.3仕様のフレーム)であれば、それ自体がフレーム長として解釈されます
その部分だけ切り出せば済む話