※ 本記事では、応用情報技術者試験に向けて私が勉強したことを備忘録的にまとめておきたいと思います。基本情報技術者試験の内容と重複しているものもあります。なお、記事の投稿順に意味はないので、気にしないでもらえればと思います。
はじめに
今回は通信の誤りを検出する方法についてまとめたいと思います。
通信ではノイズなどで意図せずに、あるビットが” 0から1 “あるいは” 1から0 “に化けてしまうことがあります。この誤りを検出する方法を紹介します。
このテーマでは出てくる名前や仕組みが難しいですが、丁寧に学んでいきましょう。
ちなみに私はこの参考書を使って勉強してました。
情報が豊富でがっつり勉強したい方向けかと思います。
パリティチェック
パリティチェックとはデータの1の個数を数えて誤りをチェックする方法です。
①偶数パリティ
1の個数が偶数個になるようにパリティビット(0か1)をつけるパリティチェックを偶数パリティと言います。例えば、1011というデータを送信したい場合を考えます。1011は1が3個=奇数個あります。送信者側が1の個数が偶数になるように、パリティビットの1を追加して10111にします。あらかじめ受信者側には「偶数パリティで送るよ」で伝えておけば、受信者側も1の個数を数えて、偶数個ならOK、奇数個なら何か誤りがあることがわかります。
②奇数パリティ
1の個数が奇数になるようにパリティビット(0か1)をつけるパリティチェックを奇数パリティと言います。仕組みは偶数パリティの場合と全く同じなので、割愛します。
なお、偶数パリティと奇数パリティで検出能力は変わらないようです。
以上のようにパリティチェックは1の個数を数えて誤りを検知します。したがって、データが連続して誤りを起こす、つまり2ビットの誤りを検出することはできません。
また、誤りの有無を確認することはできますが、どこが誤っているのかまでは特定できません。そのため、基本的にはデータを再送することで解決を図ります。
水平垂直パリティチェック
基本的な考え方はパリティチェックと同じですが、少し複雑になります。ここでは下図の太線枠の中の3行3列のデータを送る場合を考えてみます。偶数パリティで送ること送受信者で取り決めた場合、どの行・列でも1が偶数個になるようにすると、水平パリティは1010、垂直パリティは1010になります。水平パリティと垂直パリティの交差するところの値も、列・行の1の個数が偶数個になるように注意してください。
データの受信者は偶数パリティとなっていることを確認します。下図の右側のように1列目の2行目が1になってしまった場合、水平パリティと垂直パリティをチェックすることで誤りを検出することができ、さらに位置の特定もできます。そのため、誤りを検出するだけでなく修正することも可能です。

巡回冗長検査 CRC
巡回冗長検査 CRC (Cyclic Redundancy Check)とは、送信するデータをある決められた値(生成多項式)で割り、その余りを送信者と受信者それぞれで同じであるかチェックすることで誤りの有無を検出する方法です。CRCは連続して誤り(2ビット以上の誤り)が発生しても検出できるため、より厳密に誤りを検出することができます。
ハミング符号
ハミング符号とは、送信するデータに送受信者で取り決めたルール(式)に則った検査ビットを付加します。受信者はその式に受信したデータの各ビットを代入することで誤りを検出・位置の特定・修正することができます。
チェックサム
チェックサムとは、送信するデータを整数列として足し合わせて、その和(Sum)をある定数で割った余りをチェックして誤りを検出する方法です。送信者と受信者で余りが異なった場合、誤りがあるということになります。
最後に
今回は、通信の誤りを検出する方法をまとめました。仕組みは似たようなものがありますが、一つ一つの特徴を把握することが大切ですね。
おすすめの記事
当ブログではいろいろな記事を書いています。今人気の記事をいくつかご紹介しますので、ぜひご覧ください。




コメント