3

我正在尝试在 C 中实现 Bittorent。首先,在编写代码片段之前,我尝试使用 Web 浏览器将以下消息(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并具有9e6180ede72fc4aec8de8cb0438163fb713c4a22SHA-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 名称(字符串)
-port peer 的端口号(整数)

为什么 peers 字段的值是二进制的,而不是 Bencoded 列表?
先感谢您。

4

2 回答 2

1

peers 值可以是一个由 6 个字节的倍数组成的字符串。前 4 个字节是 IP 地址,后 2 个字节是端口号。全部采用网络(大端)表示法。

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

于 2013-09-14T21:25:21.037 回答
1

你提到的协议是在bittorrent的早期使用的。然而,随着一些跟踪器在容量方面没有显着扩展的情况下变得越来越流行,跟踪器响应的大小变得很重要。解决这个问题的一种方法是让客户端接受 gzip 压缩的 HTTP 响应和紧凑的对等响应(这是迄今为止跟踪器中最流行的格式)。紧凑的对等响应在相同信息量的情况下提供了明显更小的响应。它在BEP23中定义。

然而,即使现在响应相对较小,TCP 握手和拆除仍然会施加一个重要的 const,这就是为什么许多跟踪器正在转向 UDP BEP15的原因。

于 2013-11-09T01:10:28.927 回答