Works by

Ren's blog

@rennnosuke_rk 技術ブログです

【NW】イーサネット② イーサネットのフレームフォーマット

前置き

コンピュータ間で通信を行うとき、その通信はプロトコルと呼ばれる規約に沿ってデータのやり取りを行います。プロトコルの種類は多岐にわたりますが、現代ではほとんどの場合TCP/IPと呼ばれるプロトコル群の中から利用されます。とはいっても利用されるプロトコルは一つではなく、複数のプロトコルをセットにして採用します。

プロトコルが複数選ばれるのには理由があり、それはTCP/IPが「階層モデル」と呼ばれるプロトコルのモデルを採用しているからです。階層モデルは通信に必要な処理を階層的に分類したモデルで、一番上の層ではアプリケーションに関する情報の受け渡しを担当、その下の層では通信の信頼性に関する情報の受け渡しを担当・・・といったように、通信に必要な処理を層ごとに分担しています(そして各層の処理を実現するプロトコルを決めます)。

この辺の話は以前の記事にもまとめたので、参照していただけると嬉しいです。

rennnosukesann.hatenablog.com

この階層モデルでは送信するデータを上位層から下位層へと受け渡していき*1、最終的に電気や光の信号として相手に送信するのですが、下位層にデータを受け渡すタイミングで追加のデータを付加していきます(下記記事参照)。このデータをヘッダと呼び、その階層(のプロトコル)で必要となる情報を含んでいます。ヘッダの含む情報を見ていけば、そのプロトコルが何をしているのかがわかるはずです。

rennnosukesann.hatenablog.com

そこで、今回はリンク層における規格の代表格であるイーサネットののヘッダを見ていこうと思います。 イーサネットプロトコルでこそありませんが、物理媒体の仕様のみならず送受信するデータのフォーマットについてやフレームチェックについても規定しているので、実質プロトコルとして扱われている雰囲気を感じます。

イーサネットの種類

もともと、イーサネットXerox社によって考え出された通信方式「Ethernet」でした。その後、Xerox社はEthernetの仕様を公開し、旧DEC社とインテル社を開発に加え「DIX」と呼ばれる仕様を策定しました。さらにその後、DIXが普及しIEEEによって規格化がなされました(IEEE802.3)。そのため、後者のイーサネットを「IEEE802.3 Ethernet」と呼ぶ場合があります。

イーサネットのフレームフォーマット

プリアンブル

f:id:rennnosukesann:20180721095323p:plain

イーサネットのフレームの先頭には、1/0が交互に並んだビット配列が付きます。これをプリアンブルと呼びます。プリアンブルはイーサネットフレームの開始を示し、末尾が「11」のSFD(Starg Frame Delimiter)と呼ばれるフィールドが来たらそれ以降がフレームデータの内容となります。プリアンブルのサイズは8オクテット(=8ビット×8)からなり、プリアンブルによって送信先ホスト(のNIC)が同期をとることが可能となります。

Ethernet(DIX)フレームフォーマット

f:id:rennnosukesann:20180721095332p:plain

Xerox社・旧DEX社・インテル社によるEthernetのフォーマットです。
Eathenetフレームフォーマットはヘッダ、データ本体、FCSからなります。
ヘッダ内部にはあて先MACアドレス、送信元MACアドレス、データ部で採用している上位層プロトコルのタイプの番号が入ります。

タイプ番号はこちらのページにまとめられています。

FCSイーサネットフレームが壊れていないかどうかをチェックするためのフィールドです。イーサネットフレームがノイズなどの影響で壊れた場合、送信側・受信側で計算したFCSの値が異なってくるため、フレームの破損を検出することができます。

IEEE802.3(+802.2)フレームフォーマット(LLC+SNAP)

f:id:rennnosukesann:20180721095342p:plain

IEEEによって規格化されたEthernetのフォーマットです。
ヘッダにはあて先・送信元MACアドレスに加え、フレーム長、LLC、SNAPといった情報が含まれています。 フレーム長はその名の通り、フレームの長さを示しています。

LLCとSNAPは、データリンクに置ける「媒体アクセス制御」と「論理リンク制御」という概念に関わってきます。 データリンク層は、更に細かく分けると「媒体アクセス制御」と「論理リンク制御」の二層に分けることができます。媒体アクセス制御は、データリンクの種別(FDDIイーサネットなど)によって独自に決まるヘッダ制御を指します。一方、論理リンク制御はデータリンクの種別を問わない、共通するヘッダ制御を指します。LLCやSNAPは、この論理リンク制御情報を含めるヘッダであり、上位層プロトコルなどの情報を含んでいます。

LLC

f:id:rennnosukesann:20180721111434p:plain

LLCは

  • DSAP
  • SSAP
  • CTRL

の3つの情報からなります。

DSAP(Destination Service Access Point)

あて先のネットワーク層プロトコルを識別するためのフィールドです。

SSAP(Source Service Access Point)

送信元のネットワーク層プロトコルを識別するためのフィールドです。

CTRL(Controll)

データリンクレベルでのコネクション確立・フロー制御を行うためのフィールドです。

SNAP

f:id:rennnosukesann:20180721111443p:plain

SNAPヘッダは3オクテットのベンダコードと、2オクテットのタイプフィールドからなります。
タイプフィールドはDIXのタイプフィールドと同じ扱いをされます。

参考

マスタリングTCP/IP

イーサネット - Wikipedia

tech.nikkeibp.co.jp

*1:あくまで主流で、他のやりかたもあるかもしれない