誤り検出(アラヤ検出)とは | 意味や読み方など丁寧でわかりやすい用語解説

誤り検出(アラヤ検出)の意味や読み方など、初心者にもわかりやすいように丁寧に解説しています。

作成日: 更新日:

読み方

日本語表記

誤り検出 (アヤマリケンシュツ)

英語表記

Error detection (エラーディテクション)

用語解説

誤り検出とは、コンピュータシステムにおけるデータ通信や記憶装置へのデータの読み書きの際に、データが元の状態から変化していないか、つまり誤り(エラー)が発生していないかを検知するための技術である。デジタルデータは「0」と「1」のビット列で構成されており、電気的なノイズや物理的な媒体の劣化など、様々な要因によってビットが反転してしまう可能性がある。例えば、送信した「01000001」というデータが、ノイズの影響で「01010001」として受信されてしまうといった事態が起こりうる。このようなデータの破損は、プログラムの誤動作や情報の損失に直結するため、データの完全性を保証する誤り検出は極めて重要な役割を担っている。誤り検出の基本的な考え方は、送信する元のデータに、誤りを検出するための冗長な情報(付加データ)を付け加えることにある。受信側は、受信したデータと付加データを用いて一定の計算を行い、その結果からデータに誤りがあるかないかを判断する。

誤り検出の代表的な手法として、パリティチェック、チェックサム、巡回冗長検査(CRC)などが挙げられる。パリティチェックは、最も単純で基本的な誤り検出方式である。この方式では、データブロック内の「1」のビット数を数え、その数が偶数か奇数かに基づいて、パリティビットと呼ばれる1ビットの情報を付加する。偶数パリティ方式では、「1」の総数が偶数になるようにパリティビットを「0」または「1」に設定する。例えば、データが「1011001」の場合、「1」の数は4つで偶数なので、パリティビットは「0」となる。もしデータが「1010001」であれば、「1」の数は3つで奇数なので、パリティビットは「1」となり、全体の「1」の数を偶数に揃える。受信側では、データとパリティビットを含めた全体の「1」の数を数え、それが奇数であれば誤りが発生したと判断する。奇数パリティ方式はその逆で、「1」の総数が奇数になるようにパリティビットを付加する。パリティチェックは実装が容易である一方、検出能力には限界がある。例えば、2つのビットが同時に反転するような誤りが発生した場合、「1」の個数の偶奇は変わらないため、誤りを検出することができない。

チェックサムは、パリティチェックよりも信頼性の高い手法である。この方式では、データを一定の大きさのブロックに分割し、各ブロックを数値とみなして合計値を計算する。この合計値そのもの、あるいは合計値から算出した特定の値をチェックサムとしてデータに付加する。受信側は、受信したデータから同様の手順で合計値を計算し、送信されてきたチェックサムと比較する。両者の値が一致すればデータは正常、一致しなければ誤りがあると判断する。単純な加算だけでなく、1の補数和を用いるなど、計算方法にはいくつかのバリエーションが存在する。チェックサムは、複数のビットで誤りが発生した場合でも検出できる可能性がパリティチェックよりも高いが、偶然にも計算結果が一致してしまうような特定のパターンの誤りを見逃す可能性は残っている。

巡回冗長検査(CRC: Cyclic Redundancy Check)は、現在広く利用されている非常に強力な誤り検出方式である。イーサネットやWi-Fiといったネットワーク通信、HDDやSSDなどのストレージデバイスで採用されている。CRCは、送信するデータをビット列とみなし、これを特定の数式である「生成多項式」で割り算するという演算を行う。そして、その割り算で得られた「余り」をCRC値として計算し、元のデータに付加して送信する。受信側では、受信したデータ全体(元のデータとCRC値)を、送信側と全く同じ生成多項式で割り算する。この設計では、データに誤りがなければ、割り算の結果がちょうど割り切れる(余りが0になる)ようになっている。もし余りが出た場合は、通信経路上でデータに誤りが発生したと判断する。CRCは、1ビットの誤りはもちろん、連続して発生するバーストエラーなど、より複雑な誤りに対しても極めて高い検出能力を持つため、信頼性が要求される多くのシステムで標準的に利用されている。

注意すべき点として、これらの誤り検出技術は、あくまで誤りの存在を「検出」するだけであり、誤ったデータを正しいデータに「訂正」する機能は持たない。誤りが検出された場合、システムは通常、送信元に対してデータの再送を要求する(ARQ: Automatic Repeat reQuest)といった対応を取る。誤りを検出するだけでなく、訂正まで行う技術は誤り訂正符号(ECC: Error Correction Code)と呼ばれ、メモリや衛星通信など、再送が困難または非効率な場面で利用される。システムエンジニアとしては、データの信頼性を確保する上で、誤り検出がどのような仕組みで機能し、どのような種類があるのかを理解しておくことが不可欠である。

関連コンテンツ

誤り検出(アラヤ検出)とは | 意味や読み方など丁寧でわかりやすい用語解説 | いっしー@Webエンジニア