天天看點

一文搞懂ARP協定,8張圖詳解如何通過目的ip拿到mac位址

作者:IT一指禅

大家好,我是IT售前工程師Bernie。

我們知道,在網絡通信中主機和主機通信的資料包需要依據 OSI 模型從上到下進行資料封裝,當資料封裝完整後,再向外發出。是以在區域網路的通信中,不僅需要源目IP位址的封裝,也需要源目 MAC 的封裝。

如果一台主機在資料幀封裝前不知道某個目的ip機器的mac位址怎麼辦呢? 這時候就需要通過 ARP 協定來獲知目的主機的MAC 位址,完成資料封裝。

什麼是ARP

ARP 協定的全稱是 Address Resolution Protocol,位址解析協定。說直白一點:ARP協定可以用來根據ip位址尋找mac位址的協定。

一文搞懂ARP協定,8張圖詳解如何通過目的ip拿到mac位址

ARP協定的工作原理

舉個簡單的例子,在同一個區域網路内有4台主機通過交換機連接配接。那麼,當pc1想要拿到ip=192.168.1.4對應的mac位址時。它将進行如下的操作

一文搞懂ARP協定,8張圖詳解如何通過目的ip拿到mac位址

第1步

它會查詢自己的ARP協定表,看看有沒有這個IP綁定的mac位址。我們可以通過cmd下輸入arp -a指令查詢ip與mac位址的對應關系表。如果能查詢到,則拿到這個mac位址進行以太網協定的封裝即可。

如果拿不到,就要通過arp廣播的形式去詢問同一個網段下的所有主機。

一文搞懂ARP協定,8張圖詳解如何通過目的ip拿到mac位址

第2步

pc1這台機器開始發送ARP廣播,廣播資訊裡面封裝了ip位址和mac位址。這裡ip位址為pc4的位址192.168.1.4,mac位址由于不知道,是以每一位都是0。

由于發送的是ARP廣播協定,同一個vlan下的主機全都能接收到這條消息。

一文搞懂ARP協定,8張圖詳解如何通過目的ip拿到mac位址

第3步

每台主機收到了這條廣播消息後,迅速查詢下自己的ip位址和mac位址。如果發現資料包中ip位址是自己的ip,那麼就第一時間更新自己的ARP表,将PC1的ip\mac位址做更新。然後,将自己的mac位址利用單點傳播的形式傳回給pc1。

一文搞懂ARP協定,8張圖詳解如何通過目的ip拿到mac位址

第4步

pc1收到響應回來的mac位址,立即更新到自己的ARP表中。同時,将IP資料包用這個mac位址為目的mac位址封裝成幀與pc4通信。

不同網段之間的ARP協定

換一個思路,如果pc1和pc4不在同一個網段,如何才能拿到pc4的mac位址呢?

比如下圖,pc1和pc2\pc3在同一個網段,但是和pc4\pc5不在同一個網段。

一文搞懂ARP協定,8張圖詳解如何通過目的ip拿到mac位址

很明顯,pc1和pc4是不能直接使用ARP協定的,那麼這就要使用ARP代理路由了。代理路由可以将pc1的廣播轉送給pc4/pc5,然後在響應時pc4也要借助于ARP代理路由将mac位址傳給pc1。

ARP資料包

為了讓大家更好的了解 ARP 協定以及廣播和單點傳播的概念,我們來看一下用 抓包工具抓到到的真實網絡中的 ARP 過程,通過資料包的方式來呈現,位址資訊如下,部分 MAC 資訊隐去。

請求包

一文搞懂ARP協定,8張圖詳解如何通過目的ip拿到mac位址

響應包

一文搞懂ARP協定,8張圖詳解如何通過目的ip拿到mac位址

解讀

Hardware type :硬體類型,辨別鍊路層協定

Protocol type: 協定類型,辨別網絡層協定

Hardware size :硬體位址大小,辨別MAC位址長度,這裡是6個位元組(48bti)

Protocol size: 協定位址大小,辨別IP位址長度,這裡是4個位元組(32bit)

Opcode: 操作代碼,辨別ARP資料包類型,1表示請求,2表示回應

Sender MAC address :發送者MAC

Sender IP address :發送者IP

Target MAC address :目标MAC,此處全0表示在請求

Target IP address: 目标IP

總結

OSI模型把網絡工作分為七層,IP位址在OSI模型的第三層,MAC位址在第二層。在通過以太網發送IP資料包時,需要先封裝第三層(32位IP位址)、第二層(48位MAC位址)的報頭。ARP 協定在TCP/IP模型中屬于IP層(網絡層),在OSI模型中屬于鍊路層。

我是IT售前工程師Bernie,歡迎關注!下期見~

繼續閱讀