3

Bittorent を C で実装しようとしています。まず、コード スニペットを作成する前に、Web ブラウザーを使用して次のメッセージ (URL) をトラッカー サーバーに送信しようとしました。

この URL を試すことができます。

http://torrent.ubuntu.com:6969/announce?info_hash=%9ea%80%ed%e7/%c4%ae%c8%de%8c%b0C%81c%fbq%3cJ%22&peer_id=M7-3-5--%eck%a8%2a%7f%e6%3ah%84%f2%9d%c5&port=43611&uploaded=0&downloaded=0&left=0&corrupt=0&key=00BA7F86&event=started&numwant=4&compact=0&no_peer_id=0

このリンクからxubuntu-13.04-desktop-i386.isoという名前9e6180ede72fc4aec8de8cb0438163fb713c4a22で SHA-1 値を持つtorrent ファイルをダウンロードしました。

ただし、上記のリクエストを送信した後、取得します

HTTP/1.0 200 OK
d8:completei357e10:incompletei8e8:intervali1800e5:peers24:l\262j"\310Հp\226\310\325G?\205^%!\221x   \364\367\357e

しかし、Bittorentの仕様は言う

peers : 値はディクショナリのリストで、それぞれに次のキーがあります
-peer id ピアの自己選択 ID (トラッカー要求について前述したとおり) (文字列)
-ip ピアの IP アドレス (IPv6 または IPv4) または DNS 名 (文字列) )
-ポート ピアのポート番号 (整数)

peers フィールドの値が Bencoded リストではなくバイナリである理由は?
前もって感謝します。

4

2 に答える 2

1

あなたが参照しているプロトコルは、ビットトレントの初期に使用されていました。ただし、一部のトラッカーは、容量の面で大幅にスケールアウトすることなく人気が高まるにつれて、トラッカーの応答のサイズが重要になりました。これに対処するための 1 つの方法は、クライアントが gzip された HTTP 応答とコンパクトなピア応答 (最近のトラッカーの間で最も一般的な形式) を受け入れることでした。コンパクト ピア レスポンスは、同じ情報量で非常に小さいレスポンスを提供します。BEP23で定義されています。

ただし、応答は現在比較的小さいですが、TCP ハンドシェイクとティアダウンは依然としてかなりの const を課しています。これが、多くのトラッカーが UDP BEP15に移行している理由です。

于 2013-11-09T01:10:28.927 に答える
1

peers 値は、6 バイトの倍数で構成される文字列である場合があります。最初の 4 バイトは IP アドレスで、最後の 2 バイトはポート番号です。すべてネットワーク(ビッグエンディアン)表記。

https://wiki.theory.org/BitTorrentSpecification#Tracker_HTTP.2FHTTPS_Protocol

于 2013-09-14T21:25:21.037 に答える