网络地址转换NAT(Network Address Translation)
网络地址转换NAT(Network Address Translation)
本文引用于《计算机网络》第七版。
NAT常用于已经获得内网IP地址的机器与外界通信,即在一个与外界联通的内网中的机器,若想与外界通信需要额外申请全球通用IP地址,但这种做法在大多数情况不可行,其中一种就是虚拟机的情况。所以在1994年,IEEE提出了网络地址转化NAT协议。
NAT的工作原理
NAT工作原理如下图,图来自《计算机网络》。
如图所示,假设拥有IP地址172.168.1.5,主机A的内网IP地址为182.168.0.3,目的主机IP地址为213.18.2.4。
主机A与目的主机实现通信的过程为
- 主机A发起请求,请求[源IP,目的IP]为[192.168.0.3,213.18.2.4]
- 请求经过NAT路由器,请求转化成[172.168.1.5,213.18.2.4]同时NAT路由器维护NAT路由表 [内网IP,对应外网IP]为[192.168.0.3,172.168.1.5]
- 请求到达目的主机,目的主机处理完请求后,响应为[213.18.2.4,172.168.1.5]
- 响应到达NAT路由器,路由器根据NAT路由表将目的IP转化为内网IP[213.18.2.4,192.168.0.3]
- 响应到达主机A

NAT的三种形式
NAT分配地址有三种分配形式:静态NAT,动态地址NAT,端口地址转换NAPT。
静态转化
静态转化是把私有内部网络的私有地址一对一的转化为公有地址,并且不会再发生变化。
动态转化
内部网络转化为公网的时候,内网的IP地址和公网的IP地址是动态的,不确定的。
例如在上图的过程中,NAT维护的路由表有可能会过期,即172.168.1.5不再为主机A所有,过期后若有主机B发起请求,172.168.1.5这个地址便可以分配给主机B。
这样的NAT管理的内网主机不可作为服务器,因为只有在内网主机发起请求的时候,NAT路由器才会为其分配IP地址,同时内网IP对于外网来说不可视,所以外网服务器无法对内网主机发起请求。
端口地址转换NAPT
为了解决IP地址短缺问题,NAT会使用运输层的端口号来进行复用,这样可以使多个内网主机共用一个公网IP地址。利用端口号的NAT叫做网络地址与端口转化NAPT(Network Address Port Translation)。NAPT原理采用下列表格阐述。
| 方向 | 字段 | 内网IP地址和端口号 | 公网IP地址和端口号 |
|---|---|---|---|
| 出 | 源IP地址:TCP源端口 | 192.168.0.3:8000 | 172.38.1.5:40001 |
| 出 | 源IP地址:TCP源端口 | 192.168.0.4:8000 | 172.38.1.5:40002 |
| 入 | 目的IP地址:TCP目的端口 | 172.38.1.5:40001 | 192.168.0.3:8000 |
| 入 | 目的IP地址:TCP目的端口 | 172.38.1.5:40002 | 192.168.0.4:8000 |
如表格所示,192.168.3和192.168.0.4地址被转化为了同一个公网IP172.38.1.5,但端口号被分别转化成了40001和40002,目的主机返回请求时,又根据IP地址和端口号给转发到不同的主机上。