1. 程式人生 > >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上是沒有這種問題的。