如何在udp连接中绕过NAT /防火墙

时间:2012-11-11 13:22:53

标签: c++ networking udp nat

我正在编写语音聊天应用程序,但问题是当客户端使用路由器防火墙阻止连接时

我用tcp连接解决了这个问题但是用udp连接我不知道怎么能解决这个问题

我通过这一步尝试udp hole

  1. 客户端A发送至(服务器)ip和用户名
  2. 客户端B发送到(服务器)ip和用户名
  3. (服务器)发送给客户端B客户端A信息 - 开始语音聊天
  4. (服务器)向客户端发送客户端B信息 - 开始语音聊天
  5. 但是这项工作有一段时间,很多时候没有用,我不知道为什么。 任何帮助。

2 个答案:

答案 0 :(得分:3)

你正在尝试的是UDP洞打孔。但很少有具有对称NAT,打孔的路由器非常困难且不一致(如果可能)。阅读维基百科上的不同NAT,您将获得更多洞察力。

答案 1 :(得分:3)

NAT穿透需要外部“匹配”服务器,并且可以在所有BUT非对称路由器和防火墙上使用。简单地说,这些“对称”路由器每次更改目标的IP或PORT时都会更改数据的出站/入站端口,从而有效地使服务器尝试执行的“匹配”无效。

还有其他“狡猾”的做法,但他们缺乏连贯性。

我建议你阅读有关NAT类型(不对称,对称,全锥,限制锥,端口重构锥)的差异。另外,请确保您阅读了有关STUN的信息,它允许您识别客户端正在运行的NAT类型。最后,您应该阅读UPnP这是大多数路由器所具有的功能,并允许程序自行注册和打开端口,而无需用户通过路由器接口手动执行此操作。