【问题标题】:LibTorrent Nat TraversalLibTorrent Nat 遍历
【发布时间】:2021-05-28 07:39:27
【问题描述】:

我正在尝试通过 LibTorrent 中的 add_peer() 函数连接到对等点。但是,如果我要从中下载文件的对等方位于 NAT 之后怎么办? Libtorrent 中是否有 NAT Traversal 的功能?

【问题讨论】:

    标签: nat libtorrent nat-traversal


    【解决方案1】:

    libtorrent 中的 NAT 遍历仅限于:

    1. 使用 UPnP、NAT-PMP 和 PCP 进行显式端口转发。
    2. 隐式(机会主义)尝试通过外部端口访问对等方
    3. 接收连接尝试的对等方不在 NAT 之后,但发起对等方在。这就是 NAT 应该支持的情况。

    听起来您最感兴趣的是 (2),我们假设两个对等点都在 NAT 后面。这通常称为 UDP 打孔。

    一般来说,如果您无法控制或影响您尝试连接的对等方,那么您可以采取的措施就会受到限制。

    另外,如果两个 NAT 都不是完整的锥体(或者说,p2p 友好的),则对等方可能无法连接。对 p2p 友好的 NAT 通常会接受来自他们之前没有与之交互的 IP 的传入连接。

    libtorrent(以及通常的 bittorrent 客户端)使用的主要两种方法是:

    1. 通常连接的对等体可以通过对等交换扩展相互引入两个经过 NAT 的对等体。在这种模式下,两个对等点都尝试同时相互连接,希望两个 NAT 都会为正在尝试的端口打开针孔。这仅在 swarm 至少有一个不在 NAT 后面的对等点时才有效。您可以在BEP 55中找到更多相关信息

    2. 为 uTP、DHT 和 UDP 跟踪器共享 UDP 端口,并让跟踪器的源端口隐含监听端口和 DHT 通告。运气好的话,其他主机也可以使用该源端口来访问 NATes 客户端。这是因为 uTP 连接也通过 UDP 运行。

    【讨论】:

      猜你喜欢
      • 2011-06-03
      • 1970-01-01
      • 2015-10-13
      • 1970-01-01
      • 2017-10-17
      • 2016-12-11
      • 1970-01-01
      • 2011-07-18
      • 1970-01-01
      相关资源
      最近更新 更多