問題: プロセス同士の対話

単純なイーサネットや無線ネットワークから地球規模のインターネットワークまで、コンピューターの集まりを接続するのに利用できるテクノロジは数多く存在する。コンピューター同士の相互接続が完了すると、ホスト間のパケット転送サービスをプロセス間の通信チャンネルにすることが次の問題となる。これはネットワークアーキテクチャのトランスポート層 (transport layer) が担う役割である。トランスポート層で使われるプロトコル (トランスポートプロトコル) はエンドノードで実行されるアプリケーションプログラムの間の通信をサポートするので、エンドツーエンドプロトコル (end-to-end protocol) とも呼ばれる。

トランスポートプロトコルは二つの外圧によって形作られる。上からは、プロトコルのサービスを利用するアプリケーションレベルのプロセスから様々な要件が課される。トランスポートプロトコルに期待されることが多い特徴を次に示す:

このリストにアプリケーションプロセスがネットワークに望む機能が全て含まれてはいないことに注意してほしい。例えば認証や暗号化といったセキュリティの機能は含まれていない。セキュリティの機能は典型的にはトランスポート層より上のプロトコルによって提供される (セキュリティについては第 8 章で詳しく議論する)。

下からは、トランスポートプロトコルの基礎となる下位のネットワークが提供できるサービスに一定の制限がある。下位のネットワークが持つ典型的な制限を次に示す:

こういったネットワークはベストエフォート (best-effort) でサービスを提供すると言われる。インターネットがその例である。

よってトランスポートプロトコルの課題は、完璧とは言えない下位のネットワークの特徴をアプリケーションプログラムが必要とするハイレベルなサービスに変換するアルゴリズムの設計となる。異なるトランスポートプロトコルは異なるアルゴリズムの組み合わせを使っている。本章では、こういったアルゴリズムを四個の代表的なサービスの視点から説明していく。具体的には、単純な非同期逆多重化サービス、確実なバイトストリームサービス、リクエスト/リプライサービス、そしてリアルタイムアプリケーション向けサービスを順に見ていく。

逆多重化とバイトストリームのサービスを説明するときは、これらのサービスが実際にどのように提供されているかを示すためにインターネットの UDP (User Datagram Protocol) と TCP (Transmission Control Protocol) にそれぞれ焦点を当てる。リクエスト/リプライサービスを説明するときは、このサービスが RPC (remote procedure call, 遠隔手続き呼び出し) サービスで果たす役割、およびそこで必要になる機能を説明する。インターネットにおける RPC プロトコルには決定的なものが存在しないので、広く使われる三つの RPC プロトコル SunRPC, DCE-RPC, gRPC を最後に紹介する。

最後に、リアルタイムアプリケーションではトランスポートプロトコルに特別な機能が必要になる。例えば、適切なタイミングで音声または映像のサンプルを再生するには時刻情報を伝達する機能が必要になる。本章の最後ではリアルタイムアプリケーションがプロトコルに課す要件と RTP (Real-time Transport Protocol) という広く使われる例を見る。

広告