# イーサネットについて イーサネットというと、物理構造(有線ケーブル)のイメージが強いですが、要はイーサネットの仕様に沿って利用することになるデバイス達の振る舞い部分についての規程というのもあったりします。 ## イーサネットのフレーム仕様について(前段) 少しややこしいですが、イーサネットに関わる規格は2つあります。 - IEEE802.3 - 物理層(レイヤー1)とデータリンク層(レイヤー2)の規格 - 物理層の規格は、イーサネットのケーブルやコネクタ、信号の電圧などを定義しています - データリンク層の規格は、イーサネットフレームの構造やMACアドレスのフォーマットを定義しています - DIX - イーサネットのフレームフォーマットを定義した規格 - DIXは、DEC(デジタル・イクイップメント・コーポレーション)、Intel、Xeroxの頭文字を取ったものです - DIXは、イーサネットの初期のバージョンである10BASE5や10BASE2に基づいています 実際には後者(DIX仕様)が広く使われています。 構造的にはほぼ同じですが、『形式(DIX)』を指すか『サイズ(802.3)』を指すかで区別されていると見れば大丈夫です。 ## フレーム仕様(本編) ![フレーム構造](https://upload.wikimedia.org/wikipedia/commons/thumb/4/42/Ethernet_frame.svg/2880px-Ethernet_frame.svg.png) 出典: [Wikipedia](https://ja.wikipedia.org/wiki/%E3%82%A4%E3%83%BC%E3%82%B5%E3%83%8D%E3%83%83%E3%83%88%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0) - ここからがイーサネットの信号とわかるように、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仕様のフレーム)であれば、それ自体がフレーム長として解釈されます その部分だけ切り出せば済む話 [^1]: ペイロード(payload)はデータリンク層におけるデータ実体の部分です。ここの部分を切り出すことで、上位層へ伝えるべきデータを取り出すことができます。なおペイロードという用語は、シャトルやロケットなどの積載物を指す用語でもあったりします(積み込める容量がいくつといった具合にも使われる)。