1. 程式人生 > >經典ARP協議講解,一定要看

經典ARP協議講解,一定要看

乙太網協議是目前最流行的通訊協議之一。從底層到高層協議家族非常龐大。今天為您介紹一下經常用到卻比一定知道的協議。

在鏈路層上,主機和路由器用他們的實體地址來標誌,即48位的實體地址,也是是我們通常所說的網絡卡地址(MAC地址)。

在網路層上,主機和路由器用邏輯地址來標誌,邏輯地址在本地是唯一的,但在全域性上不一定。在TCP/IP協議族中稱為IP地址,現在常用的版本是IPv4,長度是32位。

因此需要能夠將邏輯地址和相應的實體地址之間進行對映,完成這樣的對映可以使用靜態對映和動態對映。

靜態對映:建立一個表,儲存邏輯地址和實體地址之間的關聯關係。然後將網路上的每個主機都儲存這張表。缺點是對映表必須週期的更新,增加了 網路的開銷。

動態地址對映,地址解析協議ARP和逆地址解析協議RARP。

地址解析協議ARP(Address Resolution Protocol),負責完成邏輯地址向實體地址的動態對映,將32位邏輯地址(IP地址)轉換為48位的實體地址(MAC地址)。

ARP/RARP在TCP/IP協議族中的位置

ARP是通過一個查詢表(ARP快取)來執行這種轉換的。當在ARP快取中沒有找到地址時,則向網路傳送一個廣播請求,網路上所有的主機和路由器都接收和處理這個ARP請求,但是隻有相同IP地址的接收到廣播請求的主機或路由器,發回一個ARP應答分組,應答中包含它的IP地址和實體地址,並儲存在請求主機的ARP快取中。其他主機或路由器都丟棄此分組。

ARP/RARP報文封裝在乙太網幀中的格式

上面圖片中兩個表格,上面的表格是ARP協議的報文格式,下面的表格是乙太網幀格式。ARP/RARP協議是介於鏈路層和IP層的。

乙太網幀格式如上圖下面的表格,6個位元組的目的地址(目的主機的MAC地址),6個位元組的源地址(本機的MAC地址),做個不恰當的比喻,MAC地址可以認為是我們的身份證號,全球唯一。

Ethernet II和IEEE802.3的幀格式比較類似,主要的不同點在於前者定義的2位元組的型別,而後者定義的是2位元組的長度;後者定義的有效長度值與前者定義的有效型別值無一相同,這樣就容易區分兩種幀格式了。

幀型別欄位為2個位元組,802.3中表示資料長度,ETHERNET II中表示幀型別。比如0x0800表示後面的報文是IP協議報文,0x0806表示後面的報文是ARP協議報文。通常小於0x0800表示資料長度。

為了能夠同步乙太網資料,在目的地址之前有7個位元組的前導碼和1個位元組的幀起始標誌。

其序列傳送時二進位制表示為:10101010_10101010_10101010_10101010_10101010_10101010_10101010(前導碼),10101011(幀起始標誌)。但是一定要注意,由於乙太網傳送資料時先發高位元組,同時每個位元組的低位先發,所以最終收的的資料應該是0x55,0x55,0x55,0x55,0x55,0x55,0x55,0xd5。

在乙太網(ARP協議只適用於區域網)中,如果本地主機想要向某一個IP地址的主機(路由表中的下一跳路由器或者直連的主機,注意此處IP地址不一定是IP資料報中的目的IP)發包,但是並不知道其硬體地址,此時利用ARP協議提供的機制來獲取硬體地址。

具體過程如下:

1) 本地主機在區域網中廣播ARP請求,ARP請求資料幀中包含目的主機的IP地址。意思是“如果你是這個IP地址的擁有者,請回答你的硬體地址”。

2) 目的主機的ARP層解析這份廣播報文,識別出是詢問其硬體地址。於是傳送ARP應答包,裡面包含IP地址及其對應的硬體地址。

3) 本地主機收到ARP應答後,知道了目的地址的硬體地址,之後的資料報就可以傳送了。

點對點鏈路不使用ARP協議。

由上面的介紹我們知道,當乙太網幀結構中幀型別為0x0806時,表示ARP協議。報文格式如下:

 

硬體型別:2個位元組,定義網路型別,乙太網是型別1,取值0x0001。也就是說ARP協議不僅僅應用於乙太網協議,還可以支援別的鏈路層協議。

協議型別:2個位元組,定義協議型別,對應IPv4協議,值為0x0800。即0x0800表示IP協議。

硬體地址長度:1個位元組,定義以位元組為單位的物理(硬體)地址長度,如果是乙太網,則為6個位元組(MAC地址長度)。

協議地址長度:1個位元組,定義以位元組為單位的邏輯(協議)地址長度,如果是IP協議,則是4個位元組(IP地址長度)。

操作型別:2個位元組,定義分組的型別,有4中操作型別。

        ARP請求  :0x0001

        ARP應答  :0x0002

        RARP請求:0x0003

        RARP應答:0x0004

傳送端乙太網地址(硬體地址):如果是乙太網,則是源主機乙太網地址(MAC地址),此處和乙太網頭中的源地址對應。

傳送端IP地址:如果是IP協議,則表示源主機的IP地址。

目的乙太網地址:如果是乙太網,則是目的乙太網地址(MAC地址),和乙太網頭中的目的地址對應。

目的IP地址:如果是IP協議,則表示源主機要請求硬體地址的IP地址。

對應ARP請求包來說,目的端的硬體地址欄位無須填充,其他欄位都需要填充。對於ARP回覆包來說,所有欄位都需要填充。

APR請求包是廣播的,但是ARP應答幀是單播的。

對於一個ARP請求來說,除目的地址外的所有其他欄位都有填充值,當系統收到一份目的為本機的ARP請求報文後,它就把硬體地址填進去,然後用兩個傳送端地址分別替換兩個目的地址,並把操作欄位改為2,最後把它傳送回去。

根據乙太網協議規定,乙太網資料報最小長度是64位元組(14位元組的乙太網頭,包含4位元組的FCS),而ARP報文資料長度為28位元組,這樣總長度為46位元組,需要在乙太網幀結構中的PAD欄位填充18個位元組,達到乙太網資料報最小長度64位元組,可填充0。

 版權所有權歸卿萃科技,轉載請註明出處 

原文地址:卿萃科技FPGA極客空間 微信公眾號


掃描二維碼關注卿萃科技FPGA極客空間