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

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

运维派隶属马哥教育旗下专业运维社区,是国内成立最早的IT运维技术社区,欢迎关注公众号:yunweipai
领取学习更多免费Linux云计算、Python、Docker、K8s教程关注公众号:马哥linux运维

在开发过程中,一些工具具备修改其他设备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
Windows上ARP缓存更新延迟导致修改IP地址后不能连通(仅Windows7)插图

在操作系同实现层面,都会缓存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上是没有这种问题的。

本文链接:https://www.yunweipai.com/2380.html

网友评论comments

回复 比尔盖子 取消回复

您的电子邮箱地址不会被公开。

  1. 比尔盖子说道:

    用 ARP -D 更方便省事。

    • Simon说道:

      是的。IP地址变更了之后,使用arp -d删除arp缓存,强制刷新缓存表,是一种好的编码习惯。

Copyright © 2012-2022 YUNWEIPAI.COM - 运维派 京ICP备16064699号-6
扫二维码
扫二维码
返回顶部