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協議的邏輯地址,将其映射為相應的物理地址,然後把物理地址遞交給數據鍊路層。
更多linux内核視頻教程文檔資料免費領取後台私信【内核】自行獲取.
Linux内核源碼/内存調優/文件系統/進程管理/設備驅動/網絡協議棧-學習視頻教程-騰訊課堂
3.1.ARP請求任何時候,當主機需要找出這個網絡中的另一個主機的物理地址時,它就可以發送一個ARP請求報文,這個報文包好了發送方的MAC地址和IP地址以及接收方的IP地址。因為發送方不知道接收方的物理地址,所以這個查詢分組會在網絡層中進行廣播。(見圖1)
3.2.ARP響應
局域網中的每一台主機都會接受并處理這個ARP請求報文,然後進行驗證,查看接收方的IP地址是不是自己的地址,隻有驗證成功的主機才會返回一個ARP響應報文,這個響應報文包含接收方的IP地址和物理地址。這個報文利用收到的ARP請求報文中的請求方物理地址以單播的方式直接發送給ARP請求報文的請求方。(見圖2)
硬件類型: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個字節
- - 内核技術中文網 - 構建全國最權威的内核技術交流分享論壇
轉載地址:一文講解--ARP協議詳解 - 圈點 - 内核技術中文網 - 構建全國最權威的内核技術交流分享論壇
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!