NAT 协议详解(网络层)
NAT 协议(Network Address Translation) 的名称叫做:网络地址转换
显而易见,它就是用来做网络地址转换的。我们需要标记一个局域网(LAN)在 广域网(WAN) 上的位置,就需要 NAT 协议进行地址转换。也就是原本在 LAN 下,我们的每个网络设备都有一个 IP 地址,现在,我们需要将这个局域网在 Internet 下的位置标记出来,我们就需要一个统一的 IP 地址标记这个 LAN。
那么为什么我们要做这个操作呢,看上去像是多次一举?
我们知道我们常见的 IP 协议是 IPv4 协议,在设计之处,人们根本不知道之后的互联网会如此的发达。这几年,网络设备的数量不断增加,IP 地址也逐渐到达表达的极限 (2^32),因此,通过NAT 进行地址转化,可以有效的解决这个问题。
可以立即为:
原本我们有好多的盒子,我们要用这些盒子装东西。之前,一个盒子只能装一个东西,现在我们可以将多个东西装到一个盒子了,这样就大大增加了可以容纳东西的总数量,也就是缓解盒子数量逐渐不总的问题。
子网的 “代理人”,也就是和外界的窗口,通常由路由器扮演。路由器的 LAN 一侧管理着一个小子网,而它的 WAN 接口才是真正参与到 Internet 中的接口,也就有一个“绝对唯一的地址”。NAT 协议,正是在 LAN 中的主机在与 LAN 外界通信时,起到了地址转换的关键作用
NAT协议的工作流程
假设当前场景如上图。中间是一个路由器,它的右侧组织了一个 LAN,网络号为
10.0.0/24
。LAN 侧接口的 IP 地址为10.0.0.4
,并且该子网内有至少三台主机,分别是10.0.0.1
,10.0.0.2
和10.0.0.3
。路由器的左侧连接的是 WAN,WAN 侧接口的 IP 地址为138.76.29.7
。首先,针对以上信息,我们有如下事实需要说明:
- 路由器的右侧子网的网络号为
10.0.0/24
,主机号为10.0.0/8
,三台主机地址,以及路由器的 LAN 侧接口地址,均由 DHCP 协议规定。而且,该 DHCP 运行在路由器内部(路由器自维护一个小 DHCP 服务器),从而为子网内提供 DHCP 服务。- 路由器的 WAN 侧接口地址同样由 DHCP 协议规定,但该地址是路由器从 ISP(网络服务提供商)处获得,也就是该 DHCP 通常运行在路由器所在区域的 DHCP 服务器上。
DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)协议允许服务器向客户端动态分配 IP 地址和配置信息。主要分为两部分:
- DHCP客户端:通常为网络中的PC、打印机等终端设备,使用从DHCP服务器分配下来的IP信息,包括IP地址、DNS等。
- DHCP服务器:所有的IP网络设定信息都由DHCP服务器集中管理,并处理客户端的DHCP请求。
现在,路由器通过 NAT 协议对子网中的网络设备提供地址转化服务。这个服务需要同时还需要一个重要的结构: NAT 转化表
现在我们想象这样的一个场景:
子网里,主机10.0.0.1
向 IP 地址为128.119.40.186
的 Web 服务器(端口 80)发送了 HTTP 请求(如请求页面),此时到底会发生什么过程呢?
-
主机
10.0.0.1
会指派一个端口:例如3345
端口为请求端口,向 IP 地址为128.119.40.186
发送请求。但是注意,这个请求会先经过10.0.0.4
的的主机 -
10.0.0.4
即路由器的 LAN 接口收到10.0.0.1
的请求。路由器将为该请求指派一个新的源端口号,如5001
,并将请求报文发送给 WAN 接口138.76.29.7
。同时,在 NAT 转换表中记录一条转换记录138.76.29.7:5001——10.0.0.1:3345。NAT转换表就是为了表示 LAN 接口和 WAN 接口之间的转化记录,以便于 LAN 接口和 WAN 接口之间的相互转化。
-
请求报文到达 WAN 接口,继续向目的主机
128.119.40.186
发送。
之后会有如下的响应发生:
- 主机
128.119.40.186
收到请求,构造响应报文,并将其发送给目的地138.76.29.7:5001
。 - 响应报文到达路由器的 WAN 接口。路由器查询 NAT 转换表,发现
138.76.29.7:5001
在转换表中有记录,从而将其目的地址和目的端口转换成为10.0.0.1:3345
,再发送到10.0.0.4
上。 - 被转换的响应报文到达路由器的 LAN 接口,继而被转发至目的地
10.0.0.1
注意点:
- 目的主机(上述例子中的
128.119.40.186
)是根本不知道源主机的地址的,他只知道有个 IP 为136.76.29.7
的服务器向我发起了请求。所以,可见 NAT 协议起到了屏蔽 LAN 层和 WAN 层的作用。它使得所有从内部发到外部的数据报都只有一个相同的目的地(端口号不同),外部发送到内部的数据报也是相同的地址(端口号不同)。 - 在报文穿过路由器,发生 NAT 转换时,如果 LAN 主机 IP 已经在 NAT 转换表中注册过了,则不需要路由器新指派端口,而是直接按照转换记录穿过路由器。同理,外部报文发送至内部时也如此。
总结 NAT 的特点如下:
- NAT 协议通过对 WAN 屏蔽 LAN,有效地缓解了 IPv4 地址分配压力。
- LAN 主机 IP 地址的变更,无需通告 WAN。
- WAN 的 ISP 变更接口地址时,无需通告 LAN 内主机。
- LAN 主机对 WAN 不可见,不可直接寻址,可以保证一定程度的安全性。
概念图: