如何连接到路由器后面的P2P客户端?

道歉,如果这个问题之前已经问过,但我不认为我发现的任何问题都是一样的。

我正在devise一个简单的P2P协议,通过这个协议,一个已知的服务器向客户提供彼此的地址,然后他们进行通信 我可以想象,与BitTorrent,Skype和其他P2P应用程序有一些相似之处。

我的问题是,如何识别使用NAT的主机,在一些路由器或防火墙(即99%的家庭用户)后面进行通信,而无需手动端口转发? 我知道这是可能的,因为BitTorrent和Skype工作得很好。

我是一个networking相对新手,所以我非常感谢能够呼吁这个社区的集体智慧。

你需要NAT穿越(nat-t)或NAT穿孔。 这是一个部分解决scheme,许多NAT网关不允许这样做。 这意味着您将需要具有公有IP的服务器作为解决scheme的一部分在受限制的nat客户端之间传递stream量。