我正在设计一个在端口 30000 上工作的p2p应用程序。我的路由器不是UPnP,所以我需要将一个端口转发到路由器。但是Skype另一个 p2p 应用程序在我的电脑上没有端口转发。当我用wireshark分析它时,我发现它使用UDP端口48980、58544。我使用的是c++。
这里有一个 python 库,用于Nat PnP 路由器。是否可以以编程方式将端口转发到路由器,而不管路由器和操作系统的类型如何。用 c++ 或任何其他语言做这件事的方法应该是什么。
我正在设计一个在端口 30000 上工作的p2p应用程序。我的路由器不是UPnP,所以我需要将一个端口转发到路由器。但是Skype另一个 p2p 应用程序在我的电脑上没有端口转发。当我用wireshark分析它时,我发现它使用UDP端口48980、58544。我使用的是c++。
这里有一个 python 库,用于Nat PnP 路由器。是否可以以编程方式将端口转发到路由器,而不管路由器和操作系统的类型如何。用 c++ 或任何其他语言做这件事的方法应该是什么。
Skype 的工作方式非常有趣。从我读过的(这是不久前)来看,它的工作原理如下:
这可能过于简化,但最后我检查了一下,这就是它的工作原理。(如果我错了,有人纠正我)。
编辑:修复子弹问题
UDP打洞是(一种)穿越NAT的方式。
您必须使用中间服务器,并从客户端启动通信。正如 Yossarian 所提到的,从那时起,一种可能性是 UDP 打孔。根据应用程序的类型(以及它是否是真正的 P2P),您可能会始终将中间服务器保持在适当的位置。
当无法直接连接时,Skype 使用另一个对等点作为中间点。
即 Peer A 想要连接到 Peer B,但是 Peer B 的所有端口都关闭了,然后通过开放端口的 Peer C 发起通信。