linux系统中的arp即地址解析协议,是网络通信中非常核心的底层协议,主要作用是建立IP地址和MAC地址之间的对应关系,保障同网段内设备能够顺利完成数据交互。

linux arp的核心作用
在网络通信过程中,数据包的传输需要依赖不同的地址层级,IP地址是网络层的逻辑地址,用于标识不同网段的设备,而MAC地址是数据链路层的物理地址,用于标识同一物理网段内的设备。当linux设备需要和同网段的另一台设备通信时,首先需要知道目标设备的MAC地址,此时arp就会发挥作用:
- 主动发送arp请求广播,询问目标IP对应的MAC地址
- 接收目标设备返回的arp响应,获取对应的MAC地址
- 将获取到的IP和MAC对应关系缓存到本地的arp表中,减少后续的请求次数
linux arp的常见应用场景
1. 同网段设备通信
当linux主机访问同网段的另一台服务器时,会先查询本地arp缓存,如果没有对应记录就会触发arp解析流程,拿到目标MAC后才会封装数据帧发送数据。
2. 网络故障排查
如果出现同网段无法ping通的情况,可以通过查看arp表判断是否存在IP冲突、MAC地址绑定异常等问题。比如同一IP对应了多个不同的MAC地址,就说明存在IP冲突。
3. 静态arp配置
对于一些需要固定通信的重要设备,可以手动配置静态arp条目,避免arp解析失败或者arp欺骗攻击带来的影响。
linux arp相关常用命令
查看arp缓存表
使用arp -n命令可以查看当前系统的arp缓存,不需要进行DNS反向解析,输出速度更快:
# 查看arp缓存表 arp -n # 输出示例 Address HWtype HWaddress Flags Mask Iface 192.168.1.1 ether 00:11:22:33:44:55 C eth0 192.168.1.100 ether aa:bb:cc:dd:ee:ff C eth0
添加静态arp条目
如果需要手动绑定IP和MAC的对应关系,可以使用arp -s命令:
# 为IP 192.168.1.200绑定MAC地址 aa:bb:cc:dd:ee:ff,绑定到eth0网卡 arp -s 192.168.1.200 aa:bb:cc:dd:ee:ff -i eth0
删除arp条目
如果arp缓存中的条目异常,可以使用arp -d命令删除:
# 删除192.168.1.100对应的arp条目 arp -d 192.168.1.100
arp缓存的超时机制
linux系统的arp缓存条目不是永久有效的,默认情况下动态学习的arp条目会在一定时间后过期,之后如果需要通信会重新发起arp请求。可以通过修改/proc/sys/net/ipv4/neigh/default/gc_stale_time文件调整动态arp条目的过期时间,单位为单位为秒。
# 查看当前动态arp条目的过期时间,默认一般是60秒 cat /proc/sys/net/ipv4/neigh/default/gc_stale_time # 临时修改为120秒,重启后失效 echo 120 > /proc/sys/net/ipv4/neigh/default/gc_stale_time
如果需要永久修改该配置,可以在/etc/sysctl.conf文件中添加对应的配置项,然后执行sysctl -p生效。