【问题标题】:What is the maximum size of the udp packet which is sent by the mainline DHT node for the get_peers query?主线 DHT 节点为 get_peers 查询发送的 udp 数据包的最大大小是多少?
【发布时间】:2011-08-15 16:30:34
【问题描述】:

主线 DHT 节点为 get_peers 查询发送的 udp 数据包的最大大小是多少? 节点存储 3000 个对等点时如何响应? (在这种情况下,数据包非常大)。 主线 DHT 客户端如何处理它的响应?

提前谢谢你。

【问题讨论】:

    标签: udp response bittorrent dht


    【解决方案1】:

    就像任何 bittorrent 跟踪器一样,响应不必包含每个对等点,只是一个随机选择。

    最受欢迎的客户端(我真的只能代表 uT、BTML 和 libtorrent-rasterbar)有一个他们试图不超过的假定 MTU 大小。假定的 MTU 大小低于 1500 字节(这是典型的最大以太网帧大小),这通常也是您在 Internet 上看到的路径 MTU 的上限。通常最好减少几十个字节,以覆盖通过 PPPoE 和其他类似传输方式运行的连接。

    在通过 IPv6 发送数据包时,如果通过 Teredo(1280 字节)发送数据包,则需要注意使用更低的 MTU,但我提到的这些客户端都不支持基于 IPv6 的 DHT。

    确切地说,uTorrent 假设 MTU 为 1500 - 20 个字节的 IP 标头 - 8 个字节的 UDP 标头 - 24 个字节的潜在GRE header - 8 个字节的潜在PPPoE header - 2 个字节的潜在MPPE header .即 1438 字节的 UDP 有效负载。

    即使您的数据包超过路径 MTU,IP 层也会将它们分段并在端点合并它们,对 bittorrent 客户端透明。

    【讨论】:

      【解决方案2】:

      对于 IPv6 DHT,已定义 1024 字节的上限,请参阅http://bittorrent.org/beps/bep_0032.html

      对于值列表(返回的对等点),节点应该只返回一个适合数据包大小的随机子集,而不是完整列表。

      请注意,IPv6 不支持途中分段。因此,如果想要发送更大的数据包,那么发送方要么必须保守地对数据包进行分段(这会降低可靠性),要么实施套接字错误处理并在用户空间重新发送,因为 UDP 套接字不会自动执行此操作,这与 TCP 不同。为避免这些复杂性和低效率,最好将数据包中的可变大小数据压缩到符合规定的大小。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-09-21
        • 2013-04-26
        • 1970-01-01
        • 1970-01-01
        • 2011-10-07
        • 2016-08-27
        • 1970-01-01
        • 2020-05-25
        相关资源
        最近更新 更多