連載 第7回 IPネットワークにおける通信の信頼性
インターネットのしくみをわかりやすく,実際にコンピュータを動かして,身体でインターネットを理解できるように解説を進めています. 前回まで,イーサネットやRS-232-Cなどを使ってコンピュータ同士をつないだネットワークが,IPソフトウェアを使うことで,全世界的なネットワークに発展できることを解説しました. 通信を行うときには,その通信路の信頼性が重要になります.そして,その上で通信を行うプログラムを開発するときには,アプリケーション側がどれくらいの通信の確実さを要求するのか,また,使用する通信路がどのくらい確実に情報を相手に伝えられるのかなどを検討する必要があります. そこで,今回はIPネットワークの信頼性と,それを確保するTCPのしくみを解説します. 通信の信頼性のない物理層と信頼性を求めるアプリケーション 実際の通信路を使って通信を行う場合,必ずデータが相手に届くということを保証することはほぼ不可能です.電磁波ノイズによってデータが化けてしまったり,ケーブルが不意に外れたり,現実世界ではさまざまな要因によって,通信が阻害されてしまいます. しかしながら,実際のアプリケーションでは送ったデータはきちんと相手側に届かなくてはいけません.「送ってはみたものの,相手に届いたかどうかわからない」では(通常のアプリケーションは)困ってしまいます.ファイルを転送するプログラムでは,送ったファイルが受信側できちんと再現されなくてはなりませんし,チャットシステムではチャットに参加している全員に会話がきちんと伝わらなくてはなりません. 図1のようなOSI 7階層モデルで言えば,通信路は第1層の物理層に対応し,アプリケーションが第7層になります.最下層の第1層に信頼性がなく,第7層から見れば第6層以下で行われる通信に信頼性が必要ということになります.つまり,第2層から第6層の間,もしくはアプリケーション自身によって通信の信頼性を確保しなくてはなりません.不確実な通信路を用いて確実な通信を行うためのしくみを,どこかの層に組み込まなくてはなりません. 〔図1〕通信の信頼性の違い