ARP協議抓包之幀長度和Gratuitous ARP的問題


  用Winpcap編程構造ARP包選擇網卡並發出,遇到若干問題,學到了許多新知識,但是有的還尚未解決,在這里記錄下沒解決的和解決的問題。

  先來看下ARP協議的格式,ARP字段有28個字節,發到以太網中還要加上14字節的以太網首部和4字節的FCS尾部,一共是28+14+4=46字節,以太網幀的最小長度為64字節,所以還要在尾部之前填充18個字節。 

依據此原理我用winpcap編程實現了構造發送ARP包的源程序,並用Wireshark抓到了構造的ARP包,長度為64字節。

但是我在局域網的環境下抓包發現,驚奇的發現ARP幀長度竟然是42字節

對比之下發現與64字節的包相比少了4字節的FCS和18字節的填充位,由於之前我自己抓的64字節的ARP包都是在本機與虛擬機之間做的測試,為了消除不定因素,我准備了同一局域網中的兩台真實的計算機做測試:

發送我構造ARP包的主機IP為:172.31.57.222  255.255.192.0

接收我構造ARP包的主機IP為:172.31.40.147  255.255.192.0

分別在兩天主機上抓包

發送方抓到的包:

接收方抓到的包:

這下發現發送方和接收方抓到的包都是64字節,考慮到局域網中都是Windows系統,用mac發送ARP包同樣是42字節,我又用Linux系統發送ARP包,又發現抓到的包是60字節,對比發現少了4字節的FCS,為什么會這樣,我還沒有找到資料,先記下來,再解決。

 

 

在真實的局域網中抓包的時候還發現了一個奇怪的ARP包,叫Gratuitous ARP,查下資料發現

百度百科的解釋和例子:

Gratuitous ARP也稱為免費ARP,無故ARP。Gratuitous ARP不同於一般的ARP請求,它並非期待得到ip對應的mac地址,而是當主機啟動的時候,將發送一個Gratuitous arp請求,即請求自己的IP地址的mac地址。

免費ARP可以有兩個方面的作用:
1) 一個主機可以通過它來確定另一個主機是否設置了相同的I P地址。主機bsdi並不希望對此請求有一個回答。但是,如果收到一個回答,那么就會在終端日志上產生一個錯誤消息“以太網地址a:b:c:d:e:f發送來重復的I P地址”。這樣就可以警告系統管理員,某個系統有不正確的設置。
2) 如果發送免費ARP的主機正好改變了硬件地址(很可能是主機關機了,並換了一塊接口卡,然后重新啟動),那么這個分組就可以使其他主機高速緩存中舊的硬件地址進行相應的更新。一個比較著名的ARP協議事實[Plummer 1982]是,如果主機收到某個I P地址的A R P請求,而且它已經在接收者的高速緩存中,那么就要用ARP請求中的發送端硬件地址(如以太網地址)對高速緩存中相應的內容進行更新。主機接收到任何ARP請求都要完成這個操作(ARP請求是在網上廣播的,因此每次發送ARP請求時網絡上的所有主機都要這樣做)。
很多系統都使用雙機熱備份系統(即一個主用,另一個備用, 如果主用沒有問題,備用一直處於空閑狀態;如果主用出現問題,備用立刻接管)。假設主用服務器的MAC地址為:1111-1111-1111,備用服務器 的MAC地址為:2222-2222-2222,通過某種軟件,兩台服務器對外共用一個IP,例如10.10.10.1,這樣客戶機在需要同服務器進行通 信的時候(第一次通信時ARP的緩存是空的,或至少沒有10.10.10.1的MAC地址),先向局域網發送廣播ARP請求報文,請求 10.10.10.1這個IP地址的MAC地址,得到主用服務器響應后,將10.10.10.1和對應的MAC地址放入自己的ARP緩存中,然后向這個 IP發送請求就可以進行通信了。如果在通信的過程中,主用服務器突然發生故障,宕機了,這時備用服務器立刻接管10.10.10.1這個IP進行服務,可 是剛才那台客戶機的ARP緩存表中10.10.10.1這個IP對應的MAC地址是1111-1111-1111,再往這個MAC地址發送數據包肯定是石 沉大海的,怎樣才能讓備用接管了服務之后立刻能起作用呢?
我們能想到的方法有兩種,一種就是在使用雙機熱備份系統,接管那個IP的時候,生成一個不依賴於任何一個主機的虛擬MAC地址,接管IP的同時也接管那個 虛擬的MAC地址,這樣客戶機不需要做任何更改動作,ARP緩存表不變。另外一種就是在接管的同時,接管的服務器對外廣播一個ARP報文給所有主機,例如 在剛才的例子中,ARP廣播報文的數據字段中源IP地址是10.10.10.1,源MAC地址是2222-2222-2222,目的IP地址也是 10.10.10.1,目的MAC地址也是2222-2222-2222,IP報文的目的地址是FFFF-FFFF-FFFF,這樣讓所有的廣播網絡上的 主機接收該報文,並更新自己的ARP緩存表,已告知10.10.10.1這個IP的對應MAC地址已經變為2222-2222-2222,這樣,剛才的那 個客戶機就能正確地同服務器進行通信了。
 
也就是源IP地址和目的IP地址相同的ARP包就是這個神奇的Gratuitous ARP,啟動網卡時WINDOWS會發送這個神奇的Gratuitous ARP,但是LINUX不發送和識別這個包。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM