ARP协议
ARP(Adress Resolution Protocol,地址解析协议)是一种用于将网络层协议(IP地址)解析为数据链路层地址(MAC地址)的协议
ARP的工作原理
核心功能是通过广播请求和单播响应,将IP地址解析为MAC地址
ARP请求-响应
当设备需要与目标设备通信时,如果不知道目标设备的MAC地址,它会发送一个ARP请求广播包,询问谁拥有这个IP地址,参考格式:

局域网非目标设备收到该ARP广播报文,不进行处理;目标设备收到了该请求报文,会将请求中的源地址记录并封装到ARP响应报文中,这样一个ARP交互流程就完成了
ARP响应是单播而非广播的,因为响应设备已经获取了设备的MAC地址和IP地址
ARP缓存
ARP协议把IP => MAC的映射关系记录到本机操作系统的ARP缓存中
以Linux为例,ARP记录在内核的ARP表中;除此之外,还会同步到邻居子系统 /usr/sbin/ip neigh
guangjie.wang@SW-Build:~$ cat /proc/net/arp
IP address HW type Flags HW address Mask Device
10.0.10.8 0x1 0x2 34:73:5a:a0:80:dd * eno1
10.0.10.174 0x1 0x2 2c:ea:7f:e7:73:07 * eno1
10.0.10.27 0x1 0x2 2c:ea:7f:e7:73:05 * eno1
10.0.10.1 0x1 0x2 e4:3e:c6:bf:48:c1 * eno1
10.0.10.100 0x1 0x0 00:00:00:00:00:00 * eno1
10.0.10.18 0x1 0x2 4c:76:25:fe:3d:3d * eno1
10.0.10.6 0x1 0x2 20:04:0f:f9:fb:14 * eno1
10.0.10.11 0x1 0x2 4c:d9:8f:c1:ff:8b * eno1
也可以使用arp -n进行查看
guangjie.wang@SW-Build:~$ arp -n
Address HWtype HWaddress Flags Mask Iface
10.0.10.8 ether 34:73:5a:a0:80:dd C eno1
10.0.10.174 ether 2c:ea:7f:e7:73:07 C eno1
10.0.10.27 ether 2c:ea:7f:e7:73:05 C eno1
10.0.10.1 ether e4:3e:c6:bf:48:c1 C eno1
10.0.10.100 (incomplete) eno1
10.0.10.18 ether 4c:76:25:fe:3d:3d C eno1
10.0.10.6 ether 20:04:0f:f9:fb:14 C eno1
10.0.10.11 ether 4c:d9:8f:c1:ff:8b C eno1
ARP表存在于内存中,系统重启会清空ARP记录
不仅如此,在Linux系统中,ARP表不只是一张,而是每个接口都会维护一个ARP/邻居表
一个ARP表最多存放的记录条目可以通过以下命令查看:
guangjie.wang@SW-Build:~$ sysctl net.ipv4.neigh.default.gc_thresh1
net.ipv4.neigh.default.gc_thresh1 = 128
guangjie.wang@SW-Build:~$ sysctl net.ipv4.neigh.default.gc_thresh2
net.ipv4.neigh.default.gc_thresh2 = 512
guangjie.wang@SW-Build:~$ sysctl net.ipv4.neigh.default.gc_thresh3
net.ipv4.neigh.default.gc_thresh3 = 1024
这三个阈值的含义分别是:
|------------|---------------|------|
| 参数 | 意义 | 阈值 |
| gc_thresh1 | 小于此值时不回收 | 128 |
| gc_thresh2 | 超过此值开始触发回收 | 512 |
| gc_thresh3 | 最大值,超过立即丢弃新条目 | 1024 |
ARP的应用场景
ARP广泛应用于以下场景:
- 局域网通信:
- 设备在局域网中通信时,需要获取目标设备的MAC地址
- 路由器转发:
- 路由器在转发数据包时,需要直到下一跳的MAC地址
- 网络诊断:
- 使用ARP命令查看本地ARP缓存,诊断网络问题
ARP的安全性
ARP本身是不安全的,因为它是广播报文且缺少安全校验,容易收到以下攻击
- ARP欺骗
- 攻击者使用伪造的ARP响应,将自己的MAC地址与目标IP地址关联,从而截获网络报文
- ARP泛洪
- 攻击者发出海量的ARP请求,将局域网中的网络资源耗尽
为了提高安全性,可以使用以下方式防止网络收到ARP攻击
- 静态ARP表,手动配置局域网的IP和MAC地址的映射关系,适用于小型且固定的网络
- ARP检测,监控网络中的ARP流量,检测局域网中的异常行为设备
- 网络隔离,使用VLAN或子网隔离设备,减少ARP攻击的影响
ARP的替代方案
在某些场景下,可以使用以下替代方案:
- NDP(Neighbor Discovery Protocol)邻居发现协议
IPv6使用NDP协议替代ARP协议实现ip与mac的映射