1141 字
6 分钟
关于NAT的理解分享

开头废话 (没啥用可以不看)#

以前为了学习NAT相关知识,在互联网上搜了一堆文章看,要么讲的太高深看不懂,要么就是讲的太烂看着费劲。最后只剩下“全锥型、受限锥型、端口受限锥型以及对称型”的模糊印象,至于为什么要叫某某锥型、对称型,当时的脑子真没形象的记住。不过现在有了AI,那是真好用,不懂的就狠狠问。终于,现在对于NAT有了一些粗浅的理解,就在这里记录并分享一下吧。

NAT的四种类型#

NAT类型外部访问条件谁能进来
全锥NAT(Full Cone)任意IP+任意端口(无需通信过)任何人都能进来
受限锥型NAT(Restricted Cone)必须是曾经通信过的IP+任意端口通信过的同一IP的任意端口
端口受限锥型NAT(Port-Restricted Cone)必须是曾经通信过的IP+对应端口通信过的同一IP+Port
对称型NAT(Symmetric)每个目标建立独立映射,没有固定的IP通信过的同一IP+Port

假设有三个设备,分别叫主机A,路由器A,主机B。主机A在路由器A之下。

全锥型NAT#

假设对应设备的IP情况如下:
主机A 192.168.1.10
路由器A公网IP 203.0.113.9

当内网主机A第一次通过5000端口向外部发出包时,不论这个包是发往外部的哪里,路由器会建立类似如下的NAT映射

主机A 192.168.1.10:5000 -> 路由器A 203.0.113.9:40001

根据全锥型NAT的特征,任意IP的任意端口都能访问,于是主机B可以向203.0.113.9:40001发包,路由器A再根据NAT映射将包转发给主机A的5000端口,从而主机B访问到主机A。如果外部还存在主机C、主机D等想要访问主机A,一样是通过向203.0.113.9:40001发包即可。

受限锥NAT#

假设对应设备的IP情况如下:
主机A 192.168.1.10
路由器A 203.0.113.9
主机B 211.134.44.3

当内网主机A第一次通过5000端口向外部的主机B的3000端口发出包时,路由器A建立NAT映射

主机A路由器A允许访问的对象
192.168.1.10:5000203.0.113.9:12580211.134.44.3

根据受限锥NAT特征,通信过的同一IP的任意端口允许访问。主机B任意端口发往203.0.113.9:12580包都会根据NAT映射转发至192.168.1.10:5000(即主机A的5000端口)。此时只有211.134.44.3(主机B)能通过任意端口访问到主机A。主机C因为在NAT映射中没有记录,所以当主机C向203.0.113.9:12580发包时包会被丢弃,因此无法访问到主机A。

端口受限锥NAT#

假设对应设备的IP情况如下:
主机A 192.168.1.10
路由器A 203.0.113.9
主机B 211.134.44.3

当内网主机A第一次通过5000端口向外部的主机B的3000端口发出包时,路由器A建立NAT映射

主机A路由器A允许访问的对象
192.168.1.10:5000203.0.113.9:12580211.134.44.3:3000

端口受限锥NAT允许同一IP的对应端口访问,所以211.134.44.3(主机B)通过3000端口发往203.0.113.9:12580包都会根据NAT映射转发至192.168.1.10:5000(即主机A的5000端口)。此时只有211.134.44.3:3000能访问到主机A。主机C因为在NAT映射中没有记录,所以当主机C向203.0.113.9:12580发包时包会被丢弃,因此无法访问到主机A。

对称NAT#

假设对应设备的IP情况如下:
主机A 192.168.1.10
路由器A 203.0.113.9
主机B 211.134.44.3

当内网主机A第一次通过5000端口向外部的主机B的3000端口发出包时,路由器A建立NAT映射

主机A路由器A允许访问的对象
192.168.1.10:5000203.0.113.9:12580211.134.44.3:3000

这样看着是不是和端口受限锥NAT一样,那就错了。

对称NAT的不同之处#

在对称NAT中,当主机A(192.168.1.10:5000)向主机C(208.118.212.5:4000)发包时,NAT映射就变成了这样

主机A路由器A允许访问的对象
192.168.1.10:5000203.0.113.9:12580211.134.44.3:3000
203.0.113.9:11451208.118.212.5:4000

即每一个外部主机IP对应路由器A的不同Port,一对一的关系。 而不管是受限锥NAT还是端口受限锥NAT,当主机A(192.168.1.10:5000)向主机C(208.118.212.5:4000)发包时,NAT映射是这样的

主机A路由器A允许访问的对象
192.168.1.10:5000203.0.113.9:12580211.134.44.3:3000
208.118.212.5:4000

每一个外部主机IP对应的是路由器A的同一Port,是多对一关系。

…未完待续#

关于NAT的理解分享
https://fuwari.vercel.app/posts/nat-study/
作者
just4null
发布于
2025-08-28
许可协议
CC BY-NC-SA 4.0