即使用户没有在其路由器上configuration端口转发,BitTorrent客户端如何pipe理与服务器和其他对等端的通信?
当然,与端口转发完成的速度相比,速度会有所下降,但是他们仍然能够进行通信? 怎么样???
有没有任何总是打开的入站端口?
入站连接由第三个对等方完成。
说对等体A想连接到防火墙后面的对等体F. 然后,对等体A指示已经连接到F的对等体B,它想要连接到F.然后获得该消息并且连接到A.我不知道BT协议的内部,但是B可以是例如跟踪器这是众所周知的同行。 为了使这种情况起作用,A必须接受传入的连接。 在Gnutella的AFAIK中,F的ultrapeer扮演了B的angular色。这种情况通常适用于TCP。
对于UDP连接,请检查UDP打孔。
如果客户端没有打开端口(使用大多数小型常驻路由器的语言),则只阻止传入连接。
路由器后面的机器仍然可以启动与其他人的连接。 一旦这样做,路由器就会记住并允许双向通信。 NAT,让你有多台机器共享一个公网IP的function,必须要做到这一点。
因此,在路由器上没有开放端口的情况下,通信是可能的,只是您的计算机必须启动它 ; 除非您打开端口,并且将端口连接到路由器后面的特定IP,否则外部机器无法启动与该路由器后面的任何计算机的连接。
我不太喜欢BitTorrent协议的低级细节,但是我认为它或者其一些修改允许机器通过以某种方式启动与其他人的连接来接收数据,而不是仅仅听一个开放的端口并等待外部机器启动连接。