《Windows上ARP缓存更新延迟导致修改IP地址后不能连通(仅Windows7)》要点:
本文介绍了Windows上ARP缓存更新延迟导致修改IP地址后不能连通(仅Windows7),希望对您有用。如果有疑问,可以联系我们。
在开发过程中,一些工具具备修改其他设备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上是没有这种问题的.
转载请注明本页网址:
http://www.vephp.com/jiaocheng/4650.html