我从Wikipedia中读到了这行。


“ STUN可以使用三种类型的NAT:全锥NAT,受限锥NAT和端口受限锥NAT。对于受限
锥或端口受限锥NAT,客户端必须先向端点发送数据包
,然后NAT才允许从端点
到客户端的数据包。对称NAT“


谁能解释为什么?

#1 楼

因为是STUN(外部服务器),所以无法知道NAT设备将哪个端口提供给客户端。在对称NAT中,客户端在每个连接上获得唯一的端口(在池情况下为IP:端口)

#2 楼

假设我们有一个位于地址stun_addr的STUN服务器和一个位于地址srv_addr的服务器。使用STUN通常是这样的:


客户端通过NAT设备连接到位于stun_addr的STUN服务器。 NAT设备将源地址转换为natted_addr_1

STUN服务器告诉客户端从其接收连接的地址,即natted_addr_1
客户端通过NAT设备与srv_addr的服务器联系,并告知如果外部系统希望到达客户端,则使用natted_addr_1
外部系统使用natted_addr_1将某些内容发送到客户端


这仅在NAT设备同时使用natted_addr_1与STUN服务器和其他外部系统的通信。更具体地说,只有当NAT设备将在步骤4中到达的数据包传递到客户端时,它才起作用。交通不同。在第3步中,发送到服务器的数据包中的源地址将转换为其他地址natted_addr_2


stun_addrnatted_addr_1

srv_addrnatted_addr_2



很遗憾,服务器被告知使用natted_addr_1但是由于到位的NAT地址:端口限制,从srv_addr发送到natted_addr_1的数据包将被NAT设备拒绝。

为了更正确,此答案中的“地址”应替换为“地址/端口”,因为NAT设备可以与IP地址和端口号结合使用。

评论


很好的解释。这帮助我理解了为什么STUN不适用于对称NAT。我仍在努力的是,在WebRTC的世界中,通过STUN在地址或端口限制锥NAT上生成的候选者是否会成功?似乎在所有这些情况下,UDP打孔都会失败。我的理解正确吗?

–三元
14-10-16在13:46

对我来说,这听起来像是一个新问题。由于有关不同NAT类型的术语可能会造成混淆,因此,如果您愿意,您可以在站点上提出更多有关上下文的新问题。

– Gerben
14-10-16在18:16

当然,您在这里进入networkengineering.stackexchange.com/questions/12509/…

–三元
14-10-16在18:21