没有端口转发,Skype如何工作?

Xin*_*nus 32 p2p portforwarding

我正在设计一个在端口30000上工作的p2p应用程序.我的路由器不是UPnP所以我需要将端口转发到路由器.但Skype是另一个p2p应用程序在我的电脑上没有端口转发.当我用wireshark分析它时,我发现它使用的是UDP端口48980,58544.我正在使用c ++.

在Python库在这里它会为纳特即插即用路由器.是否可以以编程方式将端口转发到路由器,而不管路由器和操作系统的类型如何.用c ++或任何其他语言做什么的方法应该是什么.

rei*_*ein 20

Skype的工作方式非常有趣.从我读过的内容(这是前一段时间),它的工作原理如下:

  • Skype服务器维护所有用户和IP的列表.
  • Skype用户A想要与用户B通话
  • Skype用户A向用户B的IP地址发送网络数据包并等待响应.(用户B永远不会获得此数据包).
  • Skype用户A通知服务器正在等待响应的IP /端口组合
  • 服务器通知用户B在指定端口上向用户A发送响应
  • 建立连接.

这可能过度简化,但最后我检查过,这是它的工作原理.(如果我错了,有人会纠正我).

编辑:修复子弹问题

  • 这个答案仅描述了A并且未能与B和服务器向用户B发送正确的IP /端口组合进行通信.它缺少主要点,称为打孔,并且在@MartinBeckett提供的链接中有很好的描述.我只想补充一点,如果路由器支持UPnP,也可以转发端口而不管路由器和操作系统的类型. (4认同)
  • 但问题是客户的 IP 是 PUBLIC 吗?参见例如 A 需要与 B 通信,服务器知道 B 的 IP 但它使用什么 IP?如果是这种情况,您可以ping 任何人的IP 吗?对不起,如果它是愚蠢的 (2认同)

not*_*row 18

UDP穿孔是(一种)遍历NAT的方法.