我正在设计一个在30000端口上工作的p2p应用程序。我的路由器不支持UPnP,所以我需要将端口转发到路由器。但另一个p2p应用程序Skype在我的电脑上无需进行端口转发。当我使用Wireshark分析它时,我发现它正在使用UDP端口48980、58544。我正在使用C++。
这里有一个Python库Nat PnP routers可以为此做出处理。是否可能编写程序将端口转发到路由器,而不考虑路由器和操作系统的类型?在C++或其他语言中如何实现?
我正在设计一个在30000端口上工作的p2p应用程序。我的路由器不支持UPnP,所以我需要将端口转发到路由器。但另一个p2p应用程序Skype在我的电脑上无需进行端口转发。当我使用Wireshark分析它时,我发现它正在使用UDP端口48980、58544。我正在使用C++。
这里有一个Python库Nat PnP routers可以为此做出处理。是否可能编写程序将端口转发到路由器,而不考虑路由器和操作系统的类型?在C++或其他语言中如何实现?
Skype以一种非常有趣的方式工作。从我读过的资料来看(这是一段时间以前的事),它的工作原理如下:
这可能过于简化,但据我所知,这就是它的工作方式。(如果我错了,请有人纠正我。)
编辑:修复了项目符号问题。
UDP穿透技术是通过NAT的一种方法之一。
你需要使用一个中介服务器,并从客户端发起通信。正如Yossarian所提到的那样,从那一点出发,一种可能性是UDP打洞。根据应用程序的类型(以及它是否真正是P2P),您可能会在整个过程中保留中间服务器。
Skype在直接连接不可能时,使用其他对等点作为中间点。
例如,对等点A想要连接到对等点B,但是对等点B的所有端口都关闭了,那么通信将通过具有开放端口的对等点C进行初始化。