ネットワークの分野に触れたことがある人なら誰でも知っているであろうデータリンク層の代表格であるイーサネット。
ざっくりとしたことは知っていても、パケット構造など細かい部分までは覚えていないという方が多いのではないでしょうか。
まさに私がそれです(笑
今回はデータリンクの通信で使われるイーサネットフレームやヘッダについて勉強し直したので、そのことについてお話していきます。
ネットワークの道へと進もうとしている方、Wiresharkなどを使ってパケット解析したいというハッカー志向な方はぜひ最後まで見ていってください。
イーサネットフレームフォーマット
レイヤー3以降で使用されるTCP/IPではパケットと呼ばれますが、データリンク層であるレイヤー2ではパケットと呼ばずにフレームと呼びます。
データリンク層で使用されるフレームのフォーマットはこのようなものです。
これがおそらく一番よく使われているイーサネットフレームフォーマットです。
ちなみに、以下のようなIEEE802.3で規格化されたイーサネットフレームフォーマットというものも存在します。
こちらはデータ部分が少し減って、その分LLCやSNAPが入っております。
これらのイーサネットフレームフォーマットのうち、データより左側がイーサネットヘッダになります。
では、それぞれの要素について見ていきましょう。
MACアドレス
通常のTCP/IPではIPアドレスを用いて通信を行いますが、データリンク層ではMACアドレスを用いて通信を行います。
MACアドレスとは、その機器に割り振られたユニークなアドレスです。
自身のMACアドレスと宛先となる相手のMACアドレスをヘッダ部分にくっつけて通信を行います。
タイプ
イーサネットのヘッダに含まれるタイプですが、こちらは送信されるデータにどのようなプロトコルが使用されているか識別するための情報がコードとして格納されています。
具体的には、IPv4であれば0x0800、ARPであれば0x0806のようになってます。
(これらはすべて16進数で表記されます。)
データ
送信されるデータの本体です。
FCS
FCSとはFrame Check Sequenceのことです。
フレームにエラーがないか・壊れてないかをチェックします。名前の通りですね。
このFCSには、フレーム全体(宛先MACアドレス、送信元MACアドレス、タイプ、データの各フィールド)から計算したCRC(Cyclic Redundancy Check)という値を格納します。
そして、フレームを受信した際、受信側でも同様にCRCを計算し、送信されてきたFCSの値と比較します。
もし不一致の場合はエラーと判断して、そのフレームは破棄されます。
プリアンブルとは
イーサネットフレームの構造は先程説明しましたが、実際イーサネットフレームが送信される前には、先頭へ更にプリアンブルというものをくっつけて送信します。
送信時にデータリンク層から物理層へと送られるタイミングでくっつけて、受信時は物理層からデータリンク層へと送られるタイミングで外れるので、どちらかというと物理層の要素が強いですね。
ちなみに、プリアンブルはデータリンク層と物理層の間の処理のためWireshark等でキャプチャすることができません。
プリアンブルの中身
プリアンブルは1と0を交互に7オクテット並べて、8オクテットの末尾を1にしたものになります。
具体的には、10101010の固まりを7個並べた後に10101011をくっつけたものです。この8オクテット目(10101011)のことをSFD(Start Frame Delimiter)と呼びます。
これがプリアンブルの中身です。
このプリアンブルは通信相手のNIC(Network Interface Card)と同期を取るために使われます。
イーサネットフレーム構造の解説まとめ
今回はイーサネットフレームの構造についてお話してきました。
これらはCCNPやネットワークスペシャリストの受験のためにも必要な知識でもありますし、実際Wireshark等でパケットキャプチャをした際にこれらの知識があると多少理解が早くなるのではないかと思います。
今までこのようなパケットの構造については避けてきましたが、これからはもっと踏み込んで学んでいきたいと思いますので、またこのようにお話していきます。