基本情報技術者の勉強 データの誤りチェック
今回はデータの誤りチェックについて紹介していきます。
コンピュータの中ではデータを 0 と 1 の集合で取り扱っています。
一つのコンピューター内のみで取り扱うのであればあまり問題はないように思うかもしれませんが、
別のコンピューターにデータを送信するにはどうしたらよいでしょうか?
例えば、ケーブルを用いてデータを送るとします。
ケーブルの中は 0 と 1 を表す電気信号が流れていますが、当然きれいな波形を描いているわけではありません。
また伝送する距離が長くなればなるほど、電気信号は弱まってしまい、元のデータを維持するのが難しくなってしまいます。
このようなデータの誤りを防ぐためにデータの誤り制御というものがあります。
パリティチェック
パリティチェックという誤り制御では、送信するデータにパリティビットというビットを付加します。
このパリティビットというのは検査用で、このビットを確認することでデータの誤りの有無を確認します。
パリティチェックにはパリティビットの付け加え方により二種類あります。
もとのデータのビット列にパリティビットを加えた新しいビット列の 1 の数を偶数にするか奇数にするかという決まり事を作ります。
偶数にする場合を偶数パリティと言います。
これは偶数パリティの例です。
偶数パリティとあらかじめ決めておけば、このビット列は 1 の数が合計で 2 つ、偶数なのでデータの誤りはないということになります。
逆に、偶数パリティと決められているのに、1 の数が奇数であればそれはデータに誤りがあります。
これを奇数版にしたのが奇数パリティです。
送られてきたビット列の 1 が奇数個であればデータの誤りはありませんが、偶数個であれば誤りがあります。
ただ、この方式では一か所の誤りしか検出できませんし、どのビットが誤りなのかもうわかりません。
先ほどの例でみてみましょう。
この場合、 0 の箇所が本来は 1 なのかもしれませんし、逆に 1 の箇所が 0 なのかもしれません。
またこの場合はどうでしょうか。
これは一見なんの問題のないデータのように見えますが、
例えばビット列の誤りが二か所にあったとします。
そうすると、つじつまがあってしまい誤っているデータなのに正常なデータと判断してしまいます。
パリティチェックにはこのような問題がありますが、この問題に対処しようと拡張されたのが水平垂直パリティチェックです。
水平垂直パリティチェック
水平垂直パリティチェックでは送られてきたデータのビット列を一つのブロックとしてみます。
そのブロックのどの方向にパリティビットを付加するかによって水平パリティか垂直パリティかが決まります。
この方式では、ビット列の 1 の数が奇数であればパリティビットに 1 を、偶数であればパリティビットに 0 を付け加えます。
こうすることで、一か所の誤り特定と二か所の誤りの検出までが行えます。
ただし、二か所の場合はどのビットに誤りがあるのかを特定することはできません。
CRC(巡回冗長検査)
この方式ではビット列をある特定の式で割り、その計算結果の余りをデータ誤り検出用のビットとして使用します。
この時の特定の式のことを生成多項式と言ったりします。
実際に送信するのは誤り検出ビットを付加したビット列です。
受信者はあまりを算出するのに使用した生成多項式を用いて受信されたデータを割ります。
ビットの誤りがなければ受信者の計算結果の余りは 0 のはずですから、これでデータの誤り検出ができます。
過去問
通信回線の伝送誤りに対処するパリティチェック方式(垂直パリテイ)の記述として,適切なものはどれか。