跳转至主要内容

ARP缓存以某种形式存在于每个通过以太网进行IP通信的主机上。该缓存保存着IP地址与以太网介质访问控制(MAC)地址之间的映射关系。 若在名为SERVER-1的主机上更换以太网适配器,或用更新/更快的硬件替换SERVER-1,则本地以太网段中所有与SERVER-1通信的主机都需要更新其ARP缓存。SERVER-1可能会发送 无偿ARP数据包以更新 所有主机,但由于是以太网环境,该ARP数据包可能被损坏或丢弃,因此无法完全依赖此机制。

OpenVOS系统中STCP堆栈的ARP缓存条目有效期为10分钟,即超过10分钟后将自动删除,并在下次需要发送数据包时重新添加。查看ARP缓存时,会显示每个条目的剩余有效时间。 因此最坏情况是:修改SERVER-1配置后,旧的(错误)映射需10分钟才能过期,新的(正确)映射才能生效。在此期间将无法与SERVER-1进行通信。

您可以使用arp -delete命令删除特定条目。图1展示了arp命令的实例,该命令显示了MAC地址和生存时间,随后使用arp -delete命令删除该条目,另一个arp命令实例则表明缓存中已不再存在该条目。

arp 192.168.50.5

互联网地址     MAC地址         类型    生存时间
192.168.50.5         00-04-96-1F-67-0C   临时     6 分钟
就绪  14:01:30

arp -delete 192.168.50.5

192.168.50.5 的映射已删除

就绪  14:01:39

arp 192.168.50.5
arp: 192.168.50.5 无映射

就绪  14:01:44
图1 – “arp”和“arp -delete”命令

旧版TCP_OS协议栈曾提供arp -flush命令,可清除ARP缓存中的所有条目。当需删除多个条目时,批量清除更为便捷(减少输入操作)。 由于条目会在需要时自动添加,此操作的唯一缺点是网络上会多出几个数据包,且发送首个数据包时会因重构ARP缓存而产生额外延迟。但对打字者而言,这完全没有弊端。

STCP协议栈不提供刷新选项

---------------------------------- arp ---------------------------------
主机名:
-all:    否
-network:
-delete:  否
-set:    否
mac_addr:
图2 – STCP arp命令格式

因此我编写了一个简短的宏(图3)来实现此功能。该宏将arp -all命令的输出重定向到进程目录中的文件,随后解析该文件提取IP地址,并针对每个地址调用arp -delete命令。当操作完成时,部分条目可能已恢复,但所有条目都将根据当前映射关系完成刷新。

& arp_flush.cm 脚本由此开始
&
& 版本 1.00 2017-11-04
&stratus
&
& 本脚本通过逐条删除条目来清除 ARP 缓存。
& 执行完毕时部分条目可能已恢复。
&
&
& 本软件按"原样"提供,不附带任何形式的担保或支持。作者特此声明不承担任何默示担保责任,包括适销性或特定用途适用性担保。
& 无论作者或其他任何人作出何种口头陈述,本免责声明均适用。
&
&set_string FILE (process_dir)>arp_list
attach_default_output &FILE&
arp -all
detach_default_output
&set LINE 2
&label again
&set LINE (calc &LINE& + 1)
&set_string IP (substr (contents &FILE& &LINE& -hold) 1 16)
&if (end_of_file &FILE&) = 1 &then &return
&if (length X&IP&) = 1 &then &return
arp -delete &IP&
&goto again
&
&arp_flush.cm 结束于此
图3 – arp_flush命令宏

图4展示了arp -all命令的执行实例,用于查看ARP缓存内容。随后执行arp_flush宏,接着再次运行arp -all命令。请注意,第二次arp -all输出中所有生存时间均为10分钟。为节省篇幅,我删除了首次arp -all 和arp_flush输出中的多行内容。

arp -all

互联网地址     MAC地址         类型    生存时间
10.10.1.200          00-90-E8-1F-4B-EA   临时     8 分钟
192.168.50.1         00-04-96-19-0B-20   临时    10 分钟
192.168.50.4         00-04-96-35-3F-B5   临时     1 分钟
192.168.50.2         00-04-96-20-C7-EC   临时     4 分钟
192.168.50.19        00-0C-29-6B-CA-AE   温度     6 分钟
192.168.50.21        00-23-54-79-C5-81   温度     7 分钟.
 . . . .
192.168.51.252       00-50-56-BB-4D-8C   临时     5 分钟
192.168.51.253       00-0C-29-86-AD-CC   临时     3 分钟

就绪  13:46:14
arp_flush

10.10.1.200 的映射已删除

192.168.50.1 的映射已删除

192.168.50.4 的映射已删除

192.168.50.2 的映射已删除

192.168.50.19 的映射已删除

192.168.50.21 的映射已删除.

 . . . . . .

192.168.51.252 的映射已删除

192.168.51.253 的映射已删除

就绪  13:46:23

arp -all

互联网地址     MAC 地址         类型    生存时间
192.168.50.2         00-04-96-20-C7-EC   临时    10 分钟
192.168.51.4         00-04-FC-01-02-3E   临时    10 分钟
192.168.51.11        00-00-A8-80-80-4A   临时    10 分钟
192.168.51.49        00-50-56-46-08-2C   温度    10 分钟
192.168.51.50        00-23-54-52-18-6E   温度    10 分钟
192.168.51.76        00-23-54-52-1B-F5   临时    10 分钟
192.168.51.100       00-0C-29-A9-85-44   临时    10 分钟
192.168.51.128       00-00-A8-43-52-22   临时    10 分钟
192.168.51.158       00-26-B9-BC-B7-37   临时    10 分钟
192.168.51.180       5C-26-0A-06-BD-29   温度    10 分钟
192.168.51.203       00-00-A8-C0-86-A1   温度    10 分钟

就绪  13:46:27
图4 – arp_flush命令宏的执行