网络地址转换NAT(详细)

目录

  • NAT的定义
    • 私有地址
  • NAT产生的原因
  • 2种NAT技术
    • 传统NAT技术
    • NATP技术
      • NAT技术的缺点



NAT的定义

网络地址转换(network address translation, NAT):让家庭网络等专用网络可以使用私有的专用地址(一般称为私网ip)在内部交换数据,当内网的主机想访问互联网时,可以通过NAT路由器转换为全球通用IP地址(一般称为公网ip)进行访问,这种转换的技术就被称为NAT。

私有地址

RFC 1918预留了一部分私有地址(private address)。这些地址只能作为本地地址,不能作为全球地址。它们可以用于某个机构的内部通信,只需要保证在机构内部,这些地址是唯一的。不同的机构或者家庭网络都可能使用相同的私有地址(比如中国很多的家庭网络都使用192.168.0.0/16这部分地址块,很多家庭网络的网关的私网接口都是192.168.1.1)。在互联网中的所有路由器,对于目的地址是专用地址的数据报一律不进行转发。

三个专用私有地址块为:

范围 记法 总数
10.0.0.0 到 10.255.255.255 10.0.0.0/8, 又称为24位块 2 24 2^{24} 224
172.16.0.0 到 172.31.255.255 172.16.0.0/12, 又称为20位块 2 20 2^{20} 220
192.168.0.0 到 192.168.255.255 192.168.0.0/16, 又称为16位块 2 16 2^{16} 216

这三类地址块在CIDR无类别寻址中就是专用的私有地址,它们是从分类寻址中遗留下来的(比如10.0.0.0/8是给ARPANET的,但是ARPANET早就停止运行了),但是CIDR也保留了这些。

采用这样的专用IP地址的互连网络称为专用互联网或本地互联网,或更简单些,就叫做专用网。显然,全世界可能有很多的专用互连网络具有相同的专用IP地址,但这并不会引起麻烦,因为这些专用地址仅在本机构内部使用。专用IP地址也叫做可重用地址(reusable address)。



NAT产生的原因

NAT产生的主要动机是应对正在急剧减少的有限IP地址空间。NAT可以让多个私网ip对应同一个公网ip,从而让更多的主机可以通过NAT连接上互联网。
理想的解决IPv4地址池枯竭的方式是IPv6技术,NAT只是一种权宜之计,是在IPv6全面部署前的过渡性技术。



2种NAT技术


传统NAT技术

NAT的实现需要一台运行NAT软件的路由器,私有IP和全球IP的转换依赖于NAT路由器上的NAT转换表(NAT translation table),NAT转换表有简单的传统NAT带端口号的NAPT两种。
传统NAT(raditional NAT)是不带端口号的,它做的是私网ip和目的ip地址的映射

举例:让家庭网络的iPhone通过NAT访问百度服务器。
网络地址转换NAT(详细)_第1张图片
家庭网络的iphone的私有地址是:192.168.1.2,它需要访问全球地址为202.108.22.5的百度服务器。当数据报通过NAT路由器时,源地址会被路由器改为1.80.168.99,这个地址是NAT路由器的全球IP地址。同时,NAT路由器会在NAT转换表上增加一个表项,记录专用地址192.168.1.2和访问服务器目的地址202.108.22.5的映射。本地服务器收到报文后,它根本不知道本地网络iphone的存在,它认为源地址是NAT路由器的全球地址。服务器之后会发送数据报给NAT路由器,NAT路由器会查询NAT转换表,发现外部地址202.108.22.5和专用地址192.168.1.2的映射,它会把数据报的目的地址改成本地iphone的私网地址,这样,服务器回应的数据报就可以传递给本地iphone。

这样做是有缺陷的,如果NAT路由器只有一个全球IP地址,但专用网内同时有多台主机需要接入互联网。当它们都同时访问同一个外部服务器时,转发表的外部地址就会完全相同。当服务器回应数据报时,无法通过NAT转发表知道该数据报应该传递给哪一个主机。
所以,传统NAT要想完全不出错的工作,只能一个私有ip地址对应一个全球ip地址。这样就没有解决全球ip地址短缺的问题。
一个补救的方法是,给NAT路由器分配多个全球IP地址,使用一种全球地址池的技术。假如NAT路由器的全球地址池有N个全球IP地址,那么它最多可以让N台专用网络主机同时与同一个外部主机通信,每个连接都使用了一个不同的全球IP地址(毕竟多台内部主机同时访问同一个外部服务器的情况不常见,所以大部分时候,N个全球IP地址可以对应超过N个专用私有IP地址)。但是,这还是不能与同样的目的端建立N条以上的连接。

为了解决上述问题,需要在转换表的映射中加入更多的信息。也就是下面讲的NATP。

NATP技术

网络地址与端口号转换(Network Address and Port Translation NATP):是一种使用端口号的NAT。

运行NATP的路由器,它在做转换工作时,会将专用主机的私有ip地址和端口号映射为路由器的全球ip地址和新的端口号,对于不同的主机,只要保证新的端口号不同,就可以区分开。因为端口号有16位,所以有 2 16 2^{16} 216 = 65,536个不同的端口号可供使用,这样一个公网地址就可以同时对应超过6万个私有ip地址,IPv4地址短缺的问题就可以暂时解决了。

还是用同样的例子举例:让家庭网络的iPhone通过NAT访问百度服务器。
网络地址转换NAT(详细)_第2张图片

网络地址转换NAT(详细)_第3张图片
我故意设置了很巧合的情况,家庭网络的PC和iphone都访问同一个外部服务器,而且它们的源端口号都巧合的等于3345。
但是,NATP还是可以区分开,因为在NAT转发表的WAN端,为PC和iphone分配了2个不同的新的端口号。iphone新的端口号是5001,pc新的端口号是5002。只要这个新的端口号不同,就能区分。所以NATP的转发表WAN端的ip地址不需要起作用,只需要新的端口号起作用即可。
在数据报通过NAT路由器发送到互联网上后,源地址会替换为NAT路由器的全球IP地址,端口号会变成对应的新的端口号。
等服务器的回应报文返回时,根据WAN端端口号的不同(一个是5001,一个是5002),就可以很容易区分该报文应该给本地iphone还是本地pc。

NAT技术的缺点

1.通信只能由专用网络发起,本地网络不能作为服务器让外部网络访问。
2.NAT转发表的生成和每个数据包经过NAT路由器重写寻址信息都会造成开销。

除了这些固有的缺点,NATP使用端口号确实背离了分层的体系结构。网络层使用了运输层的端口号,这也找到了一些人的反对。

不过,NAT作为IPv6全面部署前的过渡技术,确实目前被广泛使用(比如很多家庭网络都离不开NAT)。

你可能感兴趣的:(网络,服务器,运维)