• 追加された行はこの色です。
  • 削除された行はこの色です。
#freeze
[[FrontPage]]

*概要 [#p3618457]
PIP(Private Implementation Protocol)という、独自のオレオレプロトコルを、定義し、実装するところまでを解説する書籍です。
-RFCのような仕様書の定義する方法
-RFCを、プロトコル スタック 実装に落とす方法
-プロトコル スタック を利用する方法

>某所で使用した解説用のプレゼン資料は、[[こちら:http://pipbook.siprop.org/download/pip_book_presentation.pdf]]からどうぞ。

***ターゲット [#y33391c6]
プロトコルスタックの実装はもちろん、ネットワークアプリケーションを作ったことがない方が対象です。~
ふだん、Webプログラミングなどをされていて、「下位層ではなにをしているのだろう?」と考えているのであれば、是非とも、本書を読んでいただきたいと思います。まさに、そういう方がターゲットなのです。~
下記は、本書の序章からの抜粋です。

 例えば、Cometという技術があります。どのような技術かというと、通常のWebアプリ
 ケーションでは、通信の開始は常にクライアント側からしか行うことができません。
 すなわち、サーバ側で発生したイベントをクライアント側に通知することはできません。
 そこで、この問題を解決したものがCometという技術になります。これは、Webアプリ
 ケーションで使われているHTTPというプロトコルをまさに逆転の発想で利用すること
 により、不可能であったサーバ側からのイベント通知を行うことを可能にしています。
 このように、通信プロトコルの詳細を理解することにより、Webアプリケーションの
 レベルでは、対処不可能であった問題を解決できたのです。
 そこで本書は、通信プロトコルがどのような考え方で策定され、実装されているのか、
 また、どのように使用されているのかを解説します。しかし、ただ考え方を解説する
 のは面白くありませんので、「チャットをするためのネットワークアプリケーションを
 作る」という目的の下、それに適した「プロトコル仕様書」と「プロトコルスタック」
 を作っていきます。
 この作成過程で得られる知識は、皆さんがWebアプリケーションを含めた様々なネット
 ワークアプリケーションを作る際に、ブラックボックスとして疑問に思っていた箇所を
 明確にしてくれることでしょう。そして、そのことは、これから皆さんが作り出すで
 あろうすばらしいアプリケーションを作成する際に非常に役に立つはずです。

-非対象者
--プロトコルスタックを実装したことのある方
--下記の書籍をご存じの方
---[[詳解TCP/IPシリーズ:http://www.amazon.co.jp/dp/4894713209/]]
---[[UNIXネットワークプログラミングシリーズ:http://www.amazon.co.jp/dp/4894712059/]]


***ソースコードについて [#mc1e9180]
ソースコードは、パブリックドメイン相当のライセンスで公開されています。~
そのため、書籍を購入されていない片でも入手が可能となっております。~
興味のある片は、[[こちら>ダウンロード]]から、ぜひ、ダウンロードしてみてください!


*内容説明 [#q5b1a5e1]
本書は、3部構成となっています。通信プロトコルの定義を行い、それを元に実際に動くアプリケーションの実装を行います。~

-第1部は、ネットワークアプリケーションを想定しながら、それに適したプロトコルのRFCライクな仕様書を策定していきます。これにより、RFCなどのプロトコル仕様書がどのような考え方に基づいて策定されたかを学ぶことができます。~
-第2部は、第1部で策定した仕様書を基にプロトコルスタックを実装していきます。これにより、RFCなどのプロトコル仕様書を読み下して、ソースコードとして実装する方法を学ぶことができます。~
-第3部は、第2部で実装したプロトコルスタックを用いて実際にネットワークアプリケーションを実装していきます。これにより、アプリケーションとしてどのようにプロトコルスタックを選定し、利用すればよいかを学ぶことができます。~
-第1部は、ネットワークアプリケーションを想定しながら、それに適したプロトコルのRFCライクな仕様書を策定していきます。これにより、RFCなどのプロトコル仕様書がどのような考え方に基づいて策定されたかを学ぶことができます。
-第2部は、第1部で策定した仕様書を基にプロトコルスタックを実装していきます。これにより、RFCなどのプロトコル仕様書を読み下して、ソースコードとして実装する方法を学ぶことができます。
-第3部は、第2部で実装したプロトコルスタックを用いて実際にネットワークアプリケーションを実装していきます。これにより、アプリケーションとしてどのようにプロトコルスタックを選定し、利用すればよいかを学ぶことができます。

**構成 [#kfd06531]
各部の構造に関しては、[[こちら>構成]]をご覧ください。

***第1部 [#gdaefb72]
ネットワークアプリケーションを想定しながら、それに適したプロトコルのRFCライクな仕様書を策定していきます。~
第1章と第2章では、ネットワークやプロトコル開発に必要なツールや基礎知識の解説を行っています。基本的な事柄ばかりですので、読み飛ばしてもかまいません。~
第3章から第6章では、プロトコルの策定を行います。これ以降は、各節で何かしらの仕様を策定を行いますが、その各節でまとめた仕様書をDraft版としてCD-ROMに入れてあります。これにより、各節で解説した内容がどのような仕様になるかを把握することができるようになっています。diffなどの差分を参照できるソフトウェアを使って、Draftの各版を見比べることにより、より深く仕様を理解することができます。どの節でどの仕様が策定されたかの詳細は、APPENDIX-Aを参照してください。

>第3章	基本的な考え方と基本部分の策定
>第4章	プロトコルのキモとなるトランザクション
>第5章	異常系の策定
>第6章	まとめとよりよいプロトコルとするためのヒント


***第2部 [#o73ec0e3]
第1部で策定した仕様書を基にプロトコルスタックを実装していきます。~
第7章から第9章では、プロトコルの実装の基礎の解説を行います。~
第10章から第16章では、プロトコルスタックの実装を行います。これ以降は、仕様書から「MUST」となっている内容を切り出した要求レベル表を使用します。各節で何かしらの実装を行いますが、その実装は、要求レベル表を基にして行います。具体的には、節が進むごとに要求レベル表が埋まっていき、最終的にすべて埋まった時点でソースコードが完成するという流れになっています。

>第10章	構文とエンコーディング層
>第11章	トランスポート層
>第12章	トランザクション層
>第13章	トランザクションユーザ層
>第14章	ユーザエージェント層
>第15章	実際に通信する
>第16章	まとめとよりよいプロトコルスタックとするためのヒント

***第3部 [#v0e118d6]
第2部で実装したプロトコルスタックを用いて実際にネットワークアプリケーションを実
装していきます。~
第17章では、ユースケースの策定を行います。~
第18章では、使用するプロトコルスタック群の選定を行います。~
第19章から第20章では、第17章のユースケースを基にして実装を行います。これ以降は、ユースケースを節の単位として実装を行います。


*著者の想い [#we0d639b]
本書では、「プロトコルの定義」「プロトコルスタックの実装」「プロトコルスタックを用いたアプリケーションの開発」について採り上げています。まさにこれは、これまでInternetが発展してきた歴史そのものを縮小したようなものです (かなり大げさですが…)。こう聞くと難しそうとか敷居が高そうとか思う方もいらっしゃるかもしれません。しかし、皆さんはこんな言葉はご存じでしょうか?~

 「We have no kings or presidents. We believe in rough consensus and running code.」

これは、Internetの世界ではとても有名な言葉です。「王も大統領もいない。信じるのはラフコンセンサスと動くコードだ。」そう、大事なのは動くコードなのです。プロトコルを定義や実装するだけでは、なんの意味もありません。使ってこそのプロトコルなのです。ですから、肩肘張る必要は全くありません。自分が使いたいと思うものを作ればよいのです。~
そして、その過程もラフコンセンサスの精神に基づいて、トライアンドエラーで行えばよいのです。「あれもやりたい」「これもやりたい」と構想し、プロトコルを定義して、実装して、使ってみてだめな部分があれば、再度プロトコルを見直し、改良していけばよいのです。実際にRFCを作成するときにも同様のプロセスが行われています。それを何度も繰り返すことによって、プロトコルもプロトコルスタックもよりよいものになるのです。
すばらしいプロトコルスタックができたら、それを公開してみるのもよいでしょう。あなたが欲しいと思っていた機能はもしかしたら、他の誰かも欲しいと思っているかもしれません。そのような人達に使ってもらうことによって、フィードバックを得ることができ、皆さんが作ったプロトコルスタックがよりよいものになるはずです。


*各販売サイトより [#j1f824d7]
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をベースにしてより先端的(に見える)なものを目標として設定する。 


*書籍データ [#z62c1784]
-タイトル:俺流 プロトコル実装入門
-価格:3800円
-発売日:5月20日
-ISBN:978-4-8399-2389-1
-総ページ:554ページ
-出版社:毎日コミュニケーションズ