ARP缓存状态解析与演示

描述:麒麟V10SP1系统ARP缓存状态解析与演示。

1、arp清理周期

ARP(地址解析协议)缓存的管理是通过内核参数进行控制的。这些参数影响ARP缓存的刷新和清理周期,从而影响网络性能和稳定性。下面是几个关键的内核参数以及它们在ARP缓存管理中的作用:

  1. gc_stale_time
  • 路径/proc/sys/net/ipv4/neigh/default/gc_stale_time
  • 定义:这个参数设置了ARP条目在没有被访问或更新后多久应该被标记为“老化”(stale)。老化的ARP条目不立即从缓存中删除,但它们将被标记为候选,以便在需要空间时首先被清除。
  • 作用:这个参数设置了一个ARP缓存条目在没有接收到相关网络活动确认的情况下能保持“已确认”状态的最大时间(单位为秒)。默认情况下,这个时间通常设置为60秒。如果超过这段时间没有更新,ARP缓存条目会被标记为 STALE 状态。
  1. gc_interval
  • 路径/proc/sys/net/ipv4/neigh/default/gc_interval
  • 作用:这个参数设置了系统对ARP缓存进行扫描清理的时间间隔(单位为秒)。在此间隔期间,内核会检查标记为 STALE 状态的ARP缓存条目,并可能将其清除。默认值通常是30秒。

2、arp刷新机制

  1. base_reachable_time_ms
  • 路径/proc/sys/net/ipv4/neigh/default/base_reachable_time_ms
  • 定义:这个参数设定了ARP缓存条目在没有收到任何新的网络活动更新时,最初被认为是可达的时间,即网络设备可以在这段时间内信任这个ARP条目而无需进行新的ARP查询。
  • 作用
  • 基础可达时间:该参数定义了ARP缓存条目在没有接收到任何更新的情况下,初始认为是可达的时间长度(单位为毫秒)。这意味着在这段时间内,网络上的其他设备可以依靠这个ARP条目来发送数据,而不需要重新发起ARP请求来确认设备的MAC地址。
  • 随机化:为了防止网络上多个设备同时尝试更新ARP缓存条目,内核会在这个基础时间上添加一些随机的延时(从0%到50%的随机增加)。例如,如果基础可达时间设置为30秒(30000毫秒),则实际的ARP条目有效期将是在30秒到45秒之间的某个时间点。
  • 如果 ARP 表项在 base_reachable_time 时间内没有被访问,就会变为 STALE 状态,下次访问时会触发 ARP 请求进行刷新。

3、参数设置

ARP缓存的刷新和清理周期由上述参数共同决定。gc_stale_time决定了一个条目在被认为是过时前可以保持多久,而gc_interval设置了检查这些条目的频率。同时,base_reachable_time_ms影响了系统多久刷新一次ARP条目,以确保它们的有效性。

如果需要修改这些设置以优化网络性能,可以直接编辑相应的文件,例如:

echo 120 > /proc/sys/net/ipv4/neigh/default/gc_stale_time
echo 20 > /proc/sys/net/ipv4/neigh/default/gc_interval
echo 40000 > /proc/sys/net/ipv4/neigh/default/base_reachable_time_ms

为了使这些修改永久生效,可以将它们添加到/etc/sysctl.conf文件中:

echo "net.ipv4.neigh.default.gc_stale_time = 120" >> /etc/sysctl.conf
echo "net.ipv4.neigh.default.gc_interval = 20" >> /etc/sysctl.conf
echo "net.ipv4.neigh.default.base_reachable_time_ms = 40000" >> /etc/sysctl.conf

echo "net.ipv4.neigh.网络接口名.gc_stale_time = 120" >> /etc/sysctl.conf
echo "net.ipv4.neigh.网络接口名.gc_interval = 20" >> /etc/sysctl.conf
echo "net.ipv4.neigh.网络接口名.base_reachable_time_ms = 40000" >> /etc/sysctl.conf

然后运行sysctl -p来应用这些更改。

4、手动清理ARP缓存

在Linux系统中,可以通过几种不同的方法完成,这些方法都需要管理员权限。下面是一些常用的命令和方法:

ip 命令是最常用的工具之一,用于配置和管理网络接口、路由表和ARP缓存等。要清理ARP缓存,可以使用以下命令:

sudo ip neigh flush all

这个命令会清除所有ARP表项。如果你只想清除特定网络接口的ARP缓存,可以指定接口名,如:

sudo ip neigh flush dev eth0

这将只清除eth0网络接口的ARP缓存。

尽管arp命令在最新的Linux发行版中可能已经不被推荐使用,取而代之的是ip neigh,但在系统中仍然可以使用它来管理ARP缓存。要使用arp命令清理ARP缓存,可以执行:

sudo arp -d *

这个命令会尝试删除所有ARP表项。对于某些系统,可能需要指定每个具体的IP地址来删除对应的ARP条目:

sudo arp -d 192.168.1.1

5案例演示

修改base_reachable_time_ms,gc_stale_time 等等内核参数,演示下某一个arp缓存项,是分别在什么时间段后,以及什么情况下会进入到各种状态(包括reachable,stale,delay,probe,imcomplete,failed),到最后该缓存项被删除。

为方便观察,调整如下内核参数:

echo 2 > /proc/sys/net/ipv4/neigh/default/gc_thresh1

echo 10 >  /proc/sys/net/ipv4/neigh/ens33/delay_first_probe_time

本机ip:10.0.0.31

本机mac:00:0c:29:5b:e1:93

远端ip:10.0.0.10

远端mac:00:0c:29:74:a6:ee

(1)reachable状态

使用ping -c 1 10.0.0.10发送arp请求,缓存状态立即变为reachable。

(2)stale状态

等待30秒左右,无新的arp请求,缓存变为stale状态。

(3)删除状态,stale状态,无新arp访问请求,清理回收。

(4)delay状态,stale 状态的缓存项在被访问后进入 delay 状态

arp缓存标记为stale,重新执行ping -c 1 10.0.0.10状态变为 delay。

(5)probe状态,如果在 delay 状态期间,数据包需要发送给该目标地址,系统会开始主动探测该缓存项的可达性(发送 ARP 请求),此时状态为 probe。

(6)incomplete状态

关闭远端主机,在 probe 状态下未能成功收到ARP响应,缓存项会被标记为 incomplete。

(7)failed状态

在探测过程中没有收到 ARP 响应(通常经过多次重试),缓存项会进入 failed 状态。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值