路由|一图搞懂网络NAT映射

话不多说,先上图
路由|一图搞懂网络NAT映射
文章图片

两边内网的机器如何通过中间公共互联网传输数据?我们来看一下:
假设右边内网地址10.0.0.1的机器要访问公网128.119.40.186的80端口,获取HTTP数据,而WEB服务器是左边内网192.168.0.1的机器提供,网络包如何在内网和公网之间交互?
【1】 10.0.0.1 发现请求的目的地址为128.119.40.186,不属于自己所在局域网,就将网络包发送给网关10.0.0.4。这一步通过ARP获取网关MAC地址,由网卡完成数据包发送。以太网帧是广播性质,所以网关网卡发现MAC地址匹配后,认为网络帧是给自己的,就将其接收。
【2】 网关路由器收到包后,发现目的地址为公网地址128.119.40.186后,就开始查找路由表,确定数据包出口。这个过程,通过路由协议自动完成。出口确定后,对网关路由器对数据包做SNAT,即替换网络数据包的源地址,并将其修改情况,记录到自己的网络地址转换表(NAT)中。这是为了当网络数据包的响应回来后,自己能够知道该响应要转给那个内网机器。网络地址转换表本质上是一个两列的映射表,一列是转换后的地址和端口,一列是被转换的地址和端口。之后,数据包就进入公共互联网。因为网关路由器是公共互联网上的一个节点,所以从其发送出去的数据包,源地址(自己的地址)和目的地址都是公网地址。
【3】 数据包从网关路由器出来后,就根据路由协议,穿过网络上的一个又一个节点,最终到达目的路由器,即上图中左边的路由器。
【路由|一图搞懂网络NAT映射】【4】 该路由器发现数据包是要访问128.119.40.186的80端口,于是查找自己的NAT表,发现该地址对应内网的192.168.0.1的8080端口,于是做DNAT操作将数据包转发给内网192.168.0.1这台机器,也就是上图中左边的WEB服务器。此时数据包的目的地址变成了192.168.0.1
【5】 WEB服务器接收数据包,解析请求,发送响应数据包。此时数据包的源地址和目的地址要交换,因此,响应包的目的地址就成了138.76.29.7,也就是右边路由器的地址。源地址是当前服务器的地址,即192.168.0.1
【6】 同开始的过程,因为此时响应包的目的地址是公网地址,所以响应数据包被送给左边的网关路由器192.168.0.254
【7】 网关路由器192.168.0.254收到响应数据包后,做SNAT,将源地址192.168.0.1替换为自己的公网地址128.119.40.186,然后发送数据包,即上图中的5。
【8】 响应数据包到达138.76.29.7这台路由器后,发现要到自己的5001端口,通过查找NAT表,发现该端口的回应包是属于10.0.0.1的,于是将数据包转给内网的10.0.0.1这台机器,即上图中的6。
【9】 至此,数据包完成一个来回传输,且是在两个内网机器之间。通过这个过程,我们就清楚了NAT是如何让一个公网地址服务多个内网机器的,本质上是利用端口,建立了一个映射关系。

    推荐阅读