|
エラー制御
|
| 送信側 | 01000001 | 0 | 01000001 | 0 | 受信側 | (1の数が偶数なので正しいデータだな) |
| 送信側 | 01000001 | 0 | 01001001 | 0 | 受信側 | (1の数が奇数なのでエラー・データだな) |
大変シンプルなエラーチェックの方法ですが、遇数個のビットにエラーが発生した場合にはエラーだと検出できませんし、0が1に入れ代わるだけでなく、いくつかのビットが欠落したりした場合にも有効ではありません。
| 送信側 | 01000001 | 0 | 01000010 | 0 | 受信側 | (1の数が偶数なので正しいデータだな) |
そこで、この文字単位でパリティチェックを行う方式(垂直パリティ・チェック)だけではなく、複数の文字からなるブロック単位にパリティビットを追加する方式(水平パリティ・チェック)も利用されることがあります。

「偶数」、「奇数」以外のパリティチェック方式には、上のように「パリティなし」、「マーク・パリティ」、「スペース・パリティ」などがあります。
「パリティなし」は、「ノン・パリティ」とも呼ばれ、パリティ・ビットを付加しません。したがって、パリティチェックは行われません。
「マーク・パリティ」は、パリティ・ビットには常に1が設定され、8番目のビットとして使用さます。
「スペース・パリティ」はパリティ・ビットとして0が8番目のビットとして使用されます。
ポイント
Nifty-Serveのような国内のオンライン・サービスのほとんどでは「パリティなし」方式が使用されています。パソコン通信を申し込むと、通信条件が書かれたパンフレットやマニュアルが送付されてきますので、それを見て、通信ソフトなどの設定をすれば良いのです(パソコン通信の通信条件例)。
チェックサム(check sum)の「サム」は合計を意味します。その名の通り、データの数値を順に足していき、その合計をチェック用の符号としてデータ本体に付け加えます。受信側でも、受け取ったデータの数値を同じ様に足していき、その合計と、チェック用の符号とを比較し、同じなら正しいデータ、違っていたらエラー・データと判断します。例えば、「CAT」という文字を下の表の様に足し算すると、答えは16進数で「D8」になります。そして、この「D8」がチェックサムです。
| 文字 | 10進数 | 16進数 |
|---|---|---|
| C | 67 | 43 |
| A | 65 | 41 |
| T | 84 | 54 |
| 合計 | 216 | D8 |
チェックサムは、幾つかのデータのまとまりごとにチェック用の符号を付加する形をとりますので、幾つごとに付加するかを予め決めておかなければなりません。チェックサムは、パソコン通信で広く使用されているXmodem(エックスモデム)というファイル転送プロトコルで用いられていますが、Xmodemの場合には128バイト単位でチェックサムを1バイト分だけ付加(つまり、合計の最後の2桁のみを付加)してデータを送受信します。
しかし、Xmodemのチェックサムは足し算した結果の最後の1バイトだけでチェックする方式ですので、計算結果が同じになるエラーが発生した場合や、文字の順番が入れ替わる場合などにはエラーチェックができません。
CRC(巡回冗長検査または、巡回冗長符号;Cyclic Redundancy Check)は、今まで紹介した検査方法の欠点を解決するために考案された検査方法のひとつで、Xmodemをはじめ、広く用いられています。チェックサムが、足し算を基本としてチェックしていたのに対して、この方式では割り算を基本としています。
データをあるまとまったブロックで分け、そのブロック毎に特定の数で割り、その余りを検出符号として使用します。その割るための数(生成多項式という)にはいろいろあるのですが、一般的には16ビット「CRC-16」か、32ビット「CRC32」のCRC値が使われます(12ビット「CRC-12」のCRC値もあります)。例えば、16ビットのCRCは「1
0001 0000 0010 0001(X16+X12+X5+1)」という数を使用します。この方式はXmodem以外に、Ymodem(ワイモデム)、B-Plus(ビープラス)などのファイル転送プロトコルで使用されてているほか、LHAなどのファイル圧縮・解凍ソフトの誤り検出にも用いられています。また、より高精度の検出を実現するために32ビットのCRC値を使用する場合もあります。この方式はZmodem(ゼットモデム)や圧縮ソフトなどでも用いられています。
エラーを発見したとしても、「エラーが発生しました」というメッセージが表示されるだけでは、不便です。エラーを発見したら訂正してくれる方法があってこそエラー制御と呼べるでしょう。私が持っている28800bpsのモデムの仕様の欄には、
| エラー訂正機能 | MNP クラス4/10 準拠、ITU-T V.42 準拠 |
のような記載があります。現在市販されているモデムのほとんどには、エラー訂正機能として、MNPとV.4.2が採用されています。2つとも、基本的には次のような手順でエラー訂正を行います。まず、送信側はデータを一定の大きさのブロックに分割し、エラーチェック用のデータをつけて相手に送ります。受信側では、エラーデータが送られてきた場合には、送信側にその部分だけ再送してもらうのです。
MNP(Microcom Networking Protocol)は、Microcomが開発したモデム間のデータ転送の規格です。機能に応じたクラス分けがしてあり、クラス1から4までが、エラー訂正のためのプロトコルに当てられていますが、現在市販されているモデムのほとんどは、エラー訂正機能として、MNPクラス4に準拠しています。
V.42は、電気通信の国際的な規格であるITU-T勧告のひとつで、2種類のエラー訂正機能を併せ持っています。ひとつは、LAPM(エルエイピーエム、ラップエム;Link Access Procedure for Modems)というプロトコルで、もうひとつは、先に紹介したクラス1から4までのMNP機能です。
これらは、モデムの規格なので、送信側と受信側のモデムが同じプロトコルに対応している必要があります。しかし、利用者が、相手のモデムに合わせてモデムをいちいち取り替えなければならないわけではありません。接続時にモデム同士が自己紹介をし、V.42対応なのかMNPのみ対応なのか、何にも対応していないのかの情報をやり取りし、共通するプロトコルで通信を始めるのです。ただし、現在はITU-T規格が主流で、MNPのみで使用される事はあまりありません。