NAT类型及工作原理
在计算机网络中,网络地址转换(Network Address Translation,缩写为NAT),也叫做网络掩蔽或者IP掩蔽(IP masquerading),是一种在IP数据包通过路由器或防火墙时重写来源IP地址或目的IP地址的技术。这种技术被普遍使用在有多台主机但只通过一个公有IP地址访问因特网的私有网络中。根据规范,路由器是不能这样工作的,但它的确是一个方便且得到了广泛应用的技术。当然,NAT也让主机之间的通信变得复杂,导致了通信效率的降低。
1、NAT的类型
1.1、基本网络地址转换(Basic NAT)
1.2、网络地址端口转换(NAPT)
- NAT1: Full Cone NAT,完全圆锥型NAT,这是最宽松的网络环境,你想做什么,基本没啥限制IP和端口都不受限。
- NAT2: Address-Restricted Cone NAT,受限圆锥型NAT,相比NAT1,NAT2 增加了地址限制,也就是IP受限,而端口不受限。
- NAT3: Port-Restricted Cone NAT,端口受限圆锥型NAT,相比NAT2,NAT3 又增加了端口限制,也就是说IP、端口都受限。
- NAT4: Symmetric NAT,对称型NAT,对称型NAT具有端口受限锥型的受限特性,内部地址每一次请求一个特定的外部地址,都可能会绑定到一个新的端口号。也就是请求不同的外部地址映射的端口号是可能不同的。这种类型基本上就告别 P2P 了。
2、NAT工作原理
2.1、基本网络地址转换(Basic NAT)
它实现比较简单,仅支持地址转换,不支持端口映射。静态NAT要求对每一个当前连接都要对应一个公网IP地址,因此要维护一个公网的地址池。宽带(broadband)路由器通常使用这种方式来允许一台指定的设备去管理所有的外部链接,甚至当路由器本身只有一个可用外部IP时也如此,这台路由器有时也被标记为DMZ主机。由于改变了IP源地址,在重新封装数据包时候必须重新计算校验和,网络层以上的只要涉及到IP地址的头部校验和都要重新计算。
Basic NAT要维护一个无端口号NAT表,结构如下:
内网IP |
外网IP |
192.168.1.155 |
219.152.168.222 |
192.168.1.159 |
219.152.168.223 |
192.168.1.151 |
219.152.168.224 |
2.2、网络地址端口转换(NAPT)
这种方式支持端口的映射,并允许多台主机共享一个公网IP地址。NAPT分为四种类型,具体工作流程如下:
2.2.1、完全圆锥型NAT(Full cone NAT)
- 初始状态时,Client与Server1、Client与Server2都没有通讯过。
- 当Client通过NAT向Server1发送一个packet后,NAT会生成如下一行映射。
Client主机地址:端口 |
NAT公网地址:端口 |
192.168.1.5:5000 |
210.21.12.140:8000 |
- 在全锥型网络下,后续当Server1要发送数据到Client时,Server1首先将数据送到NAT(210.21.12.140:8000),NAT接收到该报文,会将该报文转发给Client(192.168.1.5:5000)。
- 在全锥型网络下,Server2要发送数据给Client,Server2也是需要先将数据发送到NAT(210.21.12.140:8000),NAT接收到该报文,会将该报文转发给Client(192.168.1.5:5000)。因为NAT上已经有了192.168.1.5:5000到210.21.12.140:8000的映射。
2.2.2、受限圆锥型NAT(Address-Restricted cone NAT)
- 初始状态时,Client与Server1、Client与Server2都没有通讯过。
- 当Client通过NAT向Server1发送一个packet后,NAT中会生成如下一行映射(注意,这里增加了一项IP地址的限制)。
Client主机地址:端口 |
NAT公网地址:端口 |
Server主机地址 |
192.168.1.5::5000 |
210.21.12.140:8000 |
210.15.27.166 |
- 在受限圆锥型NAT下,Server1要发送数据到Client时,Server1首先将数据送到NAT(210.21.12.140:8000),NAT接收到该报文,会将该报文转发给Client(192.168.1.5:5000)。
- 并且Server1主机的任何端口号数据,都可以将数据送到NAT(210.21.12.140:8000),NAT都会将该报文转给Client(192.168.1.5:5000)。
- 但是Server2主机无法与Client主机进行通讯。因为Client从来没有和Server2通信过,NAT将拒绝Server2试图与Client连接的动作。
2.2.3、端口受限圆锥型NAT(Port-Restricted cone NAT)
- 初始状态时,Client与Server1、Client与Server2都没有通讯过。
- 当Client通过NAT向Server1发送一个packet后,NAT中会生成如下一行映射(注意,这里增加了IP+port限制)。
Client主机地址:端口 |
NAT公网地址:端口 |
Server主机地址:端口 |
192.168.1.5::5000 |
210.21.12.140:8000 |
210.15.27.166:80 |
- 在端口受限圆锥型NAT下,Server2无法与Client通信,因为Client从来没有和Server2通信过。
- 并且Server1也只能用它的210.15.27.166:80与Client的192.168.1.5:5000通信,因为Client也从来没有和Server1的其他端口通信过。
家用路由器大部分都属于端口受限圆锥型NAT。
2.2.4、对称NAT(Symmetric NAT)
- 初始状态时,Client与Server1、Client与Server2都没有通讯过。
- 当Client通过NAT向Server1发送一个packet后,NAT中会生成如下一行映射
Client主机地址:端口 |
NAT公网地址:端口 |
Server主机地址:端口 |
192.168.1.5::5000 |
210.21.12.140:8000 |
210.15.27.166:80 |
- 接下来Client要使用相同的端口和Server2通信,将会在NAT中生成如下映射表。
Client主机地址:端口 |
NAT公网地址:端口 |
Server主机地址:端口 |
192.168.1.5::5000 |
210.21.12.140:8000 |
210.15.27.166:80 |
192.168.1.5::5000 |
210.21.12.140:8001 |
210.15.27.140:80 |
- Server1只能用它的210.15.27.166:80通过NAT的 210.21.12.140:8000与Client的192.168.1.5:5000通信。
- Server2也只能用它的210.15.27.140:80通过NAT的210.21.12.140:8001与Client的192.168.1.5:5000通信,
- Server1或者Server2的其他端口则均不能和Client的192.168.1.5:5000通信。