Home


Community


Resources

File Center
Links




Since April 10th, 2000



View Developers' Corner Pages INVITE OTHERS | HELP | FEEDBACK
GUEST LOG IN | JOIN GROUP  
  Back to all pages
開発者のコーナー
Index | Scaling GnutellaNet | Windows GUID and PUSH | Protocol | The Daily Spam

開発 : Windowsの GUID と PUSH

GUIDって一体何?

Last update: 1 May 2000


WindowsのGUIDを明らかにする

たぶん君はもうGnutellaプロトコルの説明を読んだよね。もし読んでなかったら、読んでみて。じゃないとこのことは理解できないと思う。

GUIDとは?
GUIDって何だろう? GUIDは 地球上で一意に決まる識別子(Globally Unique Identifier)のことなんだ。それはこの世界で唯一の数字、少なくともそのユーザでは、なんだ。社会保障番号(合衆国で政府が僕らにくれる識別番号)のようなもので、 みんながもっているけど、同じ番号を持ってる人は二人といないってやつ。うん、とにかくGUIDはそういうことになっている。

特にWindowsのGUIDは16バイトの数字だ。WindowsではGUIDを生成するAPIが既にあるので、Windows上でこの数字がどのように生成されるかはそんなに重要じゃない。他のプラットホームでは、そのようなAPIが存在しない、だから僕らはクリエイティブにならなくちゃいけない。4個の32ビットinteger型の乱数ははじめてみるいい例だ。GUIDを生成するためには、出鱈目に4個の数字を選び、それを他の乱数と置き換える。簡単だ。そしてうまく行けばパケット損失が引き起こされないくらい十分ユニークなものが得られる。

GnutellaはどのようにGUIDを使っているのか?
GnutellaNet上では、まるで人々のようにこれらのパケットがうろうろ動き回っている。 それぞれのパケットは数字を持っている。僕のクライアントがネットワークに何かを送る場合、パケットに番号をくっつける。 他のGnutellaクライアントがそのパケットをフォワードする場合、本来の番号を付けられたパケットをフォワードする。クライアントがそのパケットに応答する場合、元々割り当てられた番号をつけたまま返される。それで僕のクライアントは質問と返ってきた返事を照合できる。置きらかに、このことは非常に重要なことだ。

事実、それは見かけよりもずっと重要なことなんだ。クライアントがパケットをフォワードすべきかどうかはGUIDでのみ知ることができる。もし、そのクライアントが既に見たことのあるGUIDと機能IDのペアを運んでいるパケットだったら、それはフォワードすべきじゃないということがわかる。たとえば、GUID123123を持つPINGパケットを既に見たことがあれば、クライアントはGUID 123123をもったPINGパケットをフォワードすべきではない。わかったかなぁ? どうして既に見たものをそういう風に扱うんだろう?

うん。君のクライアントがあるパケットを送る場合、そのパケットのGUIDを記憶する。返事がきた場合、送られてきたGUIDがメモリのなかにあるかを見て、もし返ってきたパケットのGUIDが自分のGUIDと同かどうか調べて、それからそのパケットを処理する。そして明らかに既に見たパケットなら、君のクライアントはそのパケットをフォワードしない。

GUIDとpushリクエスト
PUSHの背後にある全てのアイデアは、君がファイヤーウォールの後ろにいるんだけどファイルを共有したいと思ったら、唯一の実際の方法はファイルを欲しい人がファイヤーウォールの外側のだれかと確立する接続について君に知らせることだ。つまり、それが君のGnutellaの接続になるだろう。だからそのコミュニケーションはPUSHリクエストパケットを使って行われる。

えっと、じゃぁ、シナリオを作ってみよう。僕のクライアントがファイヤーウォールの内側にいたとしよう。君がクエリーを送り、それが僕のところにやってきた。僕のクライアントは君がクエリーしたファイルを共有している。だから返事を構成し、それにGUIDを貼り付ける。君はその返事を受け取って僕のクライアントからファイルをダウンロードしようとする。君は僕のクライアントがファイヤーウォールの内側にいると判断する。そして僕にファイルに対するPUSHリクエストを送る。PUSHリクエストパケットのどこかに僕のクライアントが君のクライアントに送ったGUIDがある。PUSHリクエストのパケットのどこかにIPアドレスと僕のクライアントが君のと接続を確立しているポート番号もある。PUSHリクエストパケットがGnutellaNetをたどり僕のクライアントまでたどり着くと、僕のクライアントはそれを分析し独り言を言う「おぉ、僕がやつとGUIDがぴったり符合したぞ、このPUSHリクエストは確かに私に向けられたものだ!」だから、僕のクライアントは君のPUSHリクエストパケットに含まれるIPアドレス:ポート番号の情報をもとに君のクライアントと接続を確立し、ファイルを送る。






Wego.com, Inc., does not claim ownership of or take responsibility for any content on this site.
There is no warranty or guarantee on anything downloaded from this site.
Gnutella Website Support