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命令宏的执行 |
