本書は、近年幅広い関心を集めているTCP(Transport Control Protocol)にスポットを当て、長く役立つ基本と先端の研究動向を解説する入門書です。
今から50年前、コンピューターの世界で二つの革命的な出来事が起こりました。一つは、パケット交換方式による世界初のコンピューターネットワークであるARPANETが構築されたことです。ARPANETは、従来の回線交換方式のコンピューターネットワークの課題を解決する画期的なプロジェクトでした。もう一つは、AT&TのBell LaboratoriesでUNIXが開発されたことです。UNIXは、後にARPANETで使用するOS(Operating System)として採用されるとともに、TCP/IP(Transport Control Protocol / Internet Protocol)を標準搭載する最初のOSとなりました。
TCP/IPは、それ以降現在まで、コンピューターネットワークの基盤技術として使われ続けています。この50年間で無数の通信プロトコルが提案され、そのほとんどが廃れていったことを考慮すると、これは驚異的なことです。
IPと比較すると、TCPは二つの観点で初学者にとって難しいプロトコルです。一つめは「仕様の複雑さ」という観点です。TCPは、通信の信頼性を確保する役割を担っている性質上、さまざまなリスクを回避するためのたくさんの機能を備えています。二つめは「進化の速さ」という観点です。2016年にGoogleが新たな輻輳制御アルゴリズムを提案したことに象徴されるように、TCPはいまも進化を続けています。これは、TCPがアプリケーション側のデータ送信の要求と、ネットワーク側の実際の動作のギャップを埋める位置づけにあるためです。つまり、TCPはアプリケーション側の進化とネットワーク側の進化の両方に対応して進化し続ける必要があった、ということです。
この50年で、アプリケーションは大きく進化しました。UberとAirbnbが登場し、それぞれタクシー業界とホテル業界の構造を破壊して久しいように、今ではあらゆる業界を対象としたソフトウェアアプリケーションが存在します。今後も、5G(5th Generation、第5世代移動通信)、IoT(Internet of Things)、自動運転などの技術革新に伴い、さまざまなアプリケーションが誕生し続けるでしょう。アプリケーションが変われば、TCPに対する要求も変わることは間違いありません。一方で、ネットワーク技術の進化が契機となり、TCPのさまざまな課題が顕在化することもありました。たとえば、通信速度の高速化やネットワーク機器のバッファサイズの増大により、従来のTCPの帯域利用効率が著しく劣化するという問題が報告され、さまざまな解決策が研究/提案されました。今後もTCPは、アプリケーション側の進化とネットワーク側の進化に呼応して進化していくものと予想されます。
前述した一つめの難しさ「仕様の複雑さ」を解決できる優れた書籍は世の中にありますが、二つめの難しさ「進化の速さ」、すなわち「最新の研究動向」を解決できる書籍はほとんどありません。たとえば、TCPの輻輳制御に関して言えば、ほとんどの技術書でRenoは解説されていますが、現在主流であるCUBICはまず解説されていません。結局TCPの最新動向を知るためには、RFC(Request For Comments)や論文やソースコードを読む必要があるわけです。これは初学者にとってあまりに敷居が高い状況です。
そこで筆者らは初学者に向けて、TCPの基本から最新動向までわかりやすく解説することを目的に本書を執筆しました。最も変化の激しい技術である輻輳制御については、とくに多くのページを割いて詳細に解説します。また、理解の助けとなるように、ダウンロードして実行可能なシミュレーション環境を用意しています。Wiresharkやns-3を使って、さまざまな条件でTCPの動作を観察してみましょう。予想どおりの結果が出ることもありますし、出ないこともあります(注A)。予想どおりの結果が出ない場合には、原因を考え、納得できるまでシミュレーションを実行しましょう。このサイクルを繰り返すことが、TCP、そしてコンピューターネットワークを理解する近道だと信じています。