《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上是沒有這種問題的.