2013年1月15日 星期二

IP Address Conflict

最近在看一個IP衝突的問題,這個問題非常有趣。

明明每台PC及Router的IP都不一樣,但windows 7那台PC會發出IP衝突的warning...
追到最後,發現原來是router上增加了一個process發出來的ARP造成的。
因為那支Process會定時發ARP確認每台Device是否還在。

但為什麼ARP會造成IP Conflict呢?

通常我們看到的ARP大都是長這個樣 who has 1.1.1.2? tell 1.1.1.1
這個ARP封包的內容大概是長這樣子


Sender HW Address xx:xx:xx:xx:xx:xx /*發ARP那台的MAC*/
Sender IP Address 1.1.1.1 /*發ARP那台的IP*/
Target HW Address 00:00:00:00:00:00 /*目標MAC未知<---這就是發arp的目的*/
Target IP Address 1.1.1.2 /*目標的IP*/


RFC 5227 有定義 IPv4 Address Conflict Detection 的方法,
這個方法很簡單,要確認IP是有衝突時可以廣播一個ARP封包其Sender IP Address 是0.0.0.0。

所以Sender IP Address=0.0.0.0是有特殊用途的

發生問題的原因就是,那支Process發出來的ARP的Sender IP Address 是0.0.0.0。
Windows 7就認為有IP Conflict,而且重新用DHCP取得IP。

這支Process的做法很明顯不對,發ARP時不應該用0.0.0.0當Sender IP Address。

嚴格來講Windows 7也算有問題,當收到Sender IP Address為0.0.0.0,而且Target IP
Address 為自己的IP時,
不應該就當成是IP Conflict,應該還是要broadcast回答這個ARP。

叫Windows 7改太難了,直接改那支Process比較快,把Sender IP Address設對問題就解決了。

沒有留言: