誤り検出訂正
(誤り検出 から転送)
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2024/04/03 08:00 UTC 版)
誤り検出訂正(あやまりけんしゅつていせい)またはエラー検出訂正 (error detection and correction/error check and correct) とは、データに符号誤り(エラー)が発生した場合にそれを検出、あるいは検出し訂正(前方誤り訂正)することである。検出だけをする誤り検出またはエラー検出と、検出し訂正する誤り訂正またはエラー訂正を区別することもある。また改竄検出を含める場合も含めない場合もある。誤り検出訂正により、記憶装置やデジタル通信・信号処理の信頼性が確保されている。
誤り検出
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/06/01 19:49 UTC 版)
「Transmission Control Protocol」の記事における「誤り検出」の解説
後述の#チェックサムの計算も参照。シーケンス番号と確認応答は、パケットの重複、喪失パケットの再送、データの順序通りの並べ替えなどを扱っている。受信したパケットの内容が正しいことを確認するため、TCPにはチェックサムフィールドがある。チェックサムフィールドは設定必須の項目であり省略できない。 TCPチェックサムは、現在の標準から見れば弱い。データリンク層のビット誤り率が高ければ、TCPチェックサムとは別の誤り検出訂正機能が必要である。TCP/IPの下層であるデータリンク層には一般にCRCなどのもっと強力な検査機構があり、TCPチェックサムの弱さを一部補っている(例えば、PPPやイーサネット)。しかし、だからといって16ビットのTCPチェックサムが無駄というわけではない。実際、CRCで保護された通信路でパケットに誤りが残ることはよくあるが、エンドツーエンドの16ビットTCPチェックサムがそういった単純な誤りを捉えている。これはエンドツーエンド原理が機能している例である。
※この「誤り検出」の解説は、「Transmission Control Protocol」の解説の一部です。
「誤り検出」を含む「Transmission Control Protocol」の記事については、「Transmission Control Protocol」の概要を参照ください。
誤り検出
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2019/01/24 02:34 UTC 版)
パリティビットを用いた誤り検出を「パリティチェック」と呼ぶ。 パリティビットも含めて奇数個のビットが転送中に変化した場合、パリティビットは正しくないことになり、転送中に誤りが発生したことを示す。従って、パリティビットは誤り検出符号であるが、どのビットが変化したかを指摘できないため、誤り訂正符号ではない。データはパリティビットを付与された単位全体が捨てられ、再送される。雑音の多い伝送路では、転送が成功するまで非常に時間がかかったり、全く転送できないということが考えられる。パリティビットは最善の方式ではないが、1ビットだけ追加するだけで済む点やいくつかのXORゲートだけで生成できる点が利点である。誤り訂正のできる符号の例としては、ハミング符号がある。 例えば、4ビットの値 1001 のパリティビットは以下のように計算され、転送されるとする(送受信値の左端のビットがパリティビット)。 1^0^0^1 = 0 : A にてevenパリティを計算01001 : A から送信01001 : B で受信1^0^0^1 = 0 : B にてevenパリティ検証 ~(1^0^0^1) = 1 : A にてoddパリティを計算11001 : A から送信11001 : B で受信~(1^0^0^1) = 1 : B にてoddパリティ検証 この機構により1ビットの誤り検出が可能となる。これは、1ビットの値が変化すると、予め定めた奇遇性と '1' の数が合わなくなるためである。上記の例では、B が計算したパリティ値と受信したパリティビットの値は一致しており、1ビット誤りが起きていないことを示している。次の例では 4ビットの値 0010 を even パリティで送信して誤りが発生した場合を示す(送受信値の左端のビットがパリティビット)。 0^0^1^0 = 1 : A にてevenパリティを計算10010 : A から送信*** 転送中に誤り発生 ***11010 : B で受信1^0^1^0 = 0 : B にてevenパリティ検証 B が計算したパリティ値 (0) は、受信したパリティビットの値 (1) と一致しないため、誤りが発生していることが分かる。次の例も同じ値だが、パリティビット自体が誤りによって変化した場合を示す。 0^0^1^0 = 1 : A にてevenパリティを計算10010 : A から送信*** 転送中に誤り発生 ***00010 : B で受信0^0^1^0 = 1 : B にてevenパリティ検証 この場合も B が計算したパリティ値 (1) と受信したパリティビットの値 (0) が一致しないので、誤りが検出される。 この技法には限界がある。パリティビットは奇数個のビットの誤りしか検出できない。偶数個のビットで誤りが発生した場合、パリティ値が変化しないため、誤りを検出できない(誤り検出訂正参照)。上記と同じ例で、偶数個のビットの誤りが発生した場合を示す。 0^0^1^0 = 1 : A にてevenパリティを計算10010 : A から送信*** 転送中に誤り発生 ***11011 : B で受信1^0^1^1 = 1 : B にてevenパリティ検証 B が計算したパリティ値 (1) と受信したパリティビットの値 (0) が一致してしまうので、2ビットの誤りを検出できない。
※この「誤り検出」の解説は、「パリティビット」の解説の一部です。
「誤り検出」を含む「パリティビット」の記事については、「パリティビット」の概要を参照ください。
- 誤り検出のページへのリンク