PIP(Private Implementation Protocol)という、独自のオレオレプロトコルを、定義し、実装するところまでを解説する書籍です。
某所で使用した解説用のプレゼン資料は、こちらからどうぞ。
プロトコルスタックの実装はもちろん、ネットワークアプリケーションを作ったことがない方が対象です。
ふだん、Webプログラミングなどをされていて、「下位層ではなにをしているのだろう?」と考えているのであれば、是非とも、本書を読んでいただきたいと思います。まさに、そういう方がターゲットなのです。
下記は、本書の序章からの抜粋です。
例えば、Cometという技術があります。どのような技術かというと、通常のWebアプリ ケーションでは、通信の開始は常にクライアント側からしか行うことができません。 すなわち、サーバ側で発生したイベントをクライアント側に通知することはできません。 そこで、この問題を解決したものがCometという技術になります。これは、Webアプリ ケーションで使われているHTTPというプロトコルをまさに逆転の発想で利用すること により、不可能であったサーバ側からのイベント通知を行うことを可能にしています。 このように、通信プロトコルの詳細を理解することにより、Webアプリケーションの レベルでは、対処不可能であった問題を解決できたのです。 そこで本書は、通信プロトコルがどのような考え方で策定され、実装されているのか、 また、どのように使用されているのかを解説します。しかし、ただ考え方を解説する のは面白くありませんので、「チャットをするためのネットワークアプリケーションを 作る」という目的の下、それに適した「プロトコル仕様書」と「プロトコルスタック」 を作っていきます。 この作成過程で得られる知識は、皆さんがWebアプリケーションを含めた様々なネット ワークアプリケーションを作る際に、ブラックボックスとして疑問に思っていた箇所を 明確にしてくれることでしょう。そして、そのことは、これから皆さんが作り出すで あろうすばらしいアプリケーションを作成する際に非常に役に立つはずです。
ソースコードは、パブリックドメイン相当のライセンスで公開されています。
そのため、書籍を購入されていない片でも入手が可能となっております。
興味のある片は、こちらから、ぜひ、ダウンロードしてみてください!
本書は、3部構成となっています。通信プロトコルの定義を行い、それを元に実際に動くアプリケーションの実装を行います。
各部の構造に関しては、こちらをご覧ください。
ネットワークアプリケーションを想定しながら、それに適したプロトコルのRFCライクな仕様書を策定していきます。
第1章と第2章では、ネットワークやプロトコル開発に必要なツールや基礎知識の解説を行っています。基本的な事柄ばかりですので、読み飛ばしてもかまいません。
第3章から第6章では、プロトコルの策定を行います。これ以降は、各節で何かしらの仕様を策定を行いますが、その各節でまとめた仕様書をDraft版としてCD-ROMに入れてあります。これにより、各節で解説した内容がどのような仕様になるかを把握することができるようになっています。diffなどの差分を参照できるソフトウェアを使って、Draftの各版を見比べることにより、より深く仕様を理解することができます。どの節でどの仕様が策定されたかの詳細は、APPENDIX-Aを参照してください。
第3章 基本的な考え方と基本部分の策定
第4章 プロトコルのキモとなるトランザクション
第5章 異常系の策定
第6章 まとめとよりよいプロトコルとするためのヒント
第1部で策定した仕様書を基にプロトコルスタックを実装していきます。
第7章から第9章では、プロトコルの実装の基礎の解説を行います。
第10章から第16章では、プロトコルスタックの実装を行います。これ以降は、仕様書から「MUST」となっている内容を切り出した要求レベル表を使用します。各節で何かしらの実装を行いますが、その実装は、要求レベル表を基にして行います。具体的には、節が進むごとに要求レベル表が埋まっていき、最終的にすべて埋まった時点でソースコードが完成するという流れになっています。
第10章 構文とエンコーディング層
第11章 トランスポート層
第12章 トランザクション層
第13章 トランザクションユーザ層
第14章 ユーザエージェント層
第15章 実際に通信する
第16章 まとめとよりよいプロトコルスタックとするためのヒント
第2部で実装したプロトコルスタックを用いて実際にネットワークアプリケーションを実
装していきます。
第17章では、ユースケースの策定を行います。
第18章では、使用するプロトコルスタック群の選定を行います。
第19章から第20章では、第17章のユースケースを基にして実装を行います。これ以降は、ユースケースを節の単位として実装を行います。
本書では、「プロトコルの定義」「プロトコルスタックの実装」「プロトコルスタックを用いたアプリケーションの開発」について採り上げています。まさにこれは、これまでInternetが発展してきた歴史そのものを縮小したようなものです (かなり大げさですが…)。こう聞くと難しそうとか敷居が高そうとか思う方もいらっしゃるかもしれません。しかし、皆さんはこんな言葉はご存じでしょうか?
「We have no kings or presidents. We believe in rough consensus and running code.」
これは、Internetの世界ではとても有名な言葉です。「王も大統領もいない。信じるのはラフコンセンサスと動くコードだ。」そう、大事なのは動くコードなのです。プロトコルを定義や実装するだけでは、なんの意味もありません。使ってこそのプロトコルなのです。ですから、肩肘張る必要は全くありません。自分が使いたいと思うものを作ればよいのです。
そして、その過程もラフコンセンサスの精神に基づいて、トライアンドエラーで行えばよいのです。「あれもやりたい」「これもやりたい」と構想し、プロトコルを定義して、実装して、使ってみてだめな部分があれば、再度プロトコルを見直し、改良していけばよいのです。実際にRFCを作成するときにも同様のプロセスが行われています。それを何度も繰り返すことによって、プロトコルもプロトコルスタックもよりよいものになるのです。
すばらしいプロトコルスタックができたら、それを公開してみるのもよいでしょう。あなたが欲しいと思っていた機能はもしかしたら、他の誰かも欲しいと思っているかもしれません。そのような人達に使ってもらうことによって、フィードバックを得ることができ、皆さんが作ったプロトコルスタックがよりよいものになるはずです。
TCP/IPを代表とするインターネットプロトコルの解説書やインターネットの仕組みを解いた本はすでに数多刊行されているが、本書はそのような既刊書と大きく異なるのは、フルスクラッチでゼロから独自のプロトコルを作り上げるという目的の本であるということである。つまり、前提となるテクノロジーは大きく異なるものの、『CPUの創り方』や『30日でできる! OS自作入門』のプロトコル版である。~
最初はRFC(Request for Comments/インターネットで必要となるプロトコル仕様や技術、研究、実験結果などのすべての情報がまとめられている文書)のようなモノを想定し、ドラフトからRFCになっていく課程を再現しながらRFCのような仕様書を策定する。具体的な内容としては、SIP*(Session Initiation Protocol/セッション開始プロトコル)をベースとしたIM(インスタント・メッセージ)で使用可能なプロトコルを策定する。ただし、SIPをベースとはするが、本書としてはあくまでゼロベースから設計しているという見せ方をする。
実装過程では、RFCをどう読んで、それをどう設計・実装するかを実際に設計・実装しながら解説していく。最終成果物としては、Stackとそれを利用するアプリケーション(チャットのようなモノ) を想定する。
SIPとはIPネットワーク上でマルチメディアセッションを開始/変更/終了するための、アプリケーション層のシグナリングプロトコルである。IETF(Internet Engineering Task Force)のSIPワーキンググループで提案され、現在はRFC3261で標準化されている。
SIPによって実現するサービスには、IP電話、ビデオ会議、インスタントメッセージ、プレゼンスなど多岐に渡る。本書では、せっかくオリジナルのものを作るなら単にhttpに代わるようなものでなく、SIPをベースにしてより先端的(に見える)なものを目標として設定する。