TCP/IP協議簇中ARP協議

一、ARP協議簡介

在《IP協議》中咱們講解了IP地址相關內容,IP協議中包含了目的IP地址和源IP地址,可是當一臺主機把以太網數據幀發送到位於同一局域網上的另外一臺主機時,是根據48bit的以太網地址來肯定目的接口的。設備驅動程序從不檢查IP數據報中的目的IP地址。緩存

還記得數據鏈路層的以太網的協議中,每個數據包都有一個MAC地址頭麼?咱們知道每一塊以太網卡都有一個MAC地址,這個地址是惟一的,那麼IP包是如何知道這個MAC地址的?這就是ARP協議的工做。網絡

在OSI模型中ARP協議屬於鏈路層;而在TCP/IP模型中,ARP協議屬於網絡層。ARP協議數據哪一層,不一樣的資料有不一樣的說法,這裏不做重點討論。數據結構

ARP(地址解析)協議是一種解析協議,原本主機是徹底不知道這個IP對應的是哪一個主機的哪一個接口,當主機要發送一個IP包的時候,會首先查一下本身的ARP高速緩存(就是一個IP-MAC地址對應表緩存),若是查詢的IP-MAC值存不存在,那麼主機就向網絡發送一個ARP協議廣播包,這個廣播包裏面就有待查詢的IP地址,而直接收到這份廣播的包的全部主機都會查詢本身的IP地址,若是收到廣播包的某一個主機發現本身符合條件,那麼就準備好一個包含本身的MAC地址的ARP包傳送給發送ARP廣播的主機,而廣播主機拿到ARP包後會更新本身的ARP緩存(就是存放IP-MAC對應表的地方)。發送廣播的主機就會用新的ARP緩存數據準備好數據鏈路層的的數據包發送工做。app

二、ARP協議結構

以前的文章《以太網數據包結構》能夠看出圖表示ARP協議的數據結構。ui

 

 

 這裏先看一下典型的ARP包的組成結構。spa

 

 

 前面12個字節是MAC地址,在《以太網數據包結構》文章中講解過,接下來是幀類型,其中0806表示是ARP協議幀。接下來,就是ARP數據包部分了,第一個硬件類型字段表示發送方想要知道的硬件接口類型硬件,對於以太網MAC地址,它的值應該爲1。協議類型字段表示要映射的協議地址類型,它的值爲0x0800時,即表示要映射爲IP地址,能夠看出,該值與以太網數據幀頭中類型字段的值使用相同的一組值。blog

接下來的兩個單字節長度的字段,稱爲硬件地址長度和協議地址長度,它們分別指出硬件地址和協議地址的長度,長度單位爲字節。對於以太網上ARP請求或應答來講,它們的值分別爲6和4,表明MAC地址的長度和IP地址的長度。在ARP協議包中留出硬件地址長度字段和協議地址長度字段可使得ARP協議在任何網絡中被使用,而不只僅只在以太網中。接口

操做字段op指出ARP數據包的類型,它們能夠是ARP請求(值爲1)、ARP應答(值爲2)、RARP請求(值爲3)和RARP應答(值爲4),這裏咱們只關心前兩個類型。RARP爲逆地址解析協議,這裏簡單說一下,RARP用於主機啓動時得到本身的IP地址。這個過程很簡單:主機啓動時,廣播發送一個RARP請求數據包,數據包中包含了自身的MAC地址,而後等待響應。網絡中另外一臺主機必須設置爲監聽RARP請求狀態,並在收到請求後爲該主機分配一個IP地址並返回RARP應答給主機,一旦收到應答,主機就有了IP地址,就能夠在後續中使用了。內存

接下來的四個字段是發送端的以太網MAC地址、發送端的IP地址、目的端的以太網MAC地址和目的端的IP地址。路由

關於PAD填充字節,請看《以太網數據包結構》有講解。

注意:在以太網的數據幀頭部中和ARP數據包中都有發送端的以太網MAC地址。對於一個ARP請求包來講,除接收方以太網地址外的全部字段都應該被填充相應的值。當接收方主機收到一份給本身的ARP請求報文後,它就把本身的硬件地址填進去,而後將該請求數據包的源主機信息和目的主機信息交換位置,並把操做字段op置爲2,最後把該新構建的數據包發送回去,這就是ARP應答。

三、wireshark抓包分析

假設查詢IP爲192.168.0.103的MAC地址,使用以下命令

arp -a 192.168.0.103

 

 

 抓包分析

 

 

 這裏分享下wireshark的抓包文件

連接:https://pan.baidu.com/s/1AWPj85Jb4nmLY8h2yJucUA  提取碼:bxjq

四、ARP協議分類

ARP數據包的種類有兩種:

一是ARP請求包,它是經過以太網廣播的方式發送的,用於向具備某個IP地址的主機發送請求,但願該主機返回其MAC地址;

二是ARP應答包,收到ARP請求的主機會比對該數據包中的IP地址與本身的IP地址是否符合,如果,則該主機向源主機返回一個ARP應答包,向源主機報告本身的MAC地址。源主機經過提取ARP應答包中的相關字段來更新ARP緩存表。

一個典型的arp緩存信息以下,在任意一個系統裏面用「arp-a」命令:

 

 

 都會獲得這樣的結果。這樣的高速緩存是有時限的,通常是20分鐘(伯克利系統的衍生系統)。

五、ARP協議應用

基礎知識:路由下有兩個設備,他們相互知道對方IP和MAC,可是他們不能直接通信,須要路由作轉發,若是兩個設備直接用網線連起來,就是直接通信。

 舉個栗子

路由下有兩個設備,首先一點:每一個設備(包括路由),都有本身的ARP緩存表。設備A向局域網下設備B通信(A設備知道B設備的IP)

狀況1:A知道B的MAC地址,也就是在本身的ARP緩存表有設備B,直接封包,交給路由就好。

狀況2:A不知道B的MAC地址,也就是在本身的ARP緩存表沒有設備B,此時比較不幸,發送數據須要延時發送,首先設備A會向網關(就是路由)ARP請求包(以太網目的地址是FF-FF-FF-FF-FF-FF),這時候分狀況A和B。

狀況A:路由知道設備B的MAC,也就是本身的ARP緩存表有設備B,把本身的知道的設備B的IP和MAC返給設備A,設備A更新一下,本身的ARP緩存表,按狀況1處理。

狀況B:路由不知道設備B的MAC,路由就在本身的局域網發送,ARP請求包,去問設備B的MAC。獲得以後,再發送給A。A獲得MAC地址後按照狀況1處理。

上述狀況說明,想要網絡設備第一次就通信流暢,必需要局域網內的設備都知道本身的MAC地址,在網絡設備開發中咱們通常在網絡設備首次接入網絡後,首先向局域網廣播本身的<IP,MAC>地址信息,稱爲無回報(gratuitous)ARP請求,這樣的一個ARP數據包將告訴其餘主機關於本身的信息,其餘主機根據各自收到的ARP包更新本身的ARP表項。上文中提到的伯克利系統的衍生系統,ARP的緩存表通常存儲20分鐘,若是不及時更新,主機會刪除「離線」設備的ARP表,由於主機ARP緩存表內存有限,不可能存儲無限的ARP表信息。針對這種狀況,咱們開發網絡設備,須要每隔一段時間廣播一下本身的<IP,MAC>地址信息,表示本身「還活着」。可是不能太過頻繁發送,頻繁發送會被部分型號的路由認爲是病毒。

六、ARP攻擊

上一篇《IP協議》講解了IP攻擊,接下來說解下咱們常聽的ARP攻擊。

ARP協議有一個很大的漏洞,若是網絡中的全部用戶都規規矩矩,按照上述流程使用ARP就不會存在任何問題。但若是有惡意的設備收到一個ARP請求包(ARP請求包是廣播形式發送的,局域網全部主機均可以收到),它無論包中的IP地址是否和本身相同,都會產生一個ARP應答包,告訴請求的用戶:我這臺主機的MAC地址就是你請求的目的IP地址匹配的MAC地址。另外一方面,因爲發送ARP請求的源主機不具有任何容錯、認證功能(ARP協議未提供任何機制實現這些功能),這樣它便會輕易地相信這條ARP應答,並把它加入到了本身的ARP緩存表中。這樣作的後果可想而知,源主機在之後都會將具備該目的P地址的數據包發送到那個惡意的主機上。這樣,它能輕鬆地實現數據的竊聽,這也就是咱們經常據說的ARP攻擊的基本原理。

 

 

 當PC1發送ARP協議詢問PC2的MAC地址時,因爲是廣播的,PC3也收到了這個ARP請求包,PC3把不屬於本身的廣播包接收,同時迴應一個虛假的迴應包,告訴PC1我就是PC2。這樣PC1會收到兩個迴應包(一個正確的IP2-MAC2,一個虛假的IP2-MAC3),可是PC1並不知道到底哪一個是真的,因此PC1會作出判斷,而且判斷後到達的爲真,那麼怎麼讓虛假的迴應包後到達呢,PC3能夠接二連三的發送這樣的迴應包,總會把哪一個正確的迴應包覆蓋掉。

然後PC1會創建IP2-MAC3這樣一條ARP緩存條目,之後當PC1給PC2發送信息的時候,PC1依據OSI模型從上至下在網絡層給數據封裝目的IP爲IP2的包頭,在鏈路層經過查詢ARP緩存表封裝目的MAC爲MAC3的數據幀,送至交換機,根據查詢CAM表,發現MAC3對應的接口爲Port3,就這樣把信息交付到了PC3,完成了一次ARP攻擊。

若是ARP攻擊嚴重的話,惡意的網絡設備只要在網絡內閱讀送上門的全部廣播的ARP請求數據包,就能偷聽到網內全部<IP,MAC>地址信息,進而監聽多臺網絡設備。

 

防止辦法:

咱們可使用靜態ARP緩存表防止ARP攻擊,可是缺點是違背了ARP協議的動態地址解析原則。

 

點擊查看本文所在的專輯,STM32F207網絡開發

相關文章
相關標籤/搜索