レスポンスの中身
Peerの一覧が含まれている*
Bencoding形式で渡される
圧縮して行うことができる
本章では、 Tracker へのレスポンス について解説していきま す。リクエストとレスポンスの両方について理解ができた訳で すから、あなたは、Trackerサーバーを作る事がでくるようにな さているはずです。 実際に、Trackerサーバーを作成してみましょう。そして、実際 動作させてみて、想定した通りのリクエスト、レスポンスが飛 び交い、データの配信が開始される事を確認ていきます。
レスポンスの中身はPeerの一覧
Trackerはデータを配信しているPeerの一覧を返します。レスポ ンスととして最低限必要なのは、アドレスとポート番号の一ラ ンクです。 この2つのデータさえあればもTorrentクライアント同時でデー タを配信は合う事が可能です。 実際に渡されるデータの形式を見ていきましょう。
レスポンスはBencode形式
Peer の一覧も Torrent ファイルと同様に Bencoding 形式で渡 されます。
intervalキーを除けば、ipアドレス、port番号、peer_id いっ た、リクエスト時にTracker へ渡した情報が含まれている事デ ータが含まれている事が読み取れるでしょう。 “interval”は次に Tracker へアクセスすべき目安の時間です。 どの程度の間隔でアクセスすべきなのかは、Torrent クライアン トからは判断できせん。どの程度のPeerが配信に参加してい て、どの程度のPeerが新規に参加しているを知らないためで す。 Tracker サーバー は自身の状態を加味して、この時間を決めま す。 例えば、頻繁にTrackerへアクセスされるとTrackerサーバーへ の負荷があがります。Peerのリストは更新されていない。更新 されても対象にあなたのアドレスが含まれるので更新する必要 性が弱い。といった時は、特別、アクセス時間を長く取るとい つた対応が考えられます。
圧縮して送信する事もできる
データを圧縮して相手へ送る事もできます。リクエストに "&compact=1" を含めると、対応しているTracker であれば、データを圧縮して送ってくれます。 { interval: peers: } peer のアドレスと port 番号を、バイト配列として扱うことで データを圧縮します。BIG_ENDIANで記録されます。 たとえば、IP4のアドレスは、「127.0.0.1」ならば、 [0x7F, 0, 0, 1] と配列になります。ポートが8080ならば、[0x1F, 0x90] といった並びで記録します。 Torrentでは、これせのデータを繋げて、アドレスが 「127.0.0.1」 で 、ポートが8008ならば、[0x7F, 0x00, 0x00, 0x01, 0x1F, 0x90] といった並びのバイト配列として扱います。
不正な値を受け取った時もBencode
Trackerはデ不正な値を受け取った時も、Bencode形式のデー タを返します。人がよんで解るようなメッセージを付けて以下 のような形式で返します。
これで、レスポンスされデータの形式については、済みまし た。では、実際にTrackerサーバー、Trackerクライアントほ実 装してみましょう。
Kyorohiro work
Last updated