对DHT文档中的一些错误的修正

1633阅读 0评论2009-09-05 pagx
分类:系统运维

参照utorrent的行为,对比文档中的区别有:
1、支持的请求是: ping get_peers find_node announce_peer
{ "d1:ad2:id20:abcdefghij0123456789e1:q4:ping1:t1:P1:y1:qe" };
{“d1:ad2:id20:abcdefghij01234567896:target20:abcdefghij0123456789e"
      "1:q9:find_node1:t4:FFFF1:y1:qe" }
{ "d1:ad2:id20:000000000000000000009:info_hash"
      "20:mnopqrstuvwxyz1234564:porti6882e5:token20:00000000000000000000e"
      "1:q13:announce_peer1:t3:xxl1:y1:qe"}
{  "d1:ad2:id20:000000000000000000009:info_hash"
        "20:mnopqrstuvwxyz123456e1:q9:get_peers1:t1:X1:y1:qe"}
2、响应数据包格式为
ping 和 announce_peer 的响应包:
{ "d1:rd2:id20:098765432112345567890e1:t3:xxl1:v4:UT=.1:y1:re" }
对于 find_node 的响应包:
{ "d1:rd2:id20:0987654321123455678905:nodes208:.......e1:t3:xxl1:v4:UT=.1:y1:re" }
对于 get_peers 的响应包:
{ "d1:rd2:id20:0987654321123455678905:nodes182:.......5:token20:xxxx...e"
      "1:t3:xxl1:v4:UT=.1:y1:re" }
或者:
{ "d1:rd2:id20:0987654321123455678905:nodes182:......."
      "6:valuesl6:xxxxxx6:yyyyyye5:token20:xxxx...e"
      "1:t3:xxl1:v4:UT=.1:y1:re" }
3、对于utorrent来说,token是20字节的类似SHA1数值的字符串。
4、可以看出即使能够找到values,get_peers也会同时返回最近的nodes的。
5、utorrent不会对peer进行合并操作,所以返回的数据的peer中存在重复的
6、似乎router.utorrent.com:6881对于announce_peer只是简单的响应,并不会存储peer信息,所以下次请求一样会是空的。
7、很明显 announce_peer 不是文档例子中的 announce_peers了。
8、t是长度>1的串。而不是文档例子中的一个整数。
9、对于values的格式是 l6:xxxxxx6:yyyyyy6:zzzzzze这中方式。
上一篇:减色算法: 24位色图转换为256色图。
下一篇:使用waveIn进行录音