PR

 前回の「TCPはどうやって信頼性を確保するのか」では、TCPを使うと信頼性を確保した通信が可能になることを説明しました。今回はTCPの用途を考えてみましょう。

TCPを使った方がプログラマは楽になる

 データの転送にTCPとUDPのどちらのプロトコルを使うかの選択は、アプリケーションを開発するプログラマにゆだねられます。しかし、データの信頼性を無視できるケースは少ないので、たいていはTCPが使われます(pict.1)。

 Webブラウザで開いたページの内容や電子メールの中身が途中で欠けたり、順番が逆になっては実用的ではありません。Webのデータを転送するHTTP(hypertext transfer protocol)やファイル転送用のFTP(file transfer protocol)、電子メールの配送に使われるSMTP(simple mail transfer protocol )などはTCPを使って通信します。

 UDPを使っても信頼性の高い通信は可能です。例えば、受け取ったデータに対して確認応答を行う機能をプログラムに組み込み、通信の両端でデータを確認しながら送受信すれば、UDPでデータの欠落や順序の入れ違いが起きても、アプリケーション側で再送処理の指示が出せるので不都合は起こりません。

 しかしそのためには、プログラマがこうした機能を自分でイチから開発し、アプリケーションに組み込む必要があります。TCPを使えばこうした処理はすべてTCPが行ってくれます。プログラマが余計な労力を使う必要はありません。

拡大表示
 ネットワークで接続された二つのコンピュータの間でデータをやりとりする状況を考えてみましょう。UDPは高速でやりとりができますが,データの順番が入れ替わったり経路の途中でパケットが失われてもそのまま上位層のアプリケーション・プロトコルに渡します。順番を戻したり,失われたパケットを再送させる機能はアプリケーションが実装する必要があります。
 一方のTCPは,途中でパケットが失われたり順番が入れ替わった場合はTCPが自動的にデータの再送を行って信頼性の高いデータにしてから上位のアプリケーションに渡します。アプリケーションの実装は簡単になりますが,処理が多くなる分だけ通信の効率は悪くなります。
 アプリケーションが下位層にどちらのプロトコルを使うかは,こうした特徴を踏まえてプログラマが決めます。