NAT类型完全解析(完全锥形、受限锥形、对称型)

同样是"在NAT之后",具体是哪种类型,会让P2P连接的成功率大不相同。

完全锥形/对称型分类从何而来

这套经典的NAT分类最早出现在2003年定义STUN协议的RFC 3489文档中,用于解释P2P连接能否打通。完全锥形(Full Cone)、受限锥形(Restricted Cone)、端口受限锥形(Port Restricted Cone)、对称型(Symmetric)就是其中的四种分类。后来人们发现,实际路由器和防火墙的行为往往无法完全套入这四类之中,于是2007年发布的RFC 4787用更精细的"映射行为"和"过滤行为"标准取代了这套分类。不过在直观解释NAT开放程度时,这四种经典分类至今仍被广泛使用。

完全锥形(Full Cone)NAT

内部设备只要通过某个端口向外发送过一次数据,之后任何外部主机都可以通过同一个公网端口向内发送数据并被转发进来,是四种类型中最开放的一种。P2P连接最容易建立,但由于外部可以通过可预测的端口访问进来,从安全角度看相对更宽松。

受限锥形(Restricted Cone)NAT

比完全锥形多一层限制:即便数据包发往已映射的公网端口,只有来自内部设备曾经主动发送过数据的那个IP地址的数据包才会被放行,但不检查端口号,因此同一IP地址的其他端口发来的响应依然可以通过。

端口受限锥形(Port Restricted Cone)NAT

不仅要IP地址匹配,连端口号也必须一致才会放行,比受限锥形更加严格。只有内部设备曾经向某个特定IP的特定端口发送过数据,来自完全相同IP和端口组合的响应才能通过。这是家用路由器上常见的类型,在游戏主机的NAT类型显示中通常对应"中等(Moderate)"。

对称型(Symmetric)NAT

内部设备每次连接不同的目标地址,都会被分配一个不同的公网端口,外部因此最难预测端口。由于与某一方通信时获得的映射信息无法复用于与另一方的连接,仅靠STUN打洞往往会失败。这种类型安全性最强,但P2P连接成功率最低,在游戏主机上通常显示为"严格(Strict)"。

NAT类型如何影响P2P和视频通话连接

WebRTC视频通话、网络电话(VoIP)、P2P游戏匹配大多会先通过STUN服务器获取双方的公网IP和端口,再尝试直接连接(打洞)。如果双方都是锥形类NAT,这种方式通常能顺利工作;但只要有一方是对称型NAT,对方获取到的端口在实际通信中就无法复用,直接连接就会失败。这种情况下,应用会改为通过TURN中继服务器转发数据,代价是延迟增加,并消耗中继服务器的带宽。

如何改善自己网络的NAT类型

如果路由器背后还叠加了另一层NAT(比如运营商调制解调器的NAT),形成"双重NAT",NAT类型往往会显得更加受限。把运营商一侧的设备切换为桥接模式,把NAT层级减少为一层,再在路由器上直接为所需端口做端口转发或启用UPnP,通常可以让游戏主机或视频通话应用检测到的NAT类型变得更加开放。

想了解游戏主机上的NAT类型显示

PS5或Xbox上显示的Open(开放)、Moderate(中等)、Strict(严格)这类用户友好的标签,其实是对这里介绍的技术分类做了简化。

不妨一并了解VoIP通话的连接原理

如果想进一步了解NAT类型如何影响通话连接,可以再看看VoIP的SIP、RTP协议具体是如何工作的。

常见问题

现在还在使用完全锥形/对称型这套分类吗?

这四种分类最初见于2003年的RFC 3489文档,2007年发布的RFC 4787用更精确的"映射与过滤行为"标准取代了它。不过在实际工作中直观解释NAT开放程度时,这套经典分类至今仍被广泛使用。

怎么知道自己的网络属于哪种NAT类型?

普通用户很难自行准确判断具体类型,但可以参考游戏主机或视频通话应用自行显示的NAT状态(Open、Moderate、Strict等),或者使用在线STUN测试工具大致了解自己网络的开放程度。