Windows上ARP缓存更新延迟导致修改IP地址后不能连通(仅Windows7)

社区广播:运维派(Yunweipai.com)是国内最早成立的IT运维社区,欢迎大家投稿,让运维人不再孤寂的成长!

在开发过程中,一些工具具备修改其他设备IP地址的功能。
修改IP地址的实现方式有:1)通过IP地址A连接过去修改IP地址B;2)通过IP地址A连接过去修改IP地址A。
这两种方式,都涉及到ARP缓存的更新。
ARP(Address Resolution Protocol)协议是连接IP层与物理层的一种协议,ARP协议负责将网络层的IP地址转换为链路层的MAC地址,因为链路层最终是通过MAC地址发送数据包的。
关于OSI的7层以及他们之间的各种协议,请参考OSI Model

在操作系同实现层面,都会缓存ARP表,纪录该机器访问过的IP地址与MAC地址的关联,当网络层的应用向某个IP地址发送包的时候,系统API会使用ARP协议将IP地址转换为MAC地址然后发送出去。
ARP之所以要缓存是为了效率考虑,如果每次数据包发送都去查找一遍IP地址与MAC地址的映射关系,对性能的消耗是很大的。
所以在操作系统层面都会对ARP做缓存,然后通过自己的机制刷新它。

我们遇到的问题是,Windows机器连接到了一台设备,我们的工具在Windows上运行,去修改该设备的IP地址,将IP地址从A修改为B。
修改完成之后我们去ping这个B IP地址,发现不能立刻ping通,需要ping接近1分钟。

这里就是Widnwos7上面的ARP缓存在捣鬼,因为windows机器上的arp缓存纪录的是修改之前的IP地址A与设备的网卡MAC地址的映射关系,而现在去ping IP地址B,按照理解是能够ping通的,因为windows机器上的ARP缓存中该IP地址不存在,应当去刷新ARP缓存。
不过好像Windows7上面,没有这种机制。貌似一定要等到系统触发的ARP缓存刷新。

后来我们手动执行 arp -d IP_ADDR,将老的arp纪录删除,然后再ping,就可以正常了。

这个问题不直到是否算windows7的bug?因为在XP上是没有这种问题的。

网友评论comments

发表评论

电子邮件地址不会被公开。 必填项已用*标注

  1. 比尔盖子说道:

    用 ARP -D 更方便省事。

Copyright © 2012-2017 YUNWEIPAI.COM - 运维派 - 粤ICP备14090526号-3
扫二维码
扫二维码
返回顶部