客户端 A 使用新端口向 B 发送数据包,因为如果目的地不同,NAT 将使用新端口。
仅当客户端 A 使用 SYMMETRIC NAT 时,客户端 A 才会为不同的目的地使用新端口,这是 VOIP 通信中的最大问题。对称 NAT 不仅会转换您的内部 IP,还会在您每次连接到新目的地时转换您的端口。Rendezvous 服务器 S 不知道客户端 A 已更改其用于联系客户端 B 的端口。
然后 B 将数据包发送到 A 用于与服务器通信的端口。
当客户端 B 向 A 发送数据包时,这将是无用的,因为 B 不知道 A 已更改其端口,并且客户端 B 从 Rendezvous 服务器获取的端口显然已关闭。
A 的 NAT 设备不会因为 A 将此端口用于不同的目的地而丢弃连接吗?
正是客户端 A 将阻止来自 B 的流量,因为客户端 B 已将数据包发送到 A 的那个端口,该端口旨在为集合点服务器打开,而该端口现在已关闭。即使该端口是开放的,它仍然不会接受来自 B 的数据包,因为该端口仅对集合点服务器开放。外面的任何东西都会被丢弃。这就是对称 NAT 始终是一个问题的原因。
如果任一客户端未使用对称 NAT,则客户端 A 只需将“UDP 数据包”发送到 B 的该 IP:端口,该 IP 端口是 A 之前从 Rendezvous 服务器获取的。最终这个数据包也会被 B 阻止,因为 B 没有从 A 请求任何东西,但 A 仍然认为它的数据包已经到达 B,因为数据包是通过 UDP 发送的。然后 B 将在该 IP:A 侦听集合点服务器的端口上向 A 发送数据包。但是这次 A 必须接受来自 B 的数据包,因为 A 认为这是 A 之前发送给 B 的那个请求的响应。然后 A 将再次向 B 发送数据包,B 将接受它作为响应。连接已建立。这称为 UDP 打孔。
但是在对称 NAT 的情况下,通信将如何建立?
标准解决方案是使用 TURN 服务器,它代表中继 NAT 上的遍历实用程序。Turn 服务器将充当两个客户端之间的中间人,即使其中一个或两个客户端都在对称 NAT 之后,它也不会受到影响。

客户端也可以使用 DMZ 和端口转发来代替 TURN 服务器。使用它们中的任何一个都会将每个请求和响应直接重定向到 NAT 后面的主机。
为什么不能使用 STUN 服务器?
不幸的是,如果一个或两个客户端都在对称 NAT 之后,即使 STUN 服务器也无法初始化会话。