我从wikipedia读到了这一行。
" STUN 确实适用于三种类型的 NAT:全锥 NAT、受限锥 NAT 和端口受限锥 NAT。在受限锥或端口受限锥 NAT 的情况下,客户端必须在 NAT 之前向端点发送数据包允许从端点到客户端的数据包。STUN 不适用于对称 NAT "
谁能解释为什么?
我从wikipedia读到了这一行。
" 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
,并告诉外部系统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 地址:端口限制就地,NAT 设备将拒绝来自srv_addr
目的地的数据包。natted_addr_1
更正确地说,在此答案中,“地址”应替换为“地址/端口”,因为 NAT 设备将使用 IP 地址和端口号的组合。
因为 STUN(外部服务器),无法知道 NAT 设备将哪个端口提供给客户端。在对称 NAT 中,客户端在每个连接上获取唯一的端口(池情况下的 ip:端口)