开头废话 (没啥用可以不看)
以前为了学习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:5000 | 203.0.113.9:12580 | 211.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:5000 | 203.0.113.9:12580 | 211.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:5000 | 203.0.113.9:12580 | 211.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:5000 | 203.0.113.9:12580 | 211.134.44.3:3000 |
| 203.0.113.9:11451 | 208.118.212.5:4000 |
即每一个外部主机IP
| 主机A | 路由器A | 允许访问的对象 |
|---|---|---|
| 192.168.1.10:5000 | 203.0.113.9:12580 | 211.134.44.3:3000 |
| 208.118.212.5:4000 |
每一个外部主机IP