[題名] 次世代情報共有プロトコルの提案 [名称] 未定 [作成] 2000年11月13日 daishi@axlight.com [修正] 2000年11月15日 daishi@axlight.com [目的] インターネットレベル(まずは日本)での、 情報(まずはファイル)共有を実現するため [方式] Ohaha!(http://www.ohaha.com/design.html)をベースにした、 分散インデックス方式による (Ohaha!はGnutellaとFreenetのあいのこで、Freenetより) [技術] HTTP/1.1 XML グローバルハッシュ関数 [言葉] ノード:サービスを提供するソフトウエア(aka サーバント) ノードID:ノードの識別子 アイテム:情報(ファイル)、ヘッダのみで本体を含まない状態も可 コレクション:アイテムの集合 ビュー:あるノードが把握しているノードの集合 [イメージ] ノードA : "abc"の情報が欲しいなぁ。 ノードA : ビューの中だとあいつが一番"abc"について詳しいだろう。 ノードA→ノードL : "abc"の情報が欲しいんだけど? ノードL→ノードA : いいぜ、ほらよ。 ノードB : "def"の情報が欲しいなぁ。 ノードB : ビューの中だとあいつが一番"def"について詳しいだろう。 ノードB→ノードM : "def"の情報が欲しいんだけど? ノードM→ノードB : 知らねえなぁ、ノードXに聞いてみれば? ノードB : "def"の情報が欲しいなぁ。 ノードB : ビューの中だとあいつが一番"def"について詳しいだろう。 ノードB→ノードM : "def"の情報が欲しいんだけど? ノードB : 知らねえなぁ、ま、おれが代りに聞いてやるか。 ... ノードM→ノードB : ほら、分かったぜ。 ノードB : 今度また聞かれるかもしれないから、覚えといてやるか。 ノードC : "ghi"の情報を公開したいなぁ。 ノードC : ビューの中だとあいつが一番"ghi"について詳しいだろう。 ノードC→ノードN : "ghi"について、こんな情報があるんだけど? ノードN→ノードC : おう、了解。 ノードC : "ghi"についてはあいつも詳しいなぁ、あいつにも教えておくか。 ... ノードD : もうちょっと自分のビューを増したいなぁ。 ノードD : ビューの中のあいつに聞いてみるか? ノードD→ノードY : おまえのビューを教えろよ。 ノードY→ノードD : しょうがねえなぁ、教えてやるよ。 [ノードとキーワード] グローバルハッシュ関数H(x)を用いて、 キーワード:kのハッシュ値H(k)を計算し、 ビューの中で、一番近いノードID:nのハッシュ値H(n)を持つノードが、 そのキーワードに関して「詳しい」とする。 [グローバルハッシュ関数] Ohaha!の場合は、 H(x) = ((a * x + b) mod n) / (n-1) であるが、整数(64bit long)で扱うなら、 H(x) = (long)(a * x + b); の方がよいのでは? (doubleがいいか、longがいいか) いずれにしても、a,b,nは定数(インターネットどこでも通用する) [ネットワークプロトコル] 通信はHTTP/1.1の上のXMLで行われる 新に定めなければならないのは、DTDのみ プライベートアドレス使用者にHTTPのリクエストを送るには工夫が必要 [情報共有プロトコル] 注意点は、 ・モデムユーザでも問題ないように ・嘘を付くノードが少しくらいいても大丈夫なように ・firewallの内側からも使えるように ---- 以上