5.4.2 网络地址转换NAT
我们知道为了缓解IPv4地址紧缺的问题,相继出现了一系列缓解地址耗尽的解决方案,比如通过子网划分(5.2.8 子网编址)实现网络地址在多个物理网络之间的复用,通过无分类编址(5.2.9 无分类编址和CIDR)消除了地址类别,按照网络规模、按照实际需要分配地址块,通过专用网络内部使用本地地址(5.4.1 虚拟专用网VPN)从而节约地址空间,这里我们就需要思考一个问题如果一个内部网络采用本地地址,是如何与外网进行通信呢?
如图
我们在5.4.1 虚拟专用网VPN中知道两个部门网络之间的通信是可以利用隧道传输来实现的,但是如果说部门A网络的主机X,要访问因特网上的百度服务器,又会是什么情形?这是我们面临新的问题。当然,从X到服务器的传输当然没有问题,因为目的地址是百度服务器的IP地址,属于全球地址,但是反过来呢?也就是百度服务器在返回数据报时却遇到问题了,由于数据报的目的地址属于私有地址,是无法通过因特网进行传输的,那么我们是如何解决呢?请注意,在内部网络A与因特网相连接的路由器R1上必须要分配一个合法的全球IP地址,图中所示的是218.2.216.24,否则的话内外网之间是无法互联互通的。我们就可以利用这个全球地址,为内网内的所有主机进行服务,通过在路由器R1上安装NAT软件来实现地址的转换。
一、网络地址转换NAT
网络地址转换NAT(Network Address Translation),装有NAT软件的路由器被称为NAT路由器,它至少会有一个全球的IP地址,所有使用本地地址的主机在和外界通信的时候都要在NAT路由器上将它的本地地址转换成全球地址才能和因特网连接。
- 网络地址转换NAT方法于1994年提出,用来解决本地编址的内部网络与外网通信的问题。
- 需要在专用网连接到因特网的路由器上安装NAT软件,装有NAT软件的路由器叫做NAT路由器,它至少有一个有效的外部全球地址IP。
- 所有使用本地地址的主机与外界通信时都要在NAT路由器上将其本地地址转换成全球地址才能和因特网连接。
二、NAT实现地址转换工作原理
如图
为了便于理解,我把网络连接图简化如上图所示,左边是一台内部网络的主机,分配了本地地址10.10.138.174,它想要访问百度的服务器www.baidu.com,服务器地址是115.239.211.110。显然由内网主机产生的请求报文先到达安装NAT软件的路由器,然后在通过互联网传送到达百度的服务器,这里我们就来说明一下内部主机产生的数据报在传输的过程中地址是如何发生变化的,源端发出的IP数据报携带的源IP地址10.10.138.174,目的地址115.239.211.110,该数据报传送到达NAT路由器后,运行在路由器上的NAT软件会将原始的内部地址替换成NAT路由器配置的全球IP地址218.2.216.24,并将替换前后的这对地址以及外网主机地址记录在映射表中,映射表包括三项信息分别是专用地址、NAT全球地址、外部地址经过地址转换后请求报文,就能够经过因特网传送给外部的服务器。
服务器返回数据如图
服务器接收并且解析请求报文以后产生应答报文,在应答报文的首部中源IP地址填写的是115.239.211.110,目的IP地址填写的是218.2.216.24,应答报文传输到NAT路由器,NAT软件将根据目标地址以及服务器地址在映射表里去查找对应的内部IP地址10.10.138.174,对目的地址进行替换,也就是把全球地址218.2.216.24替换成10.10.138.174,然后就可以完成数据报的交付。
从转换过程看,地址转换发生在两个方向上。从内网到外网在源地址字段中将私有的地址转换成全球的地址,从外网到内网传输的时候将目的IP地址从全球的地址再转换成私有地址,虽然说转换的思想是很容易理解,当然这里地址的转换很受限制,也就是说如果NAT路由器仅仅配置一个合法的全球地址,内网内将不允许两台或者多台主机同时访问百度服务器,当然在网络运行过程中这种是很不现实的。因此我们仅仅进行IP地址转换是不够的。实际的NAT软件还需要借助于传输层的地址转换,传输层的地址转换我们后面再聊,**这里我们只需要知道传输层地址叫做端口号。**用来代表发送或者接收数据的应用进程的标识。下面我们就来看一下引入了端口转换过以后NAT软件是如何来工作的。
如图
同样源端主机产生请求报文,携带的源和目的地址与前面一样,标识客户进程的源端口号是21043,目的服务器端口号是80,请求分组到达了NAT路由器后在源IP地址中更换为全球地址218.2.216.224同时源端口号也发生了变化(这里要注意),由原来的21043变成了14013,这两对地址的对应关系连同目的端口号和协议号也被记录在了映射表中,由于引入了端口号的转换,此时的映射表与前面的映射表就不同了,除了专用地址和NAT全球地址外部地址之外又增加了内部端口、NAT端口、外部端口、协议四个字段。
服务器接收返回数据如图
服务器接收并且解析请求分组以后返回了一个应答分组,其中源IP地址115.239.211.110目的IP地址218.2.216.24,源端口号80,目的端口号1403,应答分组到达了NAT服务器,NAT软件同样根据两对地址信息去查找映射表,找到匹配表项之后并且对目的IP地址和目的端口号完成相应的替换工作也就是用内部的端口去替换NAT端口,用内网地址替换路由器的全球地址,经过地址转换过之后,更改过的数据报就能够顺利的传输到达目的主机。
通过这几个示例我们对NAT的工作原理有了基本的认识,这里大家一起来讨论一下如果NAT路由器仅仅配置一个全球IP地址,内网的两台主机可以同时ping外网的同一台主机么?我们可以用NAT地址转换的过程进行分析,欢迎大家评论区参与讨论。