【发布时间】:2021-05-28 07:39:27
【问题描述】:
我正在尝试通过 LibTorrent 中的 add_peer() 函数连接到对等点。但是,如果我要从中下载文件的对等方位于 NAT 之后怎么办? Libtorrent 中是否有 NAT Traversal 的功能?
【问题讨论】:
标签: nat libtorrent nat-traversal
我正在尝试通过 LibTorrent 中的 add_peer() 函数连接到对等点。但是,如果我要从中下载文件的对等方位于 NAT 之后怎么办? Libtorrent 中是否有 NAT Traversal 的功能?
【问题讨论】:
标签: nat libtorrent nat-traversal
libtorrent 中的 NAT 遍历仅限于:
听起来您最感兴趣的是 (2),我们假设两个对等点都在 NAT 后面。这通常称为 UDP 打孔。
一般来说,如果您无法控制或影响您尝试连接的对等方,那么您可以采取的措施就会受到限制。
另外,如果两个 NAT 都不是完整的锥体(或者说,p2p 友好的),则对等方可能无法连接。对 p2p 友好的 NAT 通常会接受来自他们之前没有与之交互的 IP 的传入连接。
libtorrent(以及通常的 bittorrent 客户端)使用的主要两种方法是:
通常连接的对等体可以通过对等交换扩展相互引入两个经过 NAT 的对等体。在这种模式下,两个对等点都尝试同时相互连接,希望两个 NAT 都会为正在尝试的端口打开针孔。这仅在 swarm 至少有一个不在 NAT 后面的对等点时才有效。您可以在BEP 55中找到更多相关信息
为 uTP、DHT 和 UDP 跟踪器共享 UDP 端口,并让跟踪器的源端口隐含监听端口和 DHT 通告。运气好的话,其他主机也可以使用该源端口来访问 NATes 客户端。这是因为 uTP 连接也通过 UDP 运行。
【讨论】: