总是打开的端口?像 bittorrent 这样的软件如何在没有端口转发的情况下进行通信?

总是打开的端口?像 bittorrent 这样的软件如何在没有端口转发的情况下进行通信?

即使用户没有在路由器上配置端口转发,bittorrent 客户端如何能够与服务器和其他对等方进行通信?

当然,与进行端口转发相比,速度会降低,但它们仍然可以通信吗? 怎么实现的?

是否存在始终开放的入站端口?

答案1

入站连接由第三方完成。

假设对等点 A 想要连接到防火墙后面的对等点 F。然后对等点 A 指示已经连接到 F 的对等点 B,它想要连接到 F。然后 F 收到消息并连接到 A。我不知道 BT 协议的内部原理,但 B 可能是跟踪器,因为它对两个对等点来说都是众所周知的。要使此方案有效,A 必须接受传入连接。据我所知,在 Gnutella 中,F 的超级对等点扮演了 B 的角色。此方案通常适用于 TCP。

对于 UDP 连接,还请检查 UDP 打洞。

答案2

如果客户端没有打开端口(用大多数小型家用路由器的语言来说),则只会阻止传入的连接。

该路由器后面的机器仍然可以发起与其他机器的连接。一旦发起连接,路由器就会记住这一点并允许双向通信。NAT(允许多台机器共享一个公共 IP 的功能)必须这样做才能正常工作。

因此即使路由器上没有开放端口,也可以进行通信,只需你的电脑启动它;除非您打开端口并将端口连接到路由器后面的特定 IP,否则外部机器无法与该路由器后面的任何计算机发起连接。

我不太热衷于 bittorrent 协议的低级细节,但我认为它或其某些修订版本允许机器通过以某种方式启动与其他机器的连接来接收数据,而不是仅仅监听开放端口并等待外部机器启动连接。

相关内容