FCS
フレームの末尾に付ける誤り検出用の値。イーサネットでは4オクテットのCRC値が使われる。
イマシルちゃんの解説
データって、電線や光ファイバを通るうちにノイズで1ビットだけ化けちゃうこともあるんだ。
それに気づけないと、壊れたデータをそのまま使っちゃうよね。
そこで送る側は、フレームの中身から計算した「チェック用の値」を最後にくっつけて送るよ。
受け取った側も同じ計算をして、値が合わなければ「途中で壊れたんだ!」ってわかる。
この最後にくっつける値がFCSなんだ!
より深い解説
定義
FCS(Frame Check Sequence)は、フレーム の伝送中に発生したビット誤りを検出するために、フレームの末尾(トレーラ)に付加される値である。イーサネット(IEEE 802.3)では、CRC-32(32ビットの巡回冗長検査)で計算した4オクテットの値を用いる。
計算範囲
イーサネットのFCSは、次のフィールドを対象に計算される。
- 宛先アドレス
- 送信元アドレス
- 長さ/タイプ
- MACクライアントデータ
- パッド
プリアンブルとSFDは計算範囲に含まれない。フレーム長(宛先アドレスからFCSまで)にはFCS自身の4オクテットが含まれる点にも注意する。
CRCの仕組み
CRC(Cyclic Redundancy Check)は、送信するビット列を多項式とみなし、あらかじめ決めた生成多項式で割った余りを検査値とする方式である。
- 送信側は、データのビット列を生成多項式で割り、その余りをFCSとして付加する。
- 受信側は、受け取ったデータで同じ計算を行う。
- 計算結果が受信したFCSと一致しなければ、誤りがあると判断する。
CRC-32は、32ビット以下の長さのバースト誤り(連続したビット誤り)をすべて検出できる。パリティチェックやチェックサムよりも検出能力が高く、ハードウェアで高速に計算できるため、データリンク層で広く使われている。
誤りを検出したときの動作
イーサネットでは、FCSが一致しないフレームは破棄されるだけで、データリンク層での再送は行わない。失われたデータの回復は、TCPなどの上位層が担う。FCSはあくまで誤り「検出」の仕組みであり、誤り「訂正」は行わない。
なお、無線LAN(IEEE 802.11)では、FCSで誤りがないと確認できたフレームに対して受信側がACKを返し、ACKが届かなければ送信側が再送する。同じFCSでも、使われ方はデータリンク層の方式によって異なる。
FCSエラーの原因
スイッチやルータのインタフェース統計でFCSエラー(CRCエラー)が増えている場合、次のような物理層の問題が疑われる。
- ケーブルの劣化や断線、規格外の長さ
- コネクタの接触不良
- 電磁ノイズ
- 対向機器との通信モード(全二重/半二重)の不一致