「ネットワークシステムについて語るときに我々の語ること」を読んだ
「ネットワークシステムについて語るときに我々の語ること」という本を読んだ。Lambda Note 社から出版されている本である。ネットワークシステムについて、設計者の視点を体験できる良い本だったので、紹介する。
「堅い技術書」と「柔らかい技術書」
この本は紹介するのが難しい本で、公式サイトの紹介文を借りると「ネットワーク技術を巡るあれこれを書き綴ってきたエッセイを集めた」本である。
ソフトウェアエンジニア分野のエッセイといえば、エンジニアとしての心構えとか、キャリアについてだとか、人間のことについて語る本がいくつかある。しかし、この本のメイントピックはあくまでネットワーク技術である。そういう意味で、どちらかといえば分野を概観してこれまでの経緯と将来の方向性を示すレビュー論文の雰囲気が近い。
しかし、この本には基本的にコードは載っていないし、数式も書かれていない。レビュー論文であれば先行研究への体系的な参照が必要であるが、それもない。そこらへんのお堅い手続きは無視して、著者の主張が書かれている。研究者ではなくエンジニアがレビュー論文を読んだとき、レビュー論文でもっとも面白いのは淡々と書かれた事実ではなく、著者の主張が垣間見えるときであるが、まさにその部分を切り取って集めたような本である。
技術を学ぶための本、という意味で技術書というと、プログラミング言語やライブラリの使い方であったり、開発の方法論であったり、あるいは計算機科学の理論であったりを解説する本が一般的だ。そのような技術書を「堅い技術書」と呼ぶとすると、この本は「柔らかい技術書」である。居酒屋でだいぶ年配の経験豊かな技術者の昔話を聞くようなものである。そして、往々にしてキャリアをきちんと築いてきた人の昔話は、当時の文脈を踏まえつつ、年月を経て風化してしまう細部に入り込みすぎずに本質を言い当てるため、わかりやすく、示唆に富んでいる。
柔らかい技術書を理解するためには、堅い技術書の知識を前提とする必要があるが、堅い技術書を技術の地図の中に適切に位置付けるためには、柔らかい技術書から得られる示唆が必要になる。
具体例1:ネットワークのレイヤモデル
具体例を出そう。ネットワークについて、箱を積み上げたようなレイヤのモデルで教えることがある。N層目のレイヤは N - 1 層目(下位層)と N + 1 層目(上位層)と関わりをもち、下位層と上位層のインターフェースを定めておけば、それぞれの層を独立して扱えるという主張である。これは素晴らしく理想的な世界だが、現実世界はそのようになっていない。たとえば、現在のネットワークの世界の主役といってもいい TCP の RFC793 では、想定する下位層として IP を RFC にハードコーディングしている。これは UDP も同様である。
The lower level protocol which is assumed throughout this document is the Internet Protocol https://datatracker.ietf.org/doc/html/rfc793
全然、下位層と独立していないじゃないか、という話である。 一方、この本では、ネットワークのレイヤについて ILP という考え方を紹介している。
ILP(Integrated Layer Processing)は、「レイヤー化されたアーキテクチャだからといって実装まで厳密にレイヤーに分離する必要はなく、それではむしろ性能上の問題に悩まされる可能性が高い」という考え方
TCP と UDP が IP を前提としている理由は性能上の問題があるから、とは限らないが、レイヤーごとに分かれたネットワークという捉え方は、あくまで捉え方の一つであることがわかる。
なお、RFC は別に仕様書ではない、という話もあるが、現実世界を反映しているという点では変わらない。
TCP は長年にわたってリファレンス実装により定義されてきたのである。そのRFC は、規範的(こうあるべき)というよりも記述的(こうなっている)な性質が強い。
具体例2:輻輳制御
もう一つ具体例を出そう。輻輳制御についてだ。輻輳制御を実現するためのアルゴリズムはいくつも提案されており、標準的なネットワークの教科書でも有名どころが紹介されているだろう。では、輻輳制御は何を目指しているのか。著者は、引用によって輻輳制御を次のように説明している。
競合する送信元の間でネットワークリソースを共有するための分散アルゴリズムであり、その目的は、容量制約の下で、全送信元の効用の総和を最大化するように、各々の送信レートを選択することである
そのうえで、「問題を複雑にしているのは、正しい目的関数についての合意がないこと」であるとし、近年のトレンドとして、公平性を測る目的関数から有害性を測る目的関数へ移行していること、有害性を計測対象としたことで特定の用途に合わせた専用のメカニズムの普及が促されている可能性があることを述べている。
このような、個々の目的関数の中身を説明するわけでもなく、個々のメカニズムの機序を説明するわけでもなく、全体のトレンドを大掴みで説明している箇所がこの本の真骨頂であり、知識がない人はより詳細に調べるための地図を得られるし、すでに個々の詳細を知っていた人はそれらを全体に位置付けるための見取り図を得られる。堅い技術書を読んでいると、そこに書かれていることがすでに規定事項であり、変えられないものであるという印象を受ける(もちろん、本による)が、本書では説明されていることがまだ変化の途上にあり、物事には全く別の可能性も考えられることに気づかせてくれる。
その他のトピック
以上のような語り口で、QUIC について、クラウドについて、FPGA について、セキュリティについて、SDN について、などの多様なトピックについて論が展開されていく。個人的に特に興味深かったのは、HTTP と QUIC を RPC として捉えるという話と、ネットワークのアーキテクチャを砂時計として捉える話、FPGA と SDN とクラウドを紐づける話である。
とくに2番目と3番目は、最近参加していたセキュリティキャンプ2026ネクストに関連する話題が多く、タイムリーだった。TCP / IP プロトコルスタック自作の講義があったのだが、そちらで使っていたのは「ゼロからのTCP/IPプロトコルスタック自作入門」という堅い技術書で、本書と補完しあっていた。また、FPGA を用いる講義もあったし、受講生同士の雑談でクラウドの方向性についての話もあった。それらの講義や雑談で質問をしたり議論をしたりするときには、本書で得られた観点が役に立っていたように思う。
まとめ
長くなったのでまとめよう。「ネットワークシステムについて語るときに我々の語ること」は、ネットワークのアーキテクチャを設計者視点で捉え、種々の技術、理論の見取り図を把握し、今後のネットワークの方向性について示唆を与えてくれる、一風変わった技術書である。