深入理解LVS篇:网络通信原理(三)路由转发模式NAT、DR和TUN

上篇文章我们简单讲解了ARP协议是如何让局域网中的各个主机找到对方的MAC地址的,实际上,ARP协议也可以应用于互联网中用于路由器之间找到下一条的MAC地址,但在本系列文章中,我们不对广域网的使用场景进行过多展开。
我们接着来探究路由转发模型,这些模型也是我们后面配置LVS的理论基础,这里涉及到三种转发模式 :

  • NAT 地址转换模式
  • DR 直接路由模式
  • TUN 隧道模式

NAT模式

还是前几篇文章中的网络拓扑图为例,我们对它进行升级,让他接入到互联网中:
深入理解LVS篇:网络通信原理(三)路由转发模式NAT、DR和TUN_第1张图片
我们先清楚一件事情,那就是在网络请求的过程中,都是以IP:PORT的形式来唯一识别这个数据包需要被哪个服务进行处理。路由器接收到数据包之后,若发现数据包中的目标IP和自己的匹配,就会收下这个数据包,然后根据端口来转发到对应的程序上进行处理。这就相当于,IP表示你家所在的楼栋,PORT来指明你家具体在哪一户。
假设主机A需要与互联网中的另一台主机C进行通讯,它会经过如下流程:

  • 建立数据包,源IP是192.168.174.10:8848,目标IP是14.215.177.38:80
  • 交换机在本地缓存中没有找到IP为14.215.177.38的映射,移交给路由器
  • 路由器查询本地的路由表,发现需要将数据包交给下一跳网关处理,于是将源IP换成路由器自己的公网IP6.6.6.6,然后发送给下一跳网关
  • 数据包经过互联网路由找到14.215.177.38,将数据包丢给端口号为80的程序进行处理,然后原路返回
  • 6.6.6.6路由器收到源IP为14.215.177.38:80,目标IP为6.6.6.6:8848的数据包,收下,并丢给端口为8848的程序进行处理,通信结束。

在第三步中,路由器将源IP替换成自己的公网IP并转发到下一跳网关的行为,就是NAT模式。确切的说,因为替换的是源IP,所以是S-NAT(源地址替换模式)。同理,也有目标地址替换模式D-NAT

但是这种模式存在一个问题,我们来假设这么一个场景:图片左端的主机A主机B都要和互联网上的另一台主机C进行通讯,恰好在A和B当中,程序申请的端口号都一样,比如2100。因为主机C不在局域网当中,所以它们的数据包在经过路由器之后会被包装成6.6.6.6:2100 -> 14.215.177.38:80的形式,最终经过路由器不断的转发找到对应的服务并处理返回,返回的数据包长这样:14.215.177.38:80 -> 6.6.6.6:2100。那么问题来了,这种模样的数据包如果我们的路由器收到的话,是没办法正确地转发到对应地服务中的,因为在我们的局域网当中,主机A主机B存在两个端口一样的程序。我们用图来简单描述一下这个过程:

深入理解LVS篇:网络通信原理(三)路由转发模式NAT、DR和TUN_第2张图片
深入理解LVS篇:网络通信原理(三)路由转发模式NAT、DR和TUN_第3张图片
深入理解LVS篇:网络通信原理(三)路由转发模式NAT、DR和TUN_第4张图片
深入理解LVS篇:网络通信原理(三)路由转发模式NAT、DR和TUN_第5张图片
这种情况该如何解决呢?

答案是在路由器中做一层映射,路由器在做S-NAT对源IP进行替换的时候,留下一个物理端口和源IP的映射,不再以源IP的端口进行替换。比如数据包经过路由器的时候,留下一个物理端口:源IP的映射,然后在做地址替换的时候,使用源IP+物理端口的形式进行替换,比如说:
深入理解LVS篇:网络通信原理(三)路由转发模式NAT、DR和TUN_第6张图片
深入理解LVS篇:网络通信原理(三)路由转发模式NAT、DR和TUN_第7张图片

DR

DR也叫做直接路由模型,它和NAT的区别是可以通过下一条网关MAC的物理地址直接找到目标服务器。也就是说,目标服务器必须要和路由器处于同一个局域网,如下图:
深入理解LVS篇:网络通信原理(三)路由转发模式NAT、DR和TUN_第8张图片
主机A需要与主机B进行通信,当路由器收到数据包之后,会直接根据主机B的MAC地址包装进行跳转,而不用改动IP层的地址。

这几种模式会用在LVS中作为数据包的转发策略使用,我们后续在搭建LVS的时候使用DR模型进行搭建。

你可能感兴趣的:(网络编程,Linux运维,linux,网关,路由器,网络,java)