TCP技術入門 ――進化を続ける基本プロトコル

はじめに―TCPの難しさ,見えてくるおもしろさ

この記事を読むのに必要な時間:およそ 1 分

本書は,近年幅広い関心を集めている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,そしてコンピューターネットワークを理解する近道だと信じています。

注A)
筆者の場合は,後者の方が圧倒的に多いですし,逆に一発で予想どおりの結果が出ると不安になります。

著者プロフィール

安永遼真(やすながりょうま)

2011年東京大学工学部卒業,2013年東京大学大学院工学系研究科航空宇宙工学専攻修了,同年日本電信電話株式会社入社,2016年Nokia Bell Labs出向。おもにコンピューターネットワークの数理モデル化に関する研究に従事。2018年より都内マーケティング会社に勤務。現在は機械学習・統計解析を用いたマーケティング技術の研究に従事する傍ら,趣味でコンピューターネットワークの研究を続けている。


中山悠(なかやまゆう)

2006年東京大学農学部卒業,2008年東京大学大学院新領域創成科学研究科自然環境学専攻修了,同年日本電信電話株式会社入社。2018年東京大学大学院情報理工学系研究科電子情報学専攻博士課程修了。博士(情報理工学)。現在,東京農工大学工学研究院・准教授。モバイルコンピューティング,低遅延ネットワーク,IoT等の研究に取り組む。平成29年度東京大学大学院情報理工学系研究科長賞等。


丸田一輝(まるたかずき)

2006年九州大学工学部卒業,2008年九州大学大学院システム情報科学府知能システム学専攻修了,同年日本電信電話株式会社入社。2016年九州大学大学院システム情報科学府情報知能工学専攻博士後期課程修了。博士(工学)。2017年3月より千葉大学大学院工学研究院・助教。無線ネットワークにおける干渉低減技術の研究に従事。2017年度電子情報通信学会論文賞,RCS研究会最優秀貢献賞等。