[画像のクリックで拡大表示]
[画像のクリックで拡大表示]
[画像のクリックで拡大表示]
[画像のクリックで拡大表示]

単純なパリティ・チェックはバーストに弱い

 単純なパリティ・チェックには大きな欠点があります。同じブロック内のビット・エラーが二つあると,誤りを検出できなくなるのです。実際の通信ではビット・エラーは1ビット単位で独立に起こるのではなく,連続して起こる傾向があります。このような誤りをバースト・エラーと呼びます。

 パリティ・チェックに少し工夫を加え,バースト・エラーを検出する方法もあります。データを2次元に並べて縦と横それぞれでパリティをチェックする垂直・水平パリティと呼ばれる手法がそれです。しかし,この方式は,データに対して誤り検出符号の比率が増えるので通信の効率が悪くなります。

 それで,実際の通信では巡回冗長符号(CRCシーアールシー:cyclic redundancy code)というバースト・エラーに強い誤り検出方式が広く使われています。CRCもデータのビット列に加えて,チェック用のビットを加えて送ります。受け手側ではデータのビット列とチェック用のビット列を決められた計算式を使い,その結果からビット・エラーを調べます。パリティ・チェックと異なるのは,チェック用のビット列を計算する方法です。

 パリティ・チェックでは,一つのブロックに対して検査用のビットを一つだけしか加えません。そのため,バースト・エラーを検出する精度を上げようとすると,パリティを計算する一つのブロックの長さを短くするしかありません。さらに垂直・水平パリティのような手法を併用すると,送るデータのチェック用ビットの比率が増え,通信の効率が落ちます。要するに,パリティ・チェックはバースト誤りが多い通信には向きません。CRCはパリティ・チェックのこうした問題を解決し,より効率的な誤り検出技術として考案されました。

効率的に誤りを発見するCRC

 CRCでは,送信するデータのビット列を生成多項式せいせいたこうしきと呼ばれる計算式に当てはめ,短いチェック用のビット列を算出し,データの末尾に付けて送ります(pict.3[拡大表示])。受け手側も同じ計算式を使い,計算結果が合っていればエラーがないと判別するわけです。

 送信するデータがどんな長さでも,CRCを計算することは可能です。生成多項式は,長いバースト・エラーでも検出できるように工夫されたものがいくつか標準化されています。たとえば,HDLCエッチディーエルシーというプロトコルで使われている「CRC-16」は,16ビットのチェック・ビットを作り出す生成多項式です。

 CRC-16を使うとデータ内の(1)1ビット誤り,(2)2ビット誤り,(3)誤ったビット数が奇数である誤り,(4)長さが17ビットより短いバースト誤り——のすべてを検出できます。さらに17ビットのバースト誤りの99.997%,18ビット以上なら99.998%も検出できます。

 CRCで使う生成多項式の計算式は複雑なので今回は説明しません。興味がある人は通信の参考書などで確認するといいでしょう。

次へ 上 中 下