我从维基百科中读到了这一行。
" STUN 确实可以与三种类型的 NAT 一起使用:全锥体 NAT、受限锥体 NAT 和端口受限锥体 NAT。在受限锥体或端口受限锥体 NAT 的情况下,客户端必须在 NAT 之前向端点发送数据包允许从端点到客户端的数据包。STUN 不适用于对称 NAT ”
谁能解释为什么?
我从维基百科中读到了这一行。
" STUN 确实可以与三种类型的 NAT 一起使用:全锥体 NAT、受限锥体 NAT 和端口受限锥体 NAT。在受限锥体或端口受限锥体 NAT 的情况下,客户端必须在 NAT 之前向端点发送数据包允许从端点到客户端的数据包。STUN 不适用于对称 NAT ”
谁能解释为什么?
假设我们在 address 有一个 STUN 服务器,在 addressstun_addr
有一个服务器srv_addr
。使用 STUN 通常是这样的:
stun_addr
通过 NAT 设备连接到 STUN 服务器。NAT 设备将源地址转换为natted_addr_1
natted_addr_1
srv_addr
通过NAT设备联系服务器at ,natted_addr_1
如果要到达客户端,告诉外部系统使用natted_addr_1
这仅在 NAT 设备natted_addr_1
用于与 STUN 服务器和其他外部系统的通信时才有效。更具体地说,它仅在 NAT 设备将在步骤 4 中到达的数据包传送到客户端时才有效。
对称 NAT 设备将在步骤 1 和 3 中使用不同的转换,因为流量的目标地址不同。在步骤 3 中,发送到服务器的数据包中的源地址被转换为某个其他地址natted_addr_2
。
NAT 设备只知道这些源地址和目标地址的组合,并且只允许它们返回:
stun_addr
到natted_addr_1
srv_addr
到natted_addr_2
不幸的是,服务器已被告知要使用,natted_addr_1
但由于 NAT 地址:端口限制就位,来自srv_addr
目的地的数据包natted_addr_1
将被 NAT 设备拒绝。
更准确地说,本答案中的“地址”应替换为“地址/端口”,因为 NAT 设备将使用 IP 地址和端口号的组合。
因为 STUN(外部服务器),无法知道 NAT 设备将给客户端哪个端口。在对称 NAT 中,客户端在每个连接上获得唯一的端口(ip:port in pool 情况)