主线DHT节点为get_peers查询发送的udp数据包的最大大小是多少? 节点在存储3000个对等体时如何响应? (在这种情况下,数据包非常大)。 主线DHT客户端如何处理它的响应?
提前谢谢。
答案 0 :(得分:3)
就像任何bittorrent跟踪器一样,响应不必包含每个对等体,只需随机选择。
最受欢迎的客户端(我真的只能说uT,BTML和libtorrent-rasterbar)具有假设的MTU大小,他们试图不超过。假设的MTU大小低于 1500 字节(这是典型的最大以太网帧大小),这通常是您在互联网上看到的路径MTU的上端。通常最好从中删除几十个字节,以覆盖通过PPPoE和其他类似传输的连接。
当通过IPv6发送数据包时,如果它超过Teredo(1280字节),则需要注意使用更低的MTU,但我提到的这些客户端都没有支持DHT over IPv6。
准确地说,uTorrent假设MTU为1500 - 20字节的IP头 - 8字节的UDP -header - 24字节的潜在GRE header - 8字节的潜在PPPoE header - 2字节潜在的MPPE header。即 1438 字节的UDP有效负载。
即使你的数据包超过路径MTU,IP层也会将它们分段并在端点合并它们,对bittorrent客户端是透明的。
答案 1 :(得分:2)
对于IPv6 DHT,已定义了1024字节的上限,请参阅http://bittorrent.org/beps/bep_0032.html
对于值列表(返回的对等体),节点应该返回一个适合数据包大小的随机子集,而不是完整列表。
请注意,IPv6不支持路由碎片。因此,如果想要发送更大的数据包,则发送方必须保守地分段数据包(这会降低可靠性)或实现套接字错误处理并在用户空间重新发送,因为UDP套接字不会自动执行此操作,这与TCP不同。为了避免这些复杂性和低效率,最好只将数据包中的可变大小数据压缩,直到它符合规定的大小。