33、网络地址转换(NAT)

本节的内容是网络地址转换,这也是我们的家用光猫和路由器一般都会具备的基本功能。介绍公网和私网IP地址,以及网络地址转换的方法,主要是NAT和NAPT。


公网IP与私网IP

前面的内容中我们学习过IP地址分类以及几类特殊的IP地址,现在我们从公网和私网的角度对IP地址进行分类,理解并记忆它们的区别。

首先,必须要解释一下公网和私网的概念:

公网,顾名思义,就是指“公共的网络”,不是由个人或某个单位内部自行搭建的,而是由国家的网络运营商进行建设和维护的,进行大范围远距离的网络通信。

私网,也就是“私有的网络”,也可以叫做“内网”,一般是某个单位内部自行建设的,比如一个公司、一个学校内部搭建的局域网,就属于私网。

那么为什么要区分公网和私网呢?这就要从IP地址资源的问题来谈,其实把IP地址分为公网的IP和私网的IP也是一种节约IP地址数量的手段,私网的IP只允许在某个内部网络中存在,而不能在公网上存在。互联网上的所有路由器,对于目的IP地址是私网IP的数据包一律不进行转发。

规定把这三类范围的IP地址作为私网地址:

10.0.0.0~10.255.255.255、172.16.0.0~172.31.255.255、192.168.0.0~192.168.255.255。

只要是在这三个范围之内的一个IP地址,都属于是私网地址,只能在内部网络中存在,在进行网络工程项目的IP地址规划的时候,这些IP地址都是可以用的,根据需求来规划。


NAT

上面说到,属于那三个地址范围的IP地址都是私网IP,只能在私网里面使用,但是私网的主机想要去访问公网,而发出去的数据包的源IP地址又是私网IP,不能在公网上使用,这时候就要借助于NAT技术进行地址的转换,使具有NAT功能的路由器作为公私网之间“沟通的中介”。

如下图所示,四台内网的主机(它们的IP地址可能是10.x.x.x/172.16.x.x~172.31.x.x/192.168.x.x)通过一个具有NAT功能的路由器访问公网:

 33、网络地址转换(NAT)

NAT就是“Network Address Translation”,即网络地址转换,功能就是用来把私网IP地址转换为公网IP地址,公网IP地址转换为私网IP地址的。

那么路由器怎么运用这个NAT的功能对IP地址进行转换的呢?其实说到本质,就是在IP数据包首部上做文章,IP首部包含源IP地址和目的IP地址这两个字段,只要数据包经过这个NAT路由器时,在这两个字段的内容上做一下修改即可完成地址的转换。

一个具有NAT功能的路由器可以具有多个公网IP、多个私网IP,路由器完成NAT转换,依据的是NAT转换表,在这个转换表里面记录着内网的某个IP访问外网要转换成某个公网的IP。

下面举一个例子,如图所示:

33、网络地址转换(NAT)

上图的左半边是一个单位的私网,右半边是公网,中间一个NAT路由器作为该单位的出口路由器, 两台私网的主机A和B通过NAT路由器和公网的一台主机C实现互访:

NAT路由器存储的NAT转换表是这样的:

方向 字段 IP地址(NAT转换前) IP地址(NAT转换后)
源IP 192.168.5.1 172.38.1.4
源IP 192.168.5.2 172.38.1.5
目的IP 172.38.1.4 192.168.5.1
目的IP 172.38.1.5 192.168.5.2

主机A发出数据包(目的IP地址是66.66.66.66,源IP地址是192.168.5.1),数据包到达路由器之后,路由器发现这是一个私网主机要去访问公网的数据包,而192.168.5.1这个私网IP不能在公网上存在啊,路由器就开始运用NAT,把此数据包首部的源IP替换为172.38.1.4,发送到公网上,而原数据包的目的IP是不能变的。

主机C收到数据之后,要给主机A回复应答数据包,主机C发出数据包(目的IP为172.38.1.4,源IP为66.66.66.66),中间可能会经过好多路由器,最终到达离主机A最近的那个NAT路由器,路由器通过查询自己NAT表发现,要把此数据包的目的IP转换为192.168.5.1,交给主机A。

这就是路由器进行NAT转换的工作原理。

你可能会有这样的疑问:为什么主机C发出的数据包,目的IP是172.38.1.4,而不直接是主机A的IP呢?

这是因为:首先,主机C第一次收到A发来的数据包的时候,数据包的源IP是172.38.1.4,主机C就会以为这就是A的IP地址,它并不知道A的真实IP其实是192.168.5.1,实际上即使它知道A的真实IP,数据包也到达不了A,因为公网上的所有路由器不会转发带有私网IP的数据包。


NAPT

上面我们讲的例子,是一个极其简单的情况,内网有两台主机,路由器也有两个公网IP,当内网的主机想要访问外网的时候,轮流使用这两个公网IP。

但是在很多的情况下,往往比较复杂,一个公司可能有几十台主机,要同时访问公网的话,那么就需要出口路由器具备几十个公网IP吗?显然不现实,因为公网IP资源很宝贵,而且要这样做的话,也不会体现出使用NAT技术之后,能够节约IP地址的资源。

在很多情况下,一般是几十个私网IP都转换成同一个公网IP去访问公网。这种一个公网IP同时可以分配给多个私网的主机去访问公网使用的技术正是NAPT。

NAPT是指“Network Address Port Translation”,即“网络地址与端口号转换”,这个技术应用了端口号的概念,而端口号是传输层的一个概念,现在先不用深入了解,学到传输层的时候会介绍到。

使用了NAPT技术以后,多个私网的主机同时访问公网的时候,路由器会把多个私网IP转换为同一个公网IP,只不过是使用不同的端口号,这样内网的规模越大,就越能体现出NAT技术能够节约公网IP地址资源的效果。


本节内容我们学习了公网、私网、NAT以及NAPT,简单的介绍了其转换过程,这一部分内容还是比较重要的,尤其是我们家庭入网的无线路由器一般也是这样的。下一节我们介绍网络层的另一个重要的协议——ICMP协议。

参考教材:谢希仁《计算机网络》第七版

上一篇:解决虚拟机无法联网的笨办法


下一篇:Linux ->> 搭设GreemPlum集群环境