インターネットなどは,文字,画像,音声,動画など,あらゆるものを0と1のディジタル・データにして,それを電気や光の信号に変えてやりとりしています。しかも,そのやりとりは私たちの目にもとまらないような速さです。

 しかし,このようなスピードでやりとりしているデータは,本当に正しく相手に伝わっているのでしょうか。たまには,0を送ったはずなのに1として受け取られてしまうことはないのでしょうか。

間違いはゼロではない

 実際のところ,送信側では0と送ったはずの信号が,受信側で1とみなしてしまう可能性はゼロではありません。通信ケーブルの製造技術などが発達した今でも,伝送誤りが起こる可能性はあるのです。

 伝送誤りの最大の原因はノイズです。電子レンジのような電磁波を発生する装置や,大きな電力を扱う機器,あるいは電源ケーブルなどが通信経路の近くにあると,それらが発する電磁波の影響を受けて伝送信号の波形が乱れることがあります。そうすると,伝送誤りが起こったりします。

 通信ケーブルを使わずに電波でデータをやりとりする無線通信では,通信が一時的に途絶えることもあります。

 しかし,実際の通信ではメールの内容が変わったり,アクセスしたWebサイトの画像が変わったりすることは,ほとんどありません。送信者が送ったデータは正しく相手に伝わります。

正しく送られたかパケットごとに確認している

 現在広く使われているTCP/IPやイーサネットには,ノイズや断線による信号の乱れなどによって間違いが起こっても,通信内容を間違いなく相手に伝えるしくみが備わっています。

 イーサネットやTCP/IPでは,パケットやフレームという,一定の大きさを持つデータのかたまりをやりとりします。このパケットごとにパケットの内容が誤りなく伝わったかどうかを確認できる情報を付加しているからです。

 もう少し,具体的な例を挙げて確認しておきましょう。TCPでパケットを送信するとき,送信側ではパケットのデータ部分を特定の計算式で計算し,その結果の下位16ビットをTCPのヘッダー(パケットのあて先や大きさなどの情報が書かれたパケットの冒頭部分)の決まった場所に書き込んで送ります。これがチェックサムと呼ばれる値です。

 パケットを受け取った側では,パケットのデータ部分を送信側と同じやり方で計算してチェックサムを算出します。そして,送信側がヘッダーに書き込んだチェックサムと照合します。同じデータを同じ計算式で加工したのなら,結果は同じになるはずです。つまり,正しくデータが受け渡されたなら,両者の結果は一致します。データの伝送誤りがあれば,両者の値は異なります。

 チェックサムにより伝送誤りが見つかった場合,TCPでは受信側が送信側に対してもう一度同じデータを送るように要求します。このようにして,通信データに誤りがないようにしています。