【问题标题】:Peer to peer connection, when one peer behind NAT对等连接,当 NAT 后面有一个对等点时
【发布时间】:2014-11-12 12:39:02
【问题描述】:

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

  1. 只有 1 个(我的)路由器可以满足我的所有需求(本地和外部 ip、端口映射)
  2. 3 个路由器只显示本地 ip,也许(我没有测试过)做端口映射
  3. 1个路由器支持upnp,但是miniupnpc找不到设备
  4. 1个路由器不支持upnp(用upnp开发者工具测试)

所以,我有两个问题:

  1. UPNP 不是很常见,还是我运气不好,或者使用 miniupnpc 错误?
  2. 有没有其他方法可以建立点对点UDP连接,不需要外部服务器?(所以不打孔)

谢谢!

【问题讨论】:

    标签: c++ c networking upnp


    【解决方案1】:
    1. UPNP 不是很常见,还是我运气不好,或者使用 miniupnpc 错误?

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

    还有其他方法可以建立点对点 UDP 连接吗? 不需要外部服务器?(所以不打孔)

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

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

    【讨论】:

      猜你喜欢
      • 2020-04-10
      • 1970-01-01
      • 1970-01-01
      • 2011-07-01
      • 1970-01-01
      • 2020-09-07
      • 2012-05-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多