一、引言
在真實的網路上傳輸的資料幀不是IP地址來傳的,是通過每一個網路卡的特有的實體地址(MAC地址)來傳輸的。上層協議一般是隻知道IP地址,不知道MAC地址的。因此需要有通過IP地址知道MAC地址的方法,這就是ARP(Addess Resolution Protocol)。 有時候知道一臺機器的實體地址,而不知道該機器的IP地址(如,具有本地磁碟的系統引導時,一般是從磁碟上的配置檔案中讀取IP地址。但是無盤機/無盤工作站,則需要採用其他方法(RARP)來獲得 I P地址)。通常是某主機傳送一份RARP資料包到網路上,另一主機(RARP伺服器)響應該RARP資料包,告訴當前主機他的IP地址。
二、ARP與RARP資料包
這是是一個完整的乙太網ARP/RARP資料幀(圖1中,每一域的長度單位是位元組),該幀去掉了CRC校驗和,前三個區域為前面介紹的鏈路層乙太網幀格式。ARP與RARP的資料包格式是相同的,只是某些區域欄位值(以太幀型別、運算元)不相同而已。除去以太幀首部外的其他域解釋如下:- 以太幀幀型別:長度2個位元組,0x0800-IP資料包,0x0806-ARP請求/應答資料包,0x8035-RARP請求/應答資料包。
- 硬體型別(Hardware type):指明該ARP資料包的網路硬體型別,長度2個位元組,0x0001-乙太網。
- 協議型別(Protocol type):指明該ARP資料包的使用協議,長度2個位元組,0x0800-IP地址協議。協議型別與硬體型別共同確定後面資料儲存結構,這裡只是乙太網ARP/RARP。
- 硬體地址長度(Hardware Size): 指明之後的硬體地址長度,長度1個位元組。0x06-乙太網地址長度(6個位元組),該長度的單位是位元組。
- 協議地址長度(Protocol Size):指明之後的協議地址長度,長度1個位元組。0x04-IP地址長度(4個位元組),該長度的單位是位元組。
- 操作碼(Opcode):指明該資料包是幹嘛的,長度2個位元組。0x0001-ARP請求包,0x0002-ARP應答包;0x0003-RARP請求包,0x0004-RARP應答包。
- 源乙太網MAC地址(Sender MAC Address):傳送端乙太網實體地址,長度6個位元組。
- 源IP地址(Sender IP Address):傳送端IP地址,長度4個位元組。
- 目的乙太網MAC地址(Target MAC Address):目的乙太網MAC地址,長度6個位元組。ARP傳送包初始化為0,ARP應答包為具體MAC地址;RARP傳送包初始化為需要解析的MAC地址。
- 目的IP地址(Target IP Address):目的IP地址,長度為4個位元組。ARP傳送包初始化為需要解析的IP地址。RARP傳送包初始化為0,RARP應答包填充對應的IP地址。
ARP與RARP資料包既可以單播(乙太網目的地址為具體的某個機器的MAC地址),也可以廣播(乙太網目的地址為全為1的MAC地址)。
三、ARP與RARP特性
1. ARP特性
- ARP快取記憶體:ARP能夠高效執行的原因是每一個主機都有一個ARP快取記憶體。這個快取記憶體存放了最近的IP地址與硬體之間的對映關係。快取記憶體一般設定的生存時間是20分鐘。起始時間是從被建立時候開始算起。在命令列中,我們可以通過arp命令檢視這些快取。
- ARP代理(Proxy ARP):有時候需要將網路A中的資料包傳送到網路B中某主機,當在網路A中傳送ARP請求包的時候,網路A與網路B之間的路由器會響應該ARP包。這樣就讓ARP請求包傳送端,誤認為路由器是目的主機。
- 額外的ARP(gratuitous ARP):指的是主機A傳送查詢主機A的IP地址對應MAC的ARP請求包。傳送查詢自己的ARP包怪嗎?不怪,因為可以通過這種方式:(1).該網路上是否具有相同IP地址的主機。(2).如果主機A的實體地址發生變化,可以通過這種方式更新其他主機中相應的ARP快取記憶體。
2.RARP特性
- RARP的響應需要RARP伺服器的。該伺服器記錄了IP地址與實體地址的對應關係。通常一個網路中有多個RARP伺服器。
- 當伺服器的數目增加時(以提供冗餘備份),網路流量也隨之增加,因為每個伺服器對每個RARP請求都要傳送RARP應答。傳送RARP請求的無盤系統一般採用最先收到的 RARP應答(對於 ARP,我們從來沒有遇到這種情況,因為只有一臺主機傳送 ARP應答)。另外,還有一種可能發生的情況是每個 RARP伺服器同時應答,這樣會增加乙太網發生衝突的概率。
四、ARP抓包
上面,兩圖是一對。我們可以看到這是一個單播的ARP。
都看到這裡了,要不要掃二維碼關注一下微信公眾號林灣村龍貓。