ネットワーク

パリティチェックとは

2024年7月17日

パリティチェック

パリティチェックとは、データの誤り検出方式のひとつで、送信するビット列に対して、パリティビットと呼ばれるビットを付加し、データの誤りを検出する方式です。

ネットワーク上を流れるデータは、途中でノイズなどが入ることで波形が変わり、通信相手に正しいデータが届かないことがあります。

そこで、パリティチェックやCRC(巡回冗長検査)などを用いて、誤りを検出したり、訂正したりします。

パリティビットを付加する方法には「偶数パリティ」と「奇数パリティ」があります。

偶数パリティとは

偶数パリティは、ビット列の中の「1」の数が「偶数」になるように、パリティビットをセットします。

例えば、次の図は偶数パリティのイメージ例です。

偶数パリティ

ビット列「0100001」は「1」の数がすでに「偶数」なので、パリティビットに「0」をセットします。

それに対し、ビット列「0110001」は「1」の数が「奇数」なので、「偶数」になるように、パリティビットに「1」をセットします。

送信側で「1」の数が「偶数」になるように設定し、受信側は「1」の数が「偶数」であるか確認します。そして、ビット列の中の「1」の数が「奇数」の場合、誤りと判断します。

ただし、偶数パリティでできることは「1ビットの誤り」を検出するだけで、偶数個のビット誤りは検出できません。また、どの「ビットが誤りか」まではわかりません。

奇数パリティとは

奇数パリティは、ビット列の中の「1」の数が「奇数」になるように、パリティビットをセットします。

例えば、次の図は奇数パリティのイメージ例です。

奇数パリティ

ビット列「0100001」は「1」の数が「偶数」なので、「奇数」になるように、パリティビットに「1」をセットします。

それに対し、ビット列「0110001」は「1」の数がすでに「奇数」なので、パリティビットに「0」をセットします。

送信側で「1」の数が「奇数」になるように設定し、受信側は「1」の数が「奇数」であるか確認します。そして、ビット列の中の「1」の数が「偶数」の場合、誤りと判断します。

ただし、奇数パリティでできることは「1ビットの誤り」を検出するだけで、偶数個のビット誤りは検出できません。また、どの「ビットが誤りか」まではわかりません。

偶数パリティや奇数パリティでは、どのビットが誤りかまでは判断できないので、誤り訂正は行えません。

水平垂直パリティチェック

パリティビットには、水平方向に付加する「水平パリティ」と、垂直方向に付加する「垂直パリティ」があります。

そして、水平と垂直の2方向にパリティビットを付加するのが「水平垂直パリティ」です。

次の図は、水平垂直パリティチェックのイメージ例です。(※偶数パリティを使用)

水平パリティと垂直パリティ

水平垂直パリティチェックは、1ビットの誤りであれば、位置を特定でき、誤り訂正が行えます。

1ビットの誤り

水平垂直パリティチェックで、1ビットの誤りがあった場合、どのように訂正するのか流れを説明してきます。

例えば、次の図のように1ビットが反転(0→1に反転)したとします。

誤り検知の例_1ビット

今回の例では「偶数パリティ」を使っているので、受信側は「1」の数が「偶数」であるか確認します。

確認した結果、次の図のように特定の「行」と「列」に誤りを検出しました。

誤り検知の例_1ビットを訂正

水平と垂直のパリティチェックの結果、1ビットの誤りであれば、位置が特定でき、誤り訂正が行えます

2ビットの誤り

続いては、水平垂直パリティチェックで、2ビットの誤りがあった場合の流れを説明してきます。

例えば、次の図のように2ビットが反転(0→1に反転)したとします。

誤り検知の例_複数ビット

今回の例では「偶数パリティ」を使っているので、受信側は「1」の数が「偶数」であるか確認します。

確認した結果、次の図のように複数の「行」と「列」に誤りを検出しました。

誤り検知の例_複数ビット 誤りを検出

水平と垂直のパリティチェックの結果、ある程度の範囲は特定できても、正確な位置までは特定できません。

以上より、2ビット以上の誤りがある場合、誤り訂正はできません

helpful