ARP網絡協議

ARP學習總結

1. ARP出現原因

ARP協議是“Address Resolution Protocol”(地址解析協議)的縮寫。其作用是在以太網環境中,數據的傳輸所依懶的是MAC地址而非IP地址,而將已知IP地址轉換爲MAC地址的工作是由ARP協議來完成的。

在局域網中,網絡中實際傳輸的是“幀”,幀裏面是有目標主機的MAC地址的。在以太網中,一個主機和另一個主機進行直接通信,必須要知道目標主機的MAC地址。但這個目標MAC地址是如何獲得的呢?它就是通過地址解析協議獲得的。所謂“地址解析”就是主機在發送幀前將目標IP地址轉換成目標MAC地址的過程。ARP協議的基本功能就是通過目標設備的IP地址,查詢目標設備的MAC地址,以保證通信的順利進行。

2. ARP映射方式

2.1. 靜態映射

靜態映射的意思是要手動創建一張ARP表,把邏輯(IP)地址和物理地址關聯起來。這個ARP表儲存在網絡中的每一臺機器上。例如,知道其機器的IP地址但不知道其物理地址的機器就可以通過查ARP表找出對應的物理地址。這樣做有一定的侷限性,因爲物理地址可能發生變化:

(1)機器可能更換NIC(網絡適配器),結果變成一個新的物理地址。

(2)在某些局域網中,每當計算機加電時,他的物理地址都要改變一次。

(3)移動電腦可以從一個物理網絡轉移到另一個物理網絡,這樣會時物理地址改變。

要避免這些問題出現,必須定期維護更新ARP表,此類比較麻煩而且會影響網絡性能。

2.2. 動態映射

動態映射時,每次只要機器知道另一臺機器的邏輯(IP)地址,就可以使用協議找出相對應的物理地址。已經設計出的實現了動態映射協議的有ARP和RARP兩種。ARP把邏輯(IP)地址映射爲物理地址。RARP把物理地址映射爲邏輯(IP)地址。

3. ARP原理及流程

在任何時候,一臺主機有IP數據報文發送給另一臺主機,它都要知道接收方的邏輯(IP)地址。但是IP地址必須封裝成幀才能通過物理網絡。這就意味着發送方必須有接收方的物理(MAC)地址,因此需要完成邏輯地址到物理地址的映射。而ARP協議可以接收來自IP協議的邏輯地址,將其映射爲相應的物理地址,然後把物理地址遞交給數據鏈路層。

3.1.ARP請求

任何時候,當主機需要找出這個網絡中的另一個主機的物理地址時,它就可以發送一個ARP請求報文,這個報文包好了發送方的MAC地址和IP地址以及接收方的IP地址。因爲發送方不知道接收方的物理地址,所以這個查詢分組會在網絡層中進行廣播。(見圖1)

3.2.ARP響應

局域網中的每一臺主機都會接受並處理這個ARP請求報文,然後進行驗證,查看接收方的IP地址是不是自己的地址,只有驗證成功的主機纔會返回一個ARP響應報文,這個響應報文包含接收方的IP地址和物理地址。這個報文利用收到的ARP請求報文中的請求方物理地址以單播的方式直接發送給ARP請求報文的請求方。(見圖2)

 

4. ARP協議報文字段抓包解析

4.1. 報文格式

硬件類型:16位字段,用來定義運行ARP的網絡類型。每個局域網基於其類型被指派一個整數。例如:以太網的類型爲1。ARP可用在任何物理網絡上。

協議類型:16位字段,用來定義使用的協議。例如:對IPv4協議這個字段是0800。ARP可用於任何高層協議

硬件長度:8位字段,用來定義物理地址的長度,以字節爲單位。例如:對於以太網的值爲6。

協議長度:8位字段,用來定義邏輯地址的長度,以字節爲單位。例如:對於IPv4協議的值爲4。

操作碼:16位字段,用來定義報文的類型。已定義的分組類型有兩種:ARP請求(1),ARP響應(2)。

源硬件地址:這是一個可變長度字段,用來定義發送方的物理地址。例如:對於以太網這個字段的長度是6字節。

源邏輯地址:這是一個可變長度字段,用來定義發送方的邏輯(IP)地址。例如:對於IP協議這個字段的長度是4字節。

目的硬件地址:這是一個可變長度字段,用來定義目標的物理地址,例如,對以太網來說這個字段位6字節。對於ARP請求報文,這個字段爲全0,因爲發送方並不知道目標的硬件地址。

目的邏輯地址:這是一個可變長度字段,用來定義目標的邏輯(IP)地址,對於IPv4協議這個字段的長度爲4個字節。

4.2. ARP報文總長度

ARP報文的總長度爲64字節。

首先要知道幀的概念 幀是在數據鏈路層傳輸的數據格式,比如以太網v2,以太網IEEE802.3和PPP等。

所以Wireshark抓到的幀是包含幀頭的,即包含以太網v2的幀頭,長14 bytes;

而ARP數據包的長度固定爲28 bytes;

幀總長度 = 幀頭 + 網絡層包頭 + 傳輸層報文頭 + 應用數據;

而ARP請求中ARP包已經是最高層,之上沒有傳輸層和應用層,所以總長度爲:

幀總長度 = 幀頭 + ARP包頭 = 14 + 28 = 42 bytes;

而真正 發包的時爲了保證以太網幀的最小幀長爲64 bytes,會在報文裏添加一個padding字段,用來填充數據包大小。

使用wireshark抓包時,抓到的包爲60 bytes。比以太網幀的最小幀長掃了4 bytes,原因是因爲wireshark抓包時不能抓到數據包最後的CRC字段。

CRC字段是爲了校驗以太網幀的正確性。在數據包填充完成後,回去通過算法計算一個值放到數據包的CRC字段中。當接受端收到數據包後,會同樣使用算法計算一個值,然後和CRC字段的值進行對比,查看是否相同。如果不同則證明數據包被更改,如果相同則證明數據包並未被更改。

4.3. 報文封裝

ARP報文直接封裝在數據鏈路幀中,例如,圖4中,ARP分組被封裝在以太網的幀中。注意,幀中的類型字段指出此幀所攜帶的數據是ARP報文。

4.4. 報文抓包解析

既然瞭解了ARP的詳細格式,就嘗試獲取ARP報文。

例:

如圖5所示,pc1給pc2發送ARP請求,此時使用Wireshark獲取ARP抓包數據

當PC1發送的ARP請求報文,以廣播報的形式發送到局域網後,當pc2檢測到IP地址與自己的IP相同,就會發送給PC1響應報文。

對於ARP響應包來說,源IP,目地IP,源MAC,目地MAC都是知道的。

PS:報文中的padding字段是填充數據,爲了保證幀最少有64個字節
————————————————
版權聲明:本文爲CSDN博主「沉默的鵬先生」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/ever_peng/article/details/80008638

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章