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类型变得更加开放。

映射与过滤:决定类型的两个问题

经典的四种类型其实是两个问题的答案。映射问的是:设备与不同目标通信时,路由器是否复用同一个公网端口。过滤问的是:哪些外部发送方可以访问这个公网端口。完全锥形、受限锥形、端口受限锥形都复用同一个映射,区别只在过滤(任何人、相同IP、相同IP和端口)。对称型则会按目标改变映射。RFC 4787把这两种行为分开描述,所以现在的文档更多谈“端点无关映射”,而不是锥形的名字。

打洞分四步

双方先访问STUN服务器,得知自己的公网地址和端口,再通过信令服务器交换这些信息。然后各自向对方的公网地址发包,这会建立外向映射,在多数锥形类NAT上还会放开对回包的过滤。如果两边的包恰好交错到达,双向路径就打通了,通话或对战便直接连上。对称型NAT会在第一步出问题,因为STUN服务器看到的端口并不是通往对方时使用的端口。

ICE:按顺序尝试所有办法

实际应用不会只依赖一种技巧。ICE框架会收集多条候选路径(本地地址、STUN发现的地址、TURN服务器上的中继地址),成对测试,选出可用的最佳一条。所以即使在严格的NAT后面,视频通话通常也能接通,只不过有时要经过中继,延迟更高。支撑大多数浏览器通话的WebRTC使用的就是ICE。

游戏主机的标签与经典类型的对应关系

游戏主机会把情况简化。Xbox显示开放、中等或严格;PlayStation显示NAT类型1(直连)、类型2(大多数情况可用)、类型3(限制最多)。这些标签大致反映主机对外部连接的可达程度,但并不与四个经典名称一一对应,不同游戏的理解也不一样。

运营商级NAT可能让情况更糟

许多移动网络和部分家庭宽带会把用户放在运营商级NAT(CGNAT)之后,也就是多户共用一个公网地址。你无法在不受自己控制的设备上做端口转发,运营商的NAT往往还是对称型或同样严格。如果无论怎么调整自己的路由器,NAT类型都没有改善,可以向运营商咨询公网IP选项或IPv6接入。

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

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

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

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

在家里能解决什么,不能解决什么

先看路由器WAN口是否拿到了公网地址。如果路由器设置页显示的地址与IP查询网站显示的不同,说明上游还有一层NAT,在自己的路由器上怎么设置都无法改变。如果一致,可以开启UPnP,或为游戏主机、电脑设置静态端口转发,并给该设备分配固定的内网地址,这样转发才不会失效。在不了解风险的情况下,不要把设备放进DMZ。UPnP和端口转发都会扩大外部可触及的范围,因此要保持路由器固件更新。为游戏开放端口是便利与风险的取舍,只开放游戏官方说明的端口即可。

为什么“严格”并不总是问题

NAT类型主要影响点对点功能,比如语音聊天、组队系统和没有专用服务器的游戏。对于浏览网页、看视频、下载,以及大多数连接公司服务器的游戏来说,严格NAT在实际使用中几乎没有差别。如果只在玩家自己做主机的对局中卡顿,NAT类型可能是原因;如果所有服务都慢,应当检查带宽、Wi-Fi质量和路由。另外经典名称容易让人觉得很精确,实际上许多路由器对UDP和TCP的行为不同,负载高时行为还会变化。

常见问题

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

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

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

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

使用VPN会改变NAT类型吗?

可能会。流量会从VPN服务商的NAT出去,你看到的类型就是服务商那一侧的,可能比家里的路由器好,也可能更差。有些服务商提供端口转发,有些则禁止。

换成IPv6能解决NAT类型问题吗?

多数情况下有帮助,因为IPv6设备可以拥有无需NAT就能被访问的全球地址。家用路由器默认仍带有状态防火墙,可能需要放行特定的入站流量,但不再有会破坏打洞的端口转换。

对称型NAT是不是更安全?

它确实更难被外部访问,但这只是附带效果,不是安全功能。真正的防护来自防火墙、及时更新软件和合理暴露服务,而不是NAT分配端口的方式。