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 temp 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: no -网络。 -删除:无 -set: no mac_addr: |
图2 - STCP arp命令格式 |
于是我写了一个简短的宏(图3)来实现。这个宏将arp -all的输出重定向到进程目录下的一个文件,然后解析该文件提取IP地址,并对每个地址调用arp -delete。当它完成时,一些条目将被恢复,但它们都将被刷新为当前的映射。
& arp_flush.cm 从这里开始。 & 1.00版本 11-04-17 & [email protected] & & 这个脚本通过单独删除每个条目来清除arp缓存。 & 当它完成时,一些条目将恢复。 & & 本软件以"现状"为基础提供,没有任何保证或承诺。 以及任何形式的支持。作者特别声明任何暗示的。 对适销性或任何特定目的的适用性的保证。 本免责声明适用于,尽管任何口头陈述的任何。 &实物由作者或其他任何人提供。 & &set_string FILE (process_dir)>arp_list。 attach_default_output &FILE&。 arp -all detach_default_output &set LINE 2 又是&label &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 temp 10分钟。 192.168.50.4 00-04-96-35-3F-B5 temp 1分钟。 192.168.50.2 00-04-96-20-C7-EC temp 4分钟。 192.168.50.19 00-0C-29-6B-CA-AE temp 6分钟。 192.168.50.21 00-23-54-79-C5-81 temp 7分钟。 .. . . . 192.168.51.252 00-50-56-BB-4D-8C temp 5分钟。 192.168.51.253 00-0C-29-86-AD-CC temp 3分钟。 准备就绪 13:46:14 准备 删除了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 temp 10分钟。 192.168.51.4 00-04-FC-01-02-3E temp 10分钟。 192.168.51.11 00-00-A8-80-80-4A temp 10分钟。 192.168.51.49 00-50-56-46-08-2C temp 10分钟。 192.168.51.50 00-23-54-52-18-6E temp 10分钟。 192.168.51.76 00-23-54-52-1B-F5 temp 10分钟。 192.168.51.100 00-0C-29-A9-85-44 temp 10分钟。 192.168.51.128 00-00-A8-43-52-22 temp 10分钟。 192.168.51.158 00-26-B9-BC-B7-37 temp 10分钟。 192.168.51.180 5C-26-0A-06-BD-29 temp 10分钟。 192.168.51.203 00-00-A8-C0-86-A1 temp 10分钟。 准备好了 13:46:27 |
图4 - 执行arp_flush命令宏 |