0

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

4

1 回答 1

0

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 运行。

于 2021-03-04T14:25:20.927 回答