点对点连接,当NAT后面有一个对等体

时间:2014-09-18 08:48:46

标签: c++ c networking upnp

好的,所以我需要在C ++中使用我的应用程序来建立点对点UDP连接。我考虑过打孔和UPNP(使用端口映射)。打孔似乎有点乱:你需要服务器,大量的垃圾UDP数据包。我真的不想弄乱服务器,所以我选择了UPNP。我已经建立了miniupnpc http://miniupnp.free.fr/库,并乐意在家中使用它。但是当我在其他网络中尝试我的应用程序时,我的结果非常令人沮丧:

  1. 只有1(我的)路由器可以完成我需要的一切(本地和外部IP,端口映射)
  2. 3个路由器只显示本地ip,并且可能(我没有测试过)进行端口映射
  3. 1路由器支持upnp,但miniupnpc找不到设备
  4. 1路由器不支持upnp(使用upnp开发人员工具测试)
  5. 所以,我有两个问题:

    1. UPNP不是很常见,或者我只是不走运,还是使用miniupnpc错了?
    2. 有没有其他方法可以进行点对点UDP连接,这不需要外部服务器?(所以不要打孔)
    3. 谢谢!

1 个答案:

答案 0 :(得分:2)

  
      
  1. UPNP不是很常见,或者我只是不走运,还是使用miniupnpc错了?
  2.   

您无法信任随机路由器以支持UPnP IGD端口映射,您绝对不能相信要启用的功能。

  

是否还有其他方法可以进行点对点UDP连接   不需要外部服务器?(所以不要打孔)

第三方服务器严格来说并不是典型家庭网络中的打孔所必需的,但是你需要一种方法让端点了解彼此的外部IP地址和端口:此时两台机器都可以开始向每个服务器发送消息其他:第一条消息确实会丢弃,但是当路由器发现内部IP已经将数据包发送到外部IP时,它也会允许传入流量(因为路由器认为这些是来自内部IP的数据包的响应,即使他们不是真的。)

请参阅ICE了解该领域标准的内容。