公众号旧文

你知道NAT(网络地址转换)有多少种类型吗?

作者:胖子阅读 —

想必很多人都知道 NAT,但却很少有人知道,NAT 其实并不是一种技术,而是一大类技术的统称。

简单的说,NAT 就是一种让内网地址和公网地址之间进行转换的机制。 我们家里的路由器、公司的防火墙、甚至运营商的网络里,都在大量的使用 NAT。

如果按照常见程度来排序,大致可以分为下面几种。

一、端口地址转换(PAT / NAPT)——最常见的 NAT

这是绝大多数家庭网络都在使用的一种 NAT。

在家里,所有设备通常都是这样的地址:

192.168.1.10
192.168.1.11
192.168.1.12

这些地址叫私有地址,是不能直接访问互联网的。

于是路由器会做一件事:

把所有设备的访问请求,统一转换成一个公网 IP,再通过不同的端口进行区分。

例如:

192.168.1.10:52341 → 1.2.3.4:10001
192.168.1.11:52342 → 1.2.3.4:10002
192.168.1.12:52343 → 1.2.3.4:10003

这样一来:

  • 外网只看到 一个 IP
  • 但路由器可以根据 端口号 判断数据属于哪个设备

这种技术叫:

PAT(Port Address Translation) 也叫 NAPT(Network Address Port Translation)。

可以理解为:一栋公寓只有一个门牌号,但里面有很多房间号。

二、静态 NAT(Static NAT)——服务器常用

静态 NAT 就简单得多。

它是一对一的固定映射。

例如:

公网 IP:1.2.3.4
内网 IP:192.168.1.10

永远对应。

1.2.3.4  ↔  192.168.1.10

这种方式常见于:

  • 公司服务器
  • 数据中心
  • 需要从外网访问的设备

比如:

  • 外网访问 1.2.3.4
  • 实际进入的是内网服务器 `192.168.1.10```

这种 NAT 的优点是:

  • 稳定
  • 地址固定
  • 外网访问方便

缺点是需要占用一个公网 IP。

三、动态 NAT(Dynamic NAT)——曾经流行,现在较少见

动态 NAT 也是一对一转换,但和静态 NAT 不同的是:

它不是固定的。

假设网络里有一个公网 IP 池:

1.2.3.1
1.2.3.2
1.2.3.3

当内网设备访问互联网时,系统会:

随机分配一个公网 IP。

例如:

192.168.1.10 → 1.2.3.1
192.168.1.11 → 1.2.3.2

使用结束后,这个 IP 会被释放,再给别人用。

这种方式曾经比较常见,但后来逐渐被 端口地址转换(PAT) 取代,因为端口地址转换可以让几百个设备共用一个公网 IP。

四、完全锥形 NAT(Full Cone NAT)——对 P2P 最友好的类型

上面说的几种,是按地址转换方式分类。

而在游戏、P2P、语音聊天等场景中,人们更关心另一种分类:

NAT 的开放程度。

其中最开放的一种叫:

Full Cone NAT(完全锥形 NAT)

它的规则很简单:

只要内网设备建立过一次映射,任何外部主机都可以向这个端口发送数据。

例如:

192.168.1.10:1234 → 1.2.3.4:50000

那么之后:

任何IP → 1.2.3.4:50000

都可以到达这个设备。

这种 NAT 的特点是:

  • 非常开放
  • 打洞成功率高
  • P2P 网络最喜欢

不过现实中并不多见。

五、受限锥形 NAT(Restricted Cone NAT)

这种 NAT 比 Full Cone 稍微严格一点。

规则变成:

只有曾经通信过的 IP 地址,才能给你发数据。

例如:

192.168.1.10 → 8.8.8.8

那么之后:

8.8.8.8 → 可以回包
1.1.1.1 → 会被拦截

也就是说:

外网不能随便访问你。

必须你先联系过它。

六、端口受限锥形 NAT(Port Restricted NAT)

这是再严格一点的版本。

限制从 IP 变成 IP + 端口

例如:

192.168.1.10 → 8.8.8.8:3478

那么只允许:

8.8.8.8:3478 → 回包

如果端口不同:

8.8.8.8:80

也会被拒绝。

这种 NAT 在很多家用路由器里都能见到。

七、对称 NAT(Symmetric NAT)——最严格的一种

最后一种是:

Symmetric NAT(对称 NAT)

这是最复杂、也最严格的 NAT。

它的特点是:

每个连接都会生成不同的端口映射。

例如:

192.168.1.10 → 8.8.8.8
公网端口:50001

但如果访问另一台服务器:

192.168.1.10 → 1.1.1.1
公网端口:50002

端口完全不同。

这意味着外部主机几乎不可能预测端口。

因此:

  • P2P 打洞成功率很低
  • 很多游戏联机会失败

这种 NAT 常见于运营商网络。

八、运营商级 NAT(CGNAT)

现在很多家庭宽带其实还处在另一层 NAT 里面。

这种 NAT 叫:

CGNAT(Carrier Grade NAT)

结构大概是:

家庭设备
↓
家庭路由器 NAT
↓
运营商 NAT
↓
互联网

运营商会使用专门的地址段:

100.64.0.0/10

也就是说:

很多人看起来有公网,其实是共享的。

总结

如果按常见程度排序,大致是:

1️⃣ 端口地址转换(PAT) —— 家用网络最常见 2️⃣ 静态 NAT —— 服务器常见 3️⃣ 动态 NAT —— 现在较少见 4️⃣ Full Cone NAT —— 最开放 5️⃣ Restricted Cone NAT —— IP限制 6️⃣ Port Restricted NAT —— IP+端口限制 7️⃣ Symmetric NAT —— 最严格 8️⃣ CGNAT —— 运营商大规模使用


你还可能感兴趣的文章:

天气预报中经常提到的“河套地区”是哪里?

你知道127.0.0.1是本机,那127.0.0.2是谁?

一台服务器最多能同时服务多少人?

俩192.168.0.0/24互联,怎么解决内网冲突