|
(ルーティング説明図)
例1.PingとPongのルーティング
例2.Query/QueryHit/Pushのルーティング
->
ファイルのダウンロード
いったんサーバントがQueryHit識別子を受け取ると、その識別子の検索結果集合に書かれているファイルの直接ダウンロードを初期化します。ファイルはネットワークではなく直接ダウンロードされます。ファイルデータはGnutellaネットワーク上で転送されることはありません。
ファイルのダウンロードプロトコルはHTTPです。ダウンロードを初期化したサーバントは目的のサーバに以下のような形式の要求文字列を送信します:
GET /get/<File Index>/<File Name>/HTTP/1.0\r\n
Connection: Keep-Alive\r\n
Range: bytes=0-\r\n
\r\n
ここで<File Index>と<File Name>はQueryHit識別子の検索結果集合に含まれるファイルインデクス/ファイル名の一対です。
たとえば、検索結果集合に記載欄が以下のような場合
(表)
この記載欄に書かれているファイルのダウンロード要求が以下のように初期化されることになります。
GET /get/2468/Foobar.mp3/HTTP/1.0\r\n
Connection: Keep-Alive\r\n
Range: bytes=0-\r\n
\r\n
このダウンロード要求を受け取ったサーバはHTTP1.0遵守のこのようなヘッダで応答します。
HTTP 200 OK\r\n
Server: Gnutella\r\n
Content-type: application/binary\r\n
Content-length: 4356789\r\n
\r\n
ファイルのデータはその後続き、サーバのHTTP応答で提供されるContent-lengthの中で特定されたバイト数を読みこまれ、含まれることになります。
Gnutellaプロトコルはダウンロードが終了した地点から中断されたダウンロードを再開できるようにHTTP範囲パラメータをサポートします。
<1,2,3,4,5,6,7>
|