- 信頼性を確保するしくみ
-
信頼性を確保するためには,どのようなしくみが必要でしょうか.送信側で誤りが起きたことは知ることができませんから受信側で,通信路で誤りが起こったことがわからなくてはなりません.もし誤りが検出できた場合には,その誤りを取り除くしくみが必要です.
これは,誤り訂正符号を用いたり,誤った部分をもう一度送信側に送信してもらうことで解決できます.しかし,送り元に再送信を依頼するパケットにエラーが発生したり,そのパケットがなくなってしまうかもしれません.この場合は,再送信が行われないことを検出して,もう一度,再送信を依頼するパケットを送信します.これをまとめると図4のようになります.
では,どのようにすれば誤りを検出できるでしょうか.図2に信頼性のない通信の例を示しましたが,図2(a)のようにデータが誤ってしまうことに対してはチェックサムやCRC(Cyclic Redundancy Check)で計算することで検出することが可能です.また,(b)や(c)のようにパケットの順番が入れ替わってしまったり重複してしまったことは,パケットにひと続きの番号を振ることで簡単にわかります.
パケットにひと続きの番号を振る場合,どこが番号の開始であるかを送り先に知らせなくてはなりません.また通信が終わったときにも,送り先に対して「これが最後の番号のデータだよ」ということを知らせなくてはなりません.そうしないと,受信側は,送信するデータが終わったのか,それともデータが途中で欠落しているのか,区別がつかないからです.
まとめると,
- 通信の開始を相手に通知する
- データには一連の番号を振ってデータが抜けたり,入れ替わったことをわかるようにする
- データのチェックサムなど計算して,データが誤ったことをわかるようにする
- 誤りが起こったら,再送信が行われるまで送り元に再送信を依頼する
- 通信が終わったら,その旨を相手に通知する
ということになります.これは,かなり複雑なしくみであることがわかります.
〔図4〕信頼性のある通信を行うしくみ
|