写这篇博客的目的
LVS
涉及的网络知识较多,所以一篇文章无法完全将其解释明白。本系列文章将从以下几个模块讲起:
- 网络通讯原理
LVS
的三种工作模式NAT
DR
TUN
- 搭建自己的LVS服务器
Keepalived
+LVS
实现HA
其中,网络通讯
原理将会从OSI7层模型
开始,介绍数据包从客户端发送给服务器的整个流程,中途会包括但不限于TCP\UDP
、ARP协议
、交换机
、路由器
等知识。好了,我们开始吧。
什么是LVS
LVS(Linux Virtual Server)
是国内大神章文嵩
发明的一款基于网络4层协议的负载均衡器,起初只是一款Linux
上的开源软件,但由于性能优越,后被Linux
加入到了内核当中,成为了Linux
上自带的一款负载均衡神器。
网络7层模型/4层模型
我们常见的网络模型是7层模型,从应用层到物理层依次是:应用层
、表示层
、会话层
、传输控制层
、网络层
、数据链路层
、物理层
。也有更精简版的4层模型,将应用层、表示层和会话层统一为应用层
,把数据链路层和物理层统一为数据链路层
,其结构和每层对应的协议如下所示:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
我们知道,网络通讯是以数据包的形式进行传输,数据包从应用层
->物理层
实际上是一层一层装包的过程,比如在应用层中装入请求头
、请求体
等信息,在网络层中封装源IP
、目标IP
等信息,在数据链路层中封装路由下一跳的MAC
地址信息。
当我们访问网站的时候,底层究竟做了什么?
我们先来认识一样东西:路由表
在Linux中查看路由表命令:route
这里有几个名词:
Destination
目标网段Gateway
网关Genmask
子网掩码,*
代表在本地局域网中,无需跳转。
比如如果我想访问IP为192.168.174.11
的这台机器,路由器收到这个请求后会拿192.168.174.11
与子网掩码做逻辑与
运算,得出的结果与Destination
进行比对,如果匹配得上,就会根据Gateway
中的ip地址进行转发。
我们以最简单的一个网络拓扑模型来展示计算机与计算机之间如何进行通讯,假设你家的拓扑模型如下,网络中共有2台计算机
和1个路由器
:
我们现在来模拟橙色主机
与绿色主机
的通讯流程,首先,由橙色主机
发起一个数据包A,数据包到达路由器后会拿目标IP与自己的路由表做逻辑与
运算:
192.168.174.11
255.255.255.0
--------------
192.168.174.0
我们会发现一个很特殊的路由条目,它的子网掩码是0.0.0.0
,他就是我们的默认路由,也就说,如果在路由表中找不到目标IP,我们的数据包会转而发送给IP为192.168.174.2
的机器进行处理。
运算过后,发现目标IP在局域网中,路由器就会将数据包丢给交换机,交换机会维护一张IP地址与MAC地址对应的表,由这层对应关系来将数据包进行转发。具体过程如下:
如此一来,就完成了最简单的局域网通讯。
交换机是处于二层模型的设备,所以交换机并不会去拆开数据包的IP地址来做转发。
它内部维护一张映射表,映射了局域网段内的IP地址
和其对应端口,这将会涉及到ARP
协议,我打算下一篇文章再详细讲述它。