以下内容转自维基百科
#概述#
无 NAT 网络,假设每个接入子网都需要一组 /24 的 IP ,而且还能对外连接,对外的路由至少要保留或申请 1000 个对外 IP
带 NAT 网络,通过 NAT 转换,接入子网可以使用私用 IP ,对外连接时由路由绑定私用 IP 与对外 IP 的关系,修改传输的 IP 包上的地址,从而只需要 255 个对外 IP 就能满足内部接入子网的对外连接需求
1990 年代中期, NAT 是作为一种解决 IPv4 地址短缺以避免保留 IP 地址困难的方案而流行起来的。网络地址转换在很多国家都有很广泛的使用。所以 NAT 就成了家庭和小型办公室网络连接上的路由器的一个标准特征,因为对他们来说,申请独立的 IP 地址的代价要高于所带来的效益。
在一个典型的配置中,一个本地网络使用一个专有网络的指定子网(比如 192.168.x.x 或 10.x.x.x )和连在这个网络上的一个路由器。这个路由器占有这个网络地址空间的一个专有地址(比如 192.168.0.1 ),同时它还通过一个或多个因特网服务提供商提供的公有的 IP 地址(叫做“过载” NAT )连接到因特网上。当信息由本地网络向因特网传递时,源地址被立即从专有地址转换为公用地址。由路由器跟踪每个连接上的基本数据,主要是目的地址和端口。当有回复返回路由器时,它通过输出阶段记录的连接跟踪数据来决定该转发给内部网的哪个主机;如果有多个公用地址可用,当数据包返回时, TCP 或 UDP 客户机的端口号可以用来分解数据包。对于因特网上的一个系统,路由器本身充当通信的源和目的地址。
流行在网络上的一种看法认为, IPv6 的广泛采用将使得 NAT 不再需要,因为 NAT 只是一个处理 IPv4 的地址空间不足的方法。
#基本网络地址转换#
这一种也可称作 NAT 或“静态 NAT ”。它在技术上比较简单一点,仅支持地址转换,不支持端口映射。 Basic NAT 要求对每一个当前连接都要对应一个公网 IP 地址,因此要维护一个公网的地址池。宽带( broadband )路由器通常使用这种方式来允许一台指定的设备去管理所有的外部链接,甚至当路由器本身只有一个可用外部 IP 时也如此,这台路由器有时也被标记为 DMZ 主机。
基本 NAT 要维护一个无端口号 NAT 表,结构如下。
内网 IP 外网 IP
192.168.1.55 219.152.168.222
192.168.1.59 219.152.168.223
192.168.1.155 219.152.168.224
#网络地址端口转换( NAPT )#
这种方式支持端口的映射,并允许多台主机共享一个公网 IP 地址。
支持端口转换的 NAT 又可以分为两类:源地址转换和目的地址转换。前一种情形下发起连接的计算机的 IP 地址将会被重写,使得内网主机发出的数据包能够到达外网主机。后一种情况下被连接计算机的 IP 地址将被重写,使得外网主机发出的数据包能够到达内网主机。实际上,以上两种方式通常会一起被使用以支持双向通信。
NAPT 维护一个带有 IP 以及端口号的 NAT 表,结构如下。
内网 IP 外网 IP
192.168.1.55:5566 219.152.168.222:9200
192.168.1.59:80 219.152.168.222:9201
192.168.1.59:4465 219.152.168.222:9202
最近做了一个有关 NAT 技术交流的社区
http://natforum.com
网站使用开源的 Nodebb (
https://github.com/NodeBB/NodeBB )
数据库 Couchdb (
https://github.com/apache/couchdb )
主题 Google Material Design (
https://github.com/pichalite/nodebb-theme-material )