免费 ARP(Gratuitous ARP)包是一种特殊的 ARP 请求,它并非期待得到 IP 对应的 MAC 地址,而是当主机启动的时候,发送一个 Gratuitous ARP 请求,即请求自己的 IP 地址的 MAC 地址。
1. 免费 ARP 包的结构
免费 ARP 报文与普通 ARP 请求报文的区别在于报文中的目标 IP 地址。普通 ARP 报文中的目标 IP 地址是其他主机的 IP 地址;而免费 ARP 的请求报文中,目标 IP 地址是自己的 IP 地址。
2. 免费 ARP 的作用
免费 ARP 数据包有以下 3 个作用:
- 该类型报文起到一个宣告作用。它以广播的形式将数据包发送出去,不需要得到回应,只为了告诉其他计算机自己的 IP 地址和 MAC 地址。
- 可用于检测 IP 地址冲突。当一台主机发送了免费 ARP 请求报文后,如果收到了 ARP 响应报文,则说明网络内已经存在使用该 IP 地址的主机。
- 可用于更新其他主机的 ARP 缓存表。如果该主机更换了网卡,而其他主机的 ARP 缓存表仍然保留着原来的 MAC 地址。这时,可以发送免费的 ARP 数据包。其他主机收到该数据包后,将更新 ARP 缓存表,将原来的 MAC 地址替换为新的 MAC 地址。
3. 构造免费 ARP 包
用户可以使用 netwox 工具中编号为 33 的模块构造免费的 ARP 数据包。
【示例】构造免费的 ARP 数据包。
-
构造免费的 ARP 数据包,设置源 IP 地址和目标 IP 地址为 192.168.59.132,执行命令如下:
$ netwox 33 -g 192.168.59.132 -i 192.168.59.132
输出信息如下:
Ethernet________________________________________________________. | 00:0C:29:AA:E0:27->00:08:09:0A:0B:0C type:0x0806 | |_______________________________________________________________| ARP Request_____________________________________________________. | this address : 00:0C:29:AA:E0:27 192.168.59.132 | | asks : 00:00:00:00:00:00 192.168.59.132 | |_______________________________________________________________|
-
使用 Wireshark 进行抓包,验证构造的免费 ARP 数据包,如图所示。
其中,第一个数据包的 Info 列显示 Gratuitous ARP for 192.168.59.132(Request),表示该数据包为构造的免费 ARP 数据包。
在 Address Resolution Protocol(request/gratuitous ARP) 部分中,Sender IP address 和 Target IP address 的值为同一个 IP 地址 192.168.59.132。
4. 去堆叠及arp双发
在堆叠方案中两台设备虚拟为一台,控制层面只有一个,两台设备的表项依靠istack进行同步,M-LAG方案中依靠peer-link进行同步,在去堆叠方案中两台设备控制层面完全独立,路由、ARP、MAC表项是如何同步的呢?
1、接入层交换机将主机的ARP路由转换成为直连路由,并引入到BGP路由完成路由同步,到达服务器的流量由32位主机路由来引导。
如上图所示,将ARP生成的直连路由引入到OSPF\BGP路由中,从而达到全网设备主机路由的同步。
2、服务器在发送ARP请求和应答需要在聚合的所有成员接口网卡进行发送与接收,又叫做“ARP双发”。实现去堆叠设备的ARP和MAC表项同步。通常按照流量HASH原理,ARP报文会按照算法选择BOND成员网卡中的一个进行发送,这样去堆叠的两台设备ARP表项就不会同步。这时候需要修改服务器操作系统内核,在发送ARP报文时在所有BOND的成员网卡发送。
3、在服务器上看聚合接口状态是两个物理网卡聚合在一起的逻辑接口,单条物理线路的UP/DOWN逻辑的接口状态并没有变化,并不能触发服务器发送免费ARP的更新,如果没有32位主机路由的牵引可能会造成流量负载不均衡。所以需要服务器的OS内核进一步优化,当服务器成员接口发生UP/DOWN时,发送免费ARP进行更新。
4、两台接入交换机连接服务器的三层网关接口MAC地址更改为相同的MAC地址,避免两台设备发送不同的MAC地址造成服务器侧ARP表项反复切换。
去堆叠具有良好的兼容性,可以实现不同厂家设备的异构,这是M-LAG和堆叠无法做到的。M-LAG和堆叠在底层实现十分复杂,需要进行大量表项和状态同步工作,去堆叠对交换机LACP协议进行简单的改动就可以实现,三层表项通过现有路由协议同步,二层表项通过服务器“ARP双发”实现。
转载自 免费ARP详解