還記得資料鏈路層的乙太網的協議中,每乙個資料報都有乙個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快取資料準備好資料鏈路層的的資料報傳送工作。
之前的文章《乙太網資料報結構》可以看出圖表示arp協議的資料結構。
這裡先看一下典型的arp包的組成結構。
前面12個位元組是mac位址,在《乙太網資料報結構》文章中講解過,接下來是幀型別,其中0806表示是arp協議幀。接下來,就是arp資料報部分了,第乙個硬體型別字段表示傳送方想要知道的硬體介面型別硬體,對於乙太網mac位址,它的值應該為1。協議型別字段表示要對映的協議位址型別,它的值為0x0800時,即表示要對映為ip位址,可以看出,該值與乙太網資料幀頭中型別欄位的值使用相同的一組值。
接下來的兩個單位元組長度的字段,稱為硬體位址長度和協議位址長度,它們分別指出硬體位址和協議位址的長度,長度單位為位元組。對於乙太網上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應答。
假設查詢ip為192.168.0.103的mac位址,使用如下命令
抓包分析
這裡分享下wireshark的抓包檔案
arp資料報的種類有兩種:
一是arp請求包,它是通過乙太網廣播的方式傳送的,用於向具有某個ip位址的主機傳送請求,希望該主機返回其mac位址;
二是arp應答包,收到arp請求的主機會比對該資料報中的ip位址與自己的ip位址是否符合,若是,則該主機向源主機返回乙個arp應答包,向源主機報告自己的mac位址。源主機通過提取arp應答包中的相關欄位來更新arp快取表。
乙個典型的arp快取資訊如下,在任意乙個系統裡面用「arp-a」命令:
都會得到這樣的結果。這樣的快取記憶體是有時限的,一般是20分鐘(伯克利系統的衍生系統)。
舉個栗子
情況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處理。
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攻擊,但是缺點是違背了arp協議的動態位址解析原則。
TCP IP協議 ARP協議
arp協議 以下就預設在乙太網型別的網路。這個協議的作用是通過ip位址 32bit 找到硬體位址 48bit 順便提一下 在乙個區域網裡,大家常見的裝置交換機,交換機上的主機在互相通訊時,實際用的就是硬體 mac 位址,它並不管誰的ip。因此說交換機是鏈路層上的裝置,而不是ip層上的裝置。舉乙個ft...
TCP IP協議簇總結
各協議對應osi層次如下 osi中的層 功能 tcp ip協議族 應用層檔案傳輸,電子郵件,檔案服務,虛擬終端 tftp,http,snmp,ftp,smtp,dns,telnet 等等 表示層資料格式化,轉換,資料加密 沒有協議 會話層解除或建立與別的接點的聯絡 沒有協議 傳輸層提供 端對端的介面...
TCP IP協議簇概述
tcp ip是乙個真正的開放式系統。它可以使執行著完全不同的作業系統,由不同廠家生產的各種型號的計算機互相進行通訊。tcp ip協議簇是internet的基礎,也是當今最流行的組網形式。tcp ip的分層 網路協議通常分不同層次進行開發,每一層分別負責不同的通訊功能。tcp ip模型分為 網路接入層...