我已经阅读了很多关于这个主题的内容,包括很多关于SO的内容。所以虽然不是一个编程问题,但希望可以在这里问一下。我是一名程序员并构建一个包含语音聊天的应用程序,如果有帮助的话。
我正在尝试了解UDP转发如何通过NAT工作,特别是对于Skype和Google Talk语音聊天(VOIP)等系统。
我认为路由器正确路由UDP流量的唯一方法是,如果回复是从发送数据包的相同IP /端口组合回来的。或者换句话说,客户端无法从服务器获取UDP数据包,除非它首先发送一个,否则路由器不知道将数据包发送到哪个客户端。
因此,如果我理解正确,Skype和Google Talk等服务会做一些初始设置以帮助对等方找到对方,但在此之后,通信将成为点对点。如果路由器不期望来自客户端IP的任何流量,那么来自客户端的第一个数据包怎么能直接到达另一个客户端呢?
答案 0 :(得分:1)
我正在研究它,因为我正在制作游戏(大学工作)P2P。
1 NAT怎么样? 当客户端发出请求时,NAT可通过门转发(请注意此端口独立于发送它的计算机上的端口),并将源IP更改为您的IP(路由器的公共IP)。现在来了魔术:它在与该请求相关联的ip和端口中存储了一个表,以及用于发送消息的路径的门。因此,当路由器收到请求时,它看起来是什么门和表,以查看谁应该发送请求,无论是哪个ip或端口。
2如何为“远程客户端”配置NAT? 不可能。但客户端可以间接设置“您的”NAT。服务器必须调解连接的启动。 * Client1 cliente2并连接到服务器,服务器向客户端发送cliente2的ip和端口(NAT)。 * client1现在拥有连接到cliente2的数据,因此他将相同的连接发送到服务器,以与数据服务器相同的方式接收数据cliente2。
注1:由于明显的原因,TCP不起作用,即必须是UDP。 注2:NAT表中的数据有多长,如何防止“超时”?好问题,正如我所说,我正在研究它,大声笑,如果有人知道放在这里。
Felippi CM