前書き

読者へ: 本書を読み始める前に、1996 年の様子を想像してみてほしい。本書の第一版はこの年に出版された。1996 年のことを覚えているだろうか? あなたは生まれていただろうか? インターネットの基礎が築かれたのがどれだけ昔のことであるかを人々は忘れてしまうものだ。

1996 年といえば、NSFNET がちょうど運用を停止し、インターネットの商用フェーズが始まりかけていたころである。世界初の検索エンジン (Alta Vista ── 覚えているだろうか?) のデモが公開されたのもちょうどこのころだった。コンテンツ配信ネットワークは存在しなかった ── Akamai の創業は 2 年後の 1998 年であり、この年に Google も正式に誕生した。クラウドは地平線のかなたに見えるもやでしかなかった。「家庭用ブロードバンド」や「消費者向け無線デバイス」といったものは存在せず、私たちはダイヤルアップのモデムを使っていた ── 56 K モデムが新発明だった。その前にあった無線パケット通信はダイヤルアップより低速で、ビール用冷蔵庫ぐらいのサイズがあり、モバイルで使おうと思えばトラックか少なくともジープが必要だった。

そして 1995 年ごろ、Larry と Bruce は本書の執筆を思い立った。今日の視点からは、1996 年に本書のような書籍がどれほど重要だったかを理解するのは難しいかもしれない。本書によって多くの暗黙知が明らかにされ、本を読めば誰でも理解できるようになったのである。本書では様々なプロトコルの説明が羅列されるだけではなく、様々な構成要素がどのように組み合わさるかも説明される。本書が説明するのはインターネットがどのように動作するかであり、インターネットの構成要素が何かだけではない。

インターネットの進化について考える視点の一つとして、アプリケーション設計者の視点がある。パケット通信システムとしてのインターネットの目的は何と言ってもアプリケーションをサポートすることに尽きる。パケットを送信するだけで楽しいと思えるのはギークとパフォーマンスフリークだけだ。1996 年のアプリケーション設計者にエコシステムから提供されるものと言えば、IP パケット転送サービス、インターネット層の欠損を取り除く TCP、そして DNS でほぼ全てであり、他のものはアプリケーション設計者が自分でゼロから作らなければならなかった。

現在のアプリケーション設計者が使えるリソースはこれよりはるかに多い: クラウド、クラウドネットワーク、様々なサービスを組み合わせられるグローバルネットワーク、さらに CDN (コンテンツ配送ネットワーク) やアプリケーション開発環境などもある。こういったリソースの中には 1996 年に私たちが持っていたものと大きく異なる見た目をしているものがあるが、詳細を見れば実際に異なっている。クラウドを考えてみよう。 (ところで、私はこの用語が好きでない。「クラウド」と聞くと、私は柔らかくてフワフワしたものを想像する。しかしサッカー場ほどの大きさを持ちメガワット単位で電力を消費するデータセンターを見たことがあるなら、あれが「柔らかくてフワフワ」とは思わないだろう。まぁどうでもいいことだ...) データセンターはコスト、エネルギー効率、パフォーマンス、障害耐性のいずれについても非常に洗練されており、現代的なデータセンターの構築方法に関して学ぶべきことは多くある。しかし、こういった技術の進化の一方で、基礎的な考え方は変わらない: パケット転送、統計的容量共有、通信プロトコル、ルーティングプロトコル、一般性と汎用性の追求といった概念は失われていない。

将来クラウドといった技術が主流になるのは明らかであり、この版はクラウドに大きな注意を向けている。セキュリティの改善といった要件も極めて重要であり、本書でもセキュリティに関連する話題 (信頼、アイデンティティ、そして最新のホットトピック ── ブロックチェーン) が議論される。しかし、もし本書の第一版に目を通したとしても、基礎的な概念の多くは変わらずにそこにある。この最新の版は同じ話の現代的なバージョンであり、時代に合わせて更新された例と現代的な技術が含まれているということだ。楽しんでほしい。

David Clark
MIT
2020 年 10 月

第一版の前書き

「スパゲッティコード」という単語は侮辱語として広く理解されている。善き計算機科学者は皆モジュール性の神を信奉する。「問題を解決するときに全ての部分を理解しないで済む」という全能の利益をはじめとした様々な利益が得られるからだ。同様にモジュール性はコードを書くときだけではなく書籍の中で考え方を示すときにも重要な役割を果たす。もし書籍が効率的に ── モジュラーに ── 構成されていれば、読者は最初から読み始めて本当に最後まで読み切ることができる。

ネットワークプロトコルの分野は「正しい」モジュール化の方法が国際規格の形で示されるおそらく唯一の分野である。その国際規格とは 7 つの層からなるネットワークプロトコルの OSI 参照モデルであり、ISO によって策定される。このモデルは層を使ってモジュール性を達成しようとするものであり、プロトコルの構成に関する議論では、考えている設計がこのモデルを使っていようといまいと、まず間違いなく出発地点として使われる。

ネットワークに関する本を OSI 参照モデルに沿って構成すべきなのは明らかに思える。しかし、そうする欠点も存在する。このモデルはネットワークで中心的な概念を整理することにはあまり成功していないからである。確実な転送、フロー制御、セキュリティ対策といった非常に基本的な要件でさえ、OSI 層の (全てとは言わないまでも) ほとんどの層で対処できる。この事実は OSI 参照モデルを理解しようとするとき大きな混乱の元となり、理解に「不信の停止」が必要となることさえある。実際、何らかの層モデルに忠実に従って構成された本はスパゲッティコードと同様の特徴を持つ。

ここで登場するのが本書である。Peterson と Davie は伝統的な OSI 参照モデルの層ごとに話を進めるものの、このモデルがネットワークにおける重要な話題を理解する上で役に立つと見せかけることはしない。その代わり、彼らは基礎的な概念の議論を層と独立した形で構成している。そのため本書を読み終えた読者は、フロー制御、輻輳制御、転送の確実性向上、データの表現、データの同期といった問題を理解し、それに加えて、こういった問題を伝統的な層のいずれかで (あるいは複数の層にまたがった形で) 解決するときの影響を問題そのものとは別に理解することだろう。

本書はタイムリーな本である。現在使われている重要なプロトコル ── 特にインターネットで利用されるプロトコル ── が説明される。Peterson と Davie はインターネットに長く関わっており、多くの経験を持っている。そのため二人の本はプロトコル設計の理論的な話題だけではなく、実際の利用で問題になる現実的な要因にも触れている。本書ではちょうど今策定中のプロトコルも説明されるので、最新の知見が得られないのではないかと心配する必要はない。ただ最も重要なのは、本書において基礎的な話題に関する議論が問題の基本的な性質の説明から始まることである。層を使った OSI 参照モデルが持つ制約や、現在使われているプロトコルの詳細から始まることはない。この点において、本書の内容はタイムリーでありながらもタイムレス不朽である。現実世界との関連性、時流に沿った例、そして基礎事項の注意深い説明の組み合わせが本書をユニークなものにしている。

David Clark
マサチューセッツ工科大学
1996 年
広告