2

我已经阅读了很多关于这个主题的内容,包括很多关于 SO 的内容。所以虽然不完全是一个编程问题,但希望可以在这里问。我是一名程序员,正在构建一个包含语音聊天的应用程序,如果有帮助的话。

我试图了解 UDP 转发如何通过 NAT 工作,特别是对于 Skype 和 Google Talk 语音聊天 (VOIP) 等系统。

我认为路由器正确路由 UDP 流量的唯一方法是,如果回复来自它发送数据包的相同 IP/端口组合。或者换句话说,客户端无法从服务器获取UDP数据包,除非它首先发送一个,否则路由器不知道将数据包发送到哪个客户端。

因此,如果我理解正确的话,Skype 和 Google Talk 等服务会进行一些初始设置以帮助对等方定位彼此,但之后通信变为对等通信。如果路由器不期望来自客户端 IP 的任何流量,那么来自客户端的第一个数据包如何直接到达另一个客户端?

4

1 回答 1

1

我正在研究它,因为我正在制作游戏(大学工作)P2P。

1 如何进行 NAT?当客户端发出请求时,NAT 会通过一扇门转发可用(注意此端口与发送它的计算机上的端口无关),并将源 ip 更改为您的 ip(路由器的公共 IP)。现在来了魔术:它在与该请求关联的 ip 和端口以及他用来发送消息的路由的门中存储了一个表。因此,当路由器收到请求时,它会查看什么是门和表以查看谁应该发送请求,而不管发出请求的 ip 或端口是什么。

2 如何为“远程客户端”配置 NAT?不可能的。但是客户端可以间接设置“你的”NAT。需要一个服务器来调解连接的启动。* Client1 cliente2 并连接到服务器,服务器发送到cliente2 的IP 和端口(NAT)。* client1 现在有数据连接到 cliente2,所以他发送相同的连接到服务器,接收数据 cliente2 与数据服务器相同。

注意1:TCP 不工作的原因很明显,即必须是UDP。Note2:数据在NAT表中存在多长时间,如何防止“超时”?好问题,正如我所说,我正在研究它,如果有人知道的话,请放在这里。

费利皮厘米

于 2012-05-24T04:33:04.460 回答