分享

LINUX 如何清除arp缓存

 心不留意外尘 2016-05-06

http://blog.sina.com.cn/s/blog_6c762d950100zu3x.html
2012
arp缓存就是IP地址和MAC地址关系缓存列表。在Windows下 arp -d [$ip] 不指定IP地址时清除所有arp缓存。在Linux下 arp -d $ip 必须指定IP地址才能执行这条命令的此参数,所有在Linux系统下 arp -d $ip 命令只能清除一个IP地址的对应MAC地址缓存,当然可以使用

  
  arp缓存就是IP地址和MAC地址关系缓存列表。在Windows下 arp -d [$ip] 不指定IP地址时清除所有arp缓存。在Linux下 arp -d $ip 必须指定IP地址才能执行这条命令的此参数,所有在Linux系统下 arp -d $ip 命令只能清除一个IP地址的对应MAC地址缓存,当然可以使用组合命令操作,这也算是Linux的一个优点吧。
组合命令清除所有arp缓存:
arp -n|awk '/^[1-9]/{system("arp -d "$1)}'
其实Linux也有内部命令清除所有arp缓存,但是不太好记忆,用的人很少。以下命令清除eth0接口的所有arp缓存。
ip neigh flush  dev eth0
Linux 清除arp缓存是把列表标记为(incomplete),在下一次系统清理垃圾是会清除。

       如何清除ARP缓存,达到计算机名与IP的同步 
ARP缓存在某些情况下给我们的实际工作带来了麻烦。特别是网管在进行一些网络测试时,常常因为它掩盖了网络变化的“真相”, 



  IP地址是如何转换为MAC地址,进而实现网络连接的呢?在局域网中,这是通过ARP协议来完成的。为了便于快速查找IP地址与MAC地址,ARP协议自身设计了缓存功能。

  然而,这个缓存却在某些情况下给我们的实际工作带来了麻烦。特别是网管在进行一些网络测试时,常常因为ARP缓存掩盖了网络变化的“真相”,而走上“歧途”,做出一些错误的判断,导致原本正常的网络出现大问题。现在,就让我们来看看ARP缓存是如何掩盖“真相”的。

  网络环境

  三台采用Windows 2000系统的计算机。A计算机的IP地址为192.168.0.1,计算机名为student1;B计算机的IP地址为192.168.0.2,计算机名为student2;C计算机的IP地址为192.168.0.3,计算机名为student3。

  缓存漏洞

  在A机器上运行“ping -a 192.168.0.2”命令,能够正确解析出student2。再运行“ping student2”命令也能够正确解析出IP地址192.168.0.2。

  笔者把B机器的计算机名改为student4并重启,把C机器的计算机名改为student2并重启。此时,笔者在A机器上运行“ping -a 192.168.0.2”命令,能够解析出新的计算机名student4,但在运行“ping student2”命令时,却发现解析出的IP地址仍然是192.168.0.2。

  随后,笔者又在A机器上运行“ping -a 192.168.0.3”命令,能够解析出计算机名student2,而运行“ping student2”命令还是解析出IP地址为192.168.0.2。

  由此可见,网络中的计算机名虽然已经发生了变化,但在网管进行测试时,计算机却不能及时反映出“变化”。显然,真相被“掩盖”了。

  总结

  当我们使用“ping”来查找IP地址或使用“ping –a”来查找计算机名的时候,实际上计算机调用的是ARP协议。如果是首次查找IP或计算机名,计算机会通过ARP协议发送广播,当查到相关内容后就会把该内容返还给用户,并把相应的内容存在ARP缓存中,当再次查找同样的内容时,ARP协议会先查看自己的缓存,如果发现有匹配的信息它就会直接把该内容反馈给用户,如果缓存中没有该内容它才会进行查找。这就造成了一种现象,当存在于ARP缓存中的信息是旧信息(该信息没有得到更新)时,ARP反馈给用户的也将是这些旧信息(即错误信息),ARP缓存就这样掩盖了网络已发生变化的“真相”。

  可以看出,由于ARP缓存的原因,计算机名和IP的对应关系已经混乱。修改B机器的计算机名后,A机器并没有马上进行计算机名同步更新,也就是说在A机器上的ARP缓存中仍然保留着student2与192.168.0.2的对应关系。虽然“ping -a 192.168.0.2”,可以解析出新的计算机名student4,但“ping student2”时系统还是将它映射为以前的192.168.0.2,而不是更新后的192.168.0.3。产生这个问题的罪魁祸首就是ARP缓存中的错误信息,我们只能通过重新启动计算机A以清空ARP缓存或执行“arp –d”命令删除相应的ARP缓存内容来解决这个问题。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多