LVS(Linux Virtual Server)是一个虚拟服务器集群系统。工作在 OSI 模型的传输层,即四层负载均衡。LVS 本身实现了 NAT、DR、TUN 模型,这些模型仅做数据包的转发,而不会与客户端建立连接,成本低效率高。FULLNAT 基于 NAT 实现,LVS 本身不支持,需要额外对内核打补丁后才能使用。
本系列按照负载均衡器对数据包的处理方式分类,从计算机间通信的角度出发,浅谈 NAT、FULLNAT、DR、TUN 模型的实现原理。
两台计算机如何在互联网中通信
在了解 LVS 负载均衡之前,先要搞清楚两台计算机如何在互联网中通信。茫茫互联网中,两台计算机如何才能找到对方?
我们先来看看,快递是如何被快递小哥完美地送到你手上的。根据你填写的地址,快递先送到你所在的省市区,接着在当前省市区找到你的门牌号,最后根据门牌号和姓名,再亲手把快递交给你。
两台计算机在互联网中的通信也是如此。首先需要知道双方的 IP 地址,即省市区,其次需要知道双方的 MAC 地址,即门牌号。MAC 地址标志着唯一的计算机。在同一台计算机上,可能有多个不同的服务,如何能像快递小哥按照姓名找到你一样,在计算机上找到对应的服务呢?没错,就是按照端口号。
这样,通信中每台计算机需要提供的信息就很清晰了,即 IP 地址、MAC 地址、端口号。总结一下,计算机之间通信必需的六个要素就是,源 IP 地址、端口号、源 MAC 地址,目标 IP 地址、端口号、目标 MAC 地址。
假设计算机 A 和计算机 B 在上述的网络拓扑图(不在同一局域网)中。可以很清晰地看到 计算机 A 和 计算机 B 通信需要五个步骤,其中 ①② 和 ④⑤ 的原理相同。现在我们来看看具体的每个步骤在计算机的世界中是如何实现的。
首先 A 和 B 的 IP 地址和端口号是已知的,即一个数据包从哪来要发往哪去。所以现在的问题是:A 如何能知道 B 的 MAC 地址?
最简单的方式就是 A 保存网络中全部设备的 MAC 地址,在发送时查