深入理解LVS篇:网络通信原理(二)局域网间通讯之ARP协议
上一篇文章我简单讲述了一个数据报文是如何在局域网中转发的,简单的回顾一下流程:
- 主机封装数据报文,其中包含
请求体
、源IP
、目标IP
和源MAC地址
等信息。 - 报文经过交换机,交换机将报文发送给路由器进行解析。
- 路由器将报文的
目标IP
与路由表中的子网掩码进行逻辑与
运算,得到目标网段,并根据匹配的目标网段的路由网关进行转发。
在文章的末尾我还说了,如果在交换机中已经记录了当前局域网中所有设备的映射,那么报文是不会经过路由器进行转发的,那么交换机是如何做到的呢?我们来了解一个协议–ARP协议
什么是ARP协议
首先,ARP协议
是三层网络协议,也就是基于网络层的协议。在网络层协议中,数据的报文将仅关注IP地址
和MAC地址
这些信息,LVS
其实也是基于三层网络协议的(其实是伪三层,因为LVS会偷窥数据包的握手信息)。
大白话来讲,ARP
协议就是用来广播统一局域网段内机器的IP
和MAC
信息的。
ARP协议的工作流程
还是以之前的局域网络拓扑为例:
如果主机10
想要和11
进行通讯,会经历以下几个步骤:
- 创建一个ARP协议格式的报文,报文的目标MAC地址全为F,目标IP为11。
- 报文发送至交换机,交换机发现是一个ARP协议的报文,会将此报文通过自己记录的端口进行广播。
- 11和12两台主机都接收到ARP报文,12发现目标IP与自己本机IP不符,将此报文丢弃;11发现与本机IP一致,将自己的MAC地址也封装成ARP协议的报文,发送给交换机。
- 主机10收到报文,将11的MAC地址缓存到本地的ARP列表中。
这里需要说明的一点是,在第三步中,主机11
将自己的MAC地址封装成ARP协议报文,其实是一个将原来的报文进行替换的过程,如下图:
交换机在这些报文一来二去的通讯过程中,会记录自己的端口与所连主机的映射关系:
比如上图的交换机连接了3台主机,对应的端口分别为1,5,7。主机第一次通过交换机发送报文的时候,交换机会把端口对应的主机的MAC地址记录下来,如此通讯多次后,交换机内部就能具备能够告知各个主机节点去路的能力。由于交换机仅记录MAC地址,所有交换机属于二层协议的设备。
下一篇文章我们将跨入互联网通讯,探明互联网中的两台主机是如何进行通讯的,并介绍NAT
、DR
、TUN
等知识。