1. 程式人生 > >ARP協議與RARP協議

ARP協議與RARP協議

ARP:地址解析協議

對於乙太網,資料鏈路層上是根據48bit的乙太網地址來確定目的介面,裝置驅動程式從不檢查IP資料報中的目的IP地址。ARP協議為IP地址到對應的硬體地址之間提供動態對映。

工作過程

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

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

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

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

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

幀格式

 ARP/RARP幀格式

  • 乙太網目的地址:目的主機的硬體地址。目的地址全為1的特殊地址是廣播地址。
  • 乙太網源地址:源主機的硬體地址。
  • 幀型別:對於ARP協議,該欄位為0x0806。對於RARP協議,該欄位為0x8035
  • 硬體型別:表示硬體地址的型別。值為1時表示乙太網地址。也就是說ARP協議不僅僅應用於乙太網協議,還可以支援別的鏈路層協議
  • 協議型別:表示要對映的協議地址型別。值為0x0800
    時表示IP協議。
  • 硬體地址長度:與硬體型別對應的硬體地址的長度,以位元組為單位。如果是乙太網,則是6位元組(MAC長度)。
  • 協議地址長度:與協議型別對應的協議地址長度,以位元組為單位。如果是IP協議,則是4位元組(IP地址長度)。
  • 操作型別(op):四中操作型別。ARP請求(1),ARP應答(2),RARP請求(3),RARP應答(4
  • 傳送端硬體地址:如果是乙太網,則是源主機乙太網地址,此處和乙太網頭中的源地址對應。
  • 傳送端協議地址:如果是IP協議,則表示源主機的IP地址。
  • 目的端硬體地址:如果是乙太網,則是目的乙太網地址,和乙太網頭中的目的地址對應。
  • 目的端協議地址:如果是IP協議,則表示源主機要請求硬體地址的
    IP地址。
  • 對應ARP請求包來說,目的端的硬體地址欄位無須填充,其他欄位都需要填充。對於ARP回覆包來說,所有欄位都需要填充。

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

乙太網資料報最小長度是60位元組(14位元組的乙太網頭,不包含4位元組的FCS),ARP資料包長度為42位元組(14位元組的乙太網頭和28位元組的ARP資料),需要加入填充字元到乙太網最小長度要求:60位元組。

ARP快取記憶體

每個主機都有一個ARP快取記憶體表,這樣避免每次發包時都需要傳送ARP請求來獲取硬體地址。預設老化時間是20分鐘。利用arp -a命令可以檢視顯示系統中快取記憶體的內容。

Windows下“arp -d”命令可以清除arp快取記憶體表。

有時候需要手動清除arp快取,曾經就是因為arp快取沒有做清理,導致迷惑了很久。遇到的問題:

1) 製作了一個寫路由器MAC地址的工具,每次寫完MAC地址,重啟路由器,會發現無法telnet登陸路由器。IP地址沒變,但是MAC地址更改了,而ARP快取表中IP地址對映的仍然是舊的MAC地址。

2) 類似的問題,有兩個路由器具有相同的IP地址。先連線一個路由器,登陸成功後,再去連線另一臺路由器,卻發現登陸不了。

ARP代理

如果ARP請求時從一個網路的主機發往另一個網路上的主機,那麼連線這兩個網路的路由器可以回答該請求,這個過程稱作委託ARP或者ARP代理。這樣可以欺騙發起ARP請求的傳送端,使它誤以為路由器就是目的主機。

RARP:逆地址解析協議

將區域網中某個主機的實體地址轉換為IP地址,比如區域網中有一臺主機只知道實體地址而不知道IP地址,那麼可以通過RARP協議發出徵求自身IP地址的廣播請求,然後由RARP伺服器負責回答。RARP協議廣泛應用於無盤工作站引導時獲取IP地址

RARP允許區域網的物理機器從網管伺服器ARP表或者快取上請求其IP地址。

幀格式

幀格式同ARP協議,幀型別欄位和操作型別不同,具體見ARP幀格式描述。

工作原理

1. 主機發送一個本地的RARP廣播,在此廣播包中,宣告自己的MAC地址並且請求任何收到此請求的RARP伺服器分配一個IP地址。

2. 本地網段上的RARP伺服器收到此請求後,檢查其RARP列表,查詢該MAC地址對應的IP地址。

3. 如果存在,RARP伺服器就給源主機發送一個響應資料包並將此IP地址提供給對方主機使用。

4. 如果不存在,RARP伺服器對此不做任何的響應。

5. 源主機收到從RARP伺服器的響應資訊,就利用得到的IP地址進行通訊;如果一直沒有收到RARP伺服器的響應資訊,表示初始化失敗。