====== DHT 协议与 API ======
===== 常规笔记 =====
- 强制使用[[http://www.libtorrent.org/dht_sec.html|Libtorrent的DHT安全扩展]], 要求通过外部IP限制节点ID。
- 使用默认的libtorrent的参数: search_branching (alpha) = 5, bucket_size (k) = 8 以及 agressive_lookup = true。
- 在DHT网络中持久储存的资源(如个人资料, 头像等)将每个小时被刷新。 以往的研究表明 ([[http://dl.acm.org/citation.cfm?id=1298325|论文: Profiling a million user dht]]) 在一些假设和配置的情况下,长期资料持久化可以通过每隔几个小时刷新来实现。
- 持久资源也将被保存到磁盘,Twister守护进程重新启动的时候恢复。
===== DHT 命令 =====
==== ping ====
query = {"t":"aa", "z":"q", "q":"ping", "x":{"id":"abcdefghij0123456789"}}
response = {"t":"aa", "z":"r", "r": {"id":"mnopqrstuvwxyz123456"}}
==== findNode ====
query = {"t":"aa", "z":"q", "q":"findNode", "x": {
"id":"abcdefghij0123456789", "target":"mnopqrstuvwxyz123456"}}
response = {"t":"aa", "z":"r", "r": {"id":"0123456789abcdefghij", "nodes": "def456..."}}
==== announcePeer ====
//提示:该命令可能将在未来被删除。//
query = {"t":"aa", "z":"q", "q":"announce_peer", "x": {
"id":"abcdefghij0123456789", "implied_port": 1, "info_hash":"mnopqrstuvwxyz123456",
"port": 6881, "token": "aoeusnth"}}
response = {"t":"aa", "z":"r", "r": {"id":"mnopqrstuvwxyz123456"}}
==== getPeers ====
不像BitTorrent的DHT,getPeers 命令是不存在的。使用命令 getData 和 ''"target"={"username","tracker","m"}'' 来替代。
==== putData ====
query = {"t":"aa", "z":"q", "q":"putData", "x": {
"id":"abcdefghij0123456789", "sig_p":"34fdd3wdw", "sig_user":"nobody", "token": "aoeusnth", "p": {
"v" : "arbitrary-value", "seq" : "10", "time" : "13131321321", height : "1000", "target": {
"n":"name", "r":"resource", "t":"m" }}}}
response = {"t":"aa", "z":"r", "r": {"id":"mnopqrstuvwxyz123456"}}
查看 [[zh:开发:dht_协议:结构#基本结构]] 获得更多详细内容。
提示:target_id是B编码后的'“target”“'字段的哈希值。
==== getData ====
query = {"t":"aa", "z":"q", "q":"getData", "x": {
"id":"abcdefghij0123456789", "justtoken":"0", "target": {
"n":"name", "r":"resource", "t":"m" }}}}
response = {"t":"aa", "z":"r", "r": {"id":"mnopqrstuvwxyz123456", "token": "aoeusnth", "data": [
{"p":"data1", "sig_p":"34fdd3wdw", "sig_user":"nobody",
{"p":"data2", "sig_p":"fg40958ejfdg", "sig_user":"twister" ] }}
查看 [[zh:开发:dht_协议:结构#基本结构]] 获得更多详细内容。
提示:target_id是B编码后的'“target”“'字段的哈希值。