wireshark學(xué)習(xí)筆記(三)——ARP協(xié)議分析

ARP協(xié)議

什么是ARP協(xié)議

協(xié)議分析篇第一個(gè)要研究的就是ARP協(xié)議。ARP(Address Resolution Protocol,地址解析協(xié)議)用于將IP地址解析為物理地址(MAC地址)。這里之所以需要使用MAC地址,是因?yàn)榫W(wǎng)絡(luò)中用于連接各個(gè)設(shè)備的交換機(jī)使用了內(nèi)容可尋址存儲器(CAM,Coment Addressable Memory)。該存儲器維護(hù)的ARP表列出了它在每一個(gè)端口的所有連接設(shè)備的MAC地址。

當(dāng)交換機(jī)收到了一個(gè)指向特定MAC地址的網(wǎng)絡(luò)流量,它就會(huì)使用這個(gè)表,來確定應(yīng)該使用哪一個(gè)端口發(fā)送流量。如果目標(biāo)MAC地址是未知的,那么這個(gè)傳輸設(shè)備會(huì)首先在它的緩存中查找這個(gè)地址,如果沒有找到,那么這個(gè)地址就需要通過在網(wǎng)絡(luò)上額外的通信中解析了?;蛘呶覀兛梢越Y(jié)合下圖來說明這個(gè)問題:



由上圖可見,OSI模型將網(wǎng)絡(luò)分為了七層,而IP地址位于第三層,也就是網(wǎng)絡(luò)層,MAC地址位于數(shù)據(jù)鏈路層,也就是第二層。那么在通過以太網(wǎng)發(fā)送IP數(shù)據(jù)包的時(shí)候,需要首先封裝第三層和第二層的報(bào)頭。但由于發(fā)送數(shù)據(jù)包時(shí)只知道目標(biāo)IP地址,不知道其MAC地址,而又不能直接跨越第二、三層,所以需要地址解析協(xié)議。而在使用了ARP協(xié)議后,計(jì)算機(jī)可以按照網(wǎng)絡(luò)層IP數(shù)據(jù)包的頭部信息,將硬件地址信息(MAC地址)對應(yīng)起來,以保證通信的順利進(jìn)行。ARP協(xié)議的基本功能就是將一個(gè)已知的IP地址解析成MAC地址,以便主機(jī)之間可以正常地通信。

ARP協(xié)議是在RFC826中定義的。RFC(Request for Comments)是定義各種協(xié)議實(shí)現(xiàn)標(biāo)準(zhǔn)的官方文檔,建議大家在學(xué)習(xí)網(wǎng)絡(luò)知識的時(shí)候,應(yīng)當(dāng)多多參考這些資料,因?yàn)樗顧?quán)威,也最全面。大家可以在RFC Editor的首頁中搜索RFC文檔,而在本次的課程中,我也給大家提供了RFC826文檔,包括pdf格式以及txt格式,供大家學(xué)習(xí)參考。通過查看RFC826可以知道,其實(shí)ARP協(xié)議的解析過程只使用了兩種數(shù)據(jù)包:一個(gè)ARP請求和一個(gè)ARP響應(yīng),如下圖所示:


其詳細(xì)工作原理為:

(1)當(dāng)主機(jī)A想要給主機(jī)B發(fā)送數(shù)據(jù)時(shí),主機(jī)A會(huì)首先在自己的本地ARP緩存表中檢查與主機(jī)B相匹配的MAC地址。

(2)如果主機(jī)A在自己的緩存表中沒找到主機(jī)B的相關(guān)條目,那么它就要想辦法獲取主機(jī)B的MAC地址。這就需要將ARP的請求幀廣播到本地網(wǎng)絡(luò)上的所有主機(jī)中。這個(gè)請求幀包含有主機(jī)A的IP地址和MAC地址,以及主機(jī)B的IP地址。網(wǎng)絡(luò)中凡是收到請求幀的主機(jī)都會(huì)檢查自己的IP地址是否與請求地址一致,如果不一致,則會(huì)丟棄該請求幀。對于上圖來說,主機(jī)C和主機(jī)D會(huì)丟棄主機(jī)A發(fā)出的請求幀。

(3)主機(jī)B確定ARP請求中的IP地址和自己的IP地址一致,那么就會(huì)將主機(jī)A的IP地址和MAC地址添加到本地的緩存列表中。

(4)主機(jī)B將包含有自己MAC地址的ARP響應(yīng)消息直接回復(fù)給主機(jī)A(單播)。

(5)主機(jī)A收到從主機(jī)B發(fā)來的ARP響應(yīng)消息后,會(huì)將主機(jī)B的IP地址和MAC地址添加到自己的ARP緩存表中。接下來,主機(jī)A就可以向主機(jī)B發(fā)送消息了。

如果想要查看ARP緩存表,可以打開cmd,輸入“arp -a”:


輸出的信息顯示了本機(jī)接口為172.21.79.153地址的ARP緩存表。每行表示一個(gè)ARP條目。本地的緩存是有生命周期的,默認(rèn)的ARP緩存表的有效期是120秒,過期后,需要重復(fù)上述過程。

分析ARP數(shù)據(jù)包

掌握了以上知識,我們就可以分析ARP數(shù)據(jù)包了。這里我們打開Lab6-1.pcap:



可以看到,第1個(gè)數(shù)據(jù)包是一個(gè)ARP請求。我們可以通過Packet Details面板,檢查以太網(wǎng)頭部信息來確定這個(gè)數(shù)據(jù)包是不是一個(gè)真的廣播數(shù)據(jù)包。

首先在Frame幀中,可以知道該數(shù)據(jù)包的大小為42個(gè)字節(jié)。

其次檢查一下Ethernet部分的內(nèi)容,會(huì)發(fā)現(xiàn)這個(gè)數(shù)據(jù)包目的地址是ff:ff:ff:ff:ff:ff,這是一個(gè)廣播地址,說明當(dāng)前數(shù)據(jù)包會(huì)被廣播到當(dāng)前網(wǎng)段中的所有設(shè)備上。而這個(gè)數(shù)據(jù)包中以太網(wǎng)的源地址就是本機(jī)的MAC地址。

接下來展開ARP請求的頭部信息。按照順序依次為硬件類型、協(xié)議類型、硬件地址長度、協(xié)議長度、操作碼(該值為1,表示這是一個(gè)ARP請求包)、發(fā)送方的MAC和IP地址,以及接收方的IP地址。而我們想要獲取的目標(biāo)MAC地址還是未知的,因此就以全0的形式顯示。

下面我們研究一下第二個(gè)數(shù)據(jù)包,來看看ARP的響應(yīng):




其實(shí)ARP響應(yīng)的數(shù)據(jù)包和ARP請求的數(shù)據(jù)包很相像。不同之處表現(xiàn)在以下幾點(diǎn):首先,用于響應(yīng)的數(shù)據(jù)包的操作碼(Opcode)現(xiàn)在是2,表明這是一個(gè)用于響應(yīng)的數(shù)據(jù)包;其次,發(fā)送方的MAC地址和IP地址變成了目標(biāo)MAC地址和IP地址;最后,響應(yīng)數(shù)據(jù)包中的內(nèi)容都是可用的,也就是說我們已經(jīng)獲取了192.168.0.1主機(jī)的MAC地址,即00:13:46:0b:22:ba,那么接下來就可以正常通信了。

最后我們再討論一個(gè)關(guān)于免費(fèi)ARP(gratuitous ARP)的例子。由于網(wǎng)絡(luò)中一個(gè)設(shè)備的IP地址是可以改變的,而MAC地址不會(huì)改變。那么一旦出現(xiàn)IP地址改變的情況,網(wǎng)絡(luò)主機(jī)中緩存的IP和MAC地址映射就不再有效了。那么為了防止由于映射失敗造成的通信錯(cuò)誤,免費(fèi)的ARP請求會(huì)被發(fā)送到網(wǎng)絡(luò)中,強(qiáng)制所有收到它的設(shè)備使用新的IP以及MAC地址映射來更新緩存。通常,它發(fā)生在系統(tǒng)引導(dǎo)期間進(jìn)行接口配置或IP地址出現(xiàn)變化的時(shí)候。

這里我們分析一個(gè)包含有免費(fèi)ARP的實(shí)驗(yàn)文件(Lab6-2.pcap):



首先我們可以看到這個(gè)數(shù)據(jù)包是以廣播的形式發(fā)出的,這樣一來,網(wǎng)絡(luò)上的所有主機(jī)都能收到它。接下來我們可以發(fā)現(xiàn),發(fā)送方的IP地址和接收方的IP地址是一致的。網(wǎng)絡(luò)中的其它主機(jī)收到這個(gè)數(shù)據(jù)包之后,它會(huì)讓這些主機(jī)使用新的IP和MAC地址映射關(guān)系來更新它們的ARP表。由于這個(gè)ARP數(shù)據(jù)包是源主機(jī)未經(jīng)請求主動(dòng)發(fā)出的,并導(dǎo)致了目標(biāo)主機(jī)更新了ARP緩存,所以稱之為免費(fèi)的ARP。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容