フレームの中身
データ・リンク層が送信側のネットワーク層からパケットを受け取ると、パケットに
データ・リンク・ヘッダー
とトレーラー
を付加してフレームの中に格納する。したがって、フレームは中に入られたパケット
と(ヘッダー中の)
制御情報
、(トレーラ中の)チェックサム
とから構成されている。
トレーラとは
イーサネットでは、データの前に附加するヘッダに加えて、データの後にトレーラが附加されます。このトレーラは、
FCS(Frame Check Sequence)フィールド
と呼ばれ、送信途中でエラーが起こっていないかをチェックする機能
を担っています。送信側でFCSフィールドにエラーチェック用にCRC(Cyclic Redundancy Check)
という値を入れて送信し、受信側でその値を使用してエラーが起こっていないかを判断します。
フレームを物理層へ/からの送受信するための手続き
次いでフレームは相手のマシン上のデータ・リンク層へと伝送される。フレームを送出させるための
to_physical_layer
という手続きと、フレームを受信するためのfrom_physical_layer
という手続きがあるものとしよう。これらの手続きを計算して付け加えたり検査したりする(これらはハードウェアで行われる)ので、本項で開発するプロトコルの観点からそれについて心配する必要はない。
フレームを受信時チェックサムが正しくない、正しいかのどちらかがデータリンク層に伝わる
フレームが受信側に到着すると受信側はチェックサムを計算する。フレーム中のチェックサムが正しくない(すなわち送信誤りがあった)時はには、データ・リンク層にそのことが伝わる(event = cksum_err)。また入力フレームが損傷なく到着した場合には、データ・リンク層にその旨が伝わる(event = frame_arrival)ので、from_physical_layerを用いてフレームを獲得して検査する。
パケット以外はネットワーク層に渡さない
受信側のデータ・リンク層は損傷ないフレームを得ると直ちにヘッダーの制御情報を調べすべてが正しければ、パケットの部分をネットワーク層に渡す。決してヘッダーがネットワーク層に渡されることはない。
ネットワーク層とデータリンク層を分けることで変更による影響をなくす
ネットワーク層にフレーム・ヘッダーを決して渡さないのにはちゃんとした理由がある。
ネットワーク層のプロトコルとデータ・リンク層のプロトコルを完全に分離する
ためである。ネットワーク層がデータ・リンク・プロコトルやフレーム・フォーマットについて何も知らなければ、ネットワーク層のソフトウェアを何も変更することなくこれらのものを変更することができる
。これは、コンピュータに新たなNICを設置するたびに起こる。ネットワーク層とデータ・リンク層の間の厳格なインタフェースを用意することで、異なる層のプロコトルを独立に進化させる
ことができるため、設計作業がずっと簡単になる