問題: アプリケーションごとのプロトコル
本書はコンピューターネットワークを利用する人々が望むアプリケーションプログラム ── ウェブブラウザからビデオ会議ツールまで ── についての議論から始まった。以降の章では、そういったアプリケーションを実現するためのネットワークインフラストラクチャを構成要素ごとに一つずつ説明してきた。本章で話は一周して元に戻り、再度ネットワークアプリケーションが話題となる。ネットワークアプリケーションは「他のマシン上のピアとメッセージを交換する」という意味でネットワークプロトコルの実装でもあれば、「ウィンドウシステム、ファイルシステム、そして最終的にはユーザーと対話する」という意味で伝統的なアプリケーションプログラムでもある。本章では現在利用できる有名なネットワークアプリケーションを見ていく。
アプリケーションに関する議論を進めていくと、本書で強調してきたシステム的アプローチ (systems approach) を深く理解できるだろう。つまり、ネットワークアプリケーションを構築する最も優れた方法は、ネットワークが提供できる構成要素を理解し、その構成要素同士がどのように対話するかを理解することである。例えば、あるネットワークアプリケーションは下位のネットワークが提供する高信頼トランスポートプロトコル、認証・プライバシーメカニズム、そしてリソース割り当ての仕組みを利用するかもしれない。アプリケーション開発者がこういった機能を上手く活用するとき、優れたアプリケーションが誕生する (利用可能なネットワーク機能を活用できていない反面教師も多くある)。通常アプリケーションには独自のプロトコルが必要であり、その設計では本書で下位層のプロトコルを解説したときに見てきたのと同じ原則が利用される。言い換えれば、もしあなたがネットワークアプリケーションを書きたいと思っているなら、あなたは定義によりプロトコル設計者 (そして実装者) となる。そのため、本章は効率的なネットワークアプリケーションの構築で利用されると説明してきたアイデアやテクニックを様々な形で一つにまとめる方法に焦点を当てる。
これから読者が慣れ親しんでいるであろうネットワークアプリケーションと読者があまり知らないであろうネットワークアプリケーションを見ていく。具体的にはメール、ウェブブラウザ、アプリケーションのビジネスへの統合、マルチメディアアプリケーション、ネットワーク管理アプリケーション、そして近年注目されているピアツーピア通信とコンテンツ配信ネットワークが説明される。このリストは決して完全ではないものの、ネットワークアプリケーションを設計・構築する上で重要となる様々な原則の実例としての役割を果たす。アプリケーションはネットワーク内部またはホストプロトコルスタックで利用可能な構成要素を選択し、下位のサービスをアプリケーションがちょうど必要とする通信サービスにまで拡張しなければならない。