再送によるエラー訂正
エラーを検出してシステムを停止し、誤った答えを出さないというのは重要であるが、エラーを訂正し、正しく処理が続けられるという方がより望ましい。エラー訂正を行う1つの方法は、受信側がエラーチェックを行いエラーが検出された場合は、同じデータを再送するという方法である。
図2.12に示すように、送信側はデータにチェックビットを付けて受信側に送る。このとき、送信したデータは捨てないでバッファに保存しておく。そして、受信側はチェックを行い、エラーが検出されなかった場合はACK(Acknowledge)を返送する。送信側はACK応答を受け取った場合は、送信したデータが誤りなく受け取られたので、(1)バッファに入れたデータ1は捨てて、(2)データ2にチェックビットを付けて送信し、(3)データ2はバッファに保存しておく。
受信側がデータ2をチェックすると、エラーが見つかったので、NACK(Not Acknowledge)応答を返す。送信側は応答がNACKであると、データ2は正しく届かなかったことが分かるので、もう一度、データ2を送る。一般に、雑音などの間欠エラーは2回目の送信時にも発生するという確率は低いので、再送を何回か繰り返すことにより、正しいデータを送ることができる。結果として、少し余計に時間はかかるが正しい処理が継続できる。なお、固定故障が起こっていて何回再送しても同じエラーが起こるという事態もあり得るので、再送回数が上限に達したら、訂正を諦めてOSにエラーを通知するなどの仕掛けを組み込んでおく必要がある。
なお、伝送エラーでNACK応答がACK応答に化けてしまっては困るので、ACK、NACKの応答は次回で述べる繰り返しコードなどでエラーの検出、訂正ができるようにしている。