ARP(地址解析協議)和RARP(逆地址解析協議)

Dororo.Lai發表於2018-06-20

ARP為IP地址到對應的硬體地址之間提供動態對映。

首先來看一個例子

我們敲入下面這個形式的命令:

% ftp bsdi

都會進行以下這些步驟。這些步驟的序號如圖4-2所示。

  1. 應用程式FTP客戶端呼叫函式gethostbyname(3)把主機名(bsdi)轉換成32 bit的IP地址。這個函式在DNS(域名系統)中稱作解析器,我們將在第14章對它進行介紹。這個轉換過程或者使用DNS,或者在較小網路中使用一個靜態的主機檔案(/etc/hosts)。
  2. FTP客戶端請求TCP用得到的IP地址建立連線。
  3. TCP傳送一個連線請求分段到遠端的主機,即用上述IP地址傳送一份IP資料包(在第18章我們將討論完成這個過程的細節)。
  4. 如果目的主機在本地網路上(如乙太網、令牌環網或點對點連結的另一端),那麼IP資料包可以直接送到目的主機上。如果目的主機在一個遠端網路上,那麼就通過IP選路函式來確定位於本地網路上的下一站路由器地址,並讓它轉發IP資料包。在這兩種情況下,IP資料包都是被送到位於本地網路上的一臺主機或路由器。
  5. 假定是一個乙太網,那麼傳送端主機必須把32 bit的IP地址變換成48 bit的乙太網地址。從邏輯Internet地址到對應的物理硬體地址需要進行翻譯。這就是ARP的功能。ARP本來是用於廣播網路的,有許多主機或路由器連在同一個網路上。
  6. ARP傳送一份稱作ARP請求的乙太網資料幀給乙太網上的每個主機。這個過程稱作廣播,如圖4-2中的虛線所示。ARP請求資料幀中包含目的主機的IP地址(主機名為bsdi),其意思是“如果你是這個IP地址的擁有者,請回答你的硬體地址。”
  7. 目的主機的ARP層收到這份廣播報文後,識別出這是傳送端在尋問它的IP地址,於是傳送一個ARP應答。這個ARP應答包含IP地址及對應的硬體地址。
  8. 收到ARP應答後,使ARP進行請求—應答交換的IP資料包現在就可以傳送了。
  9. 傳送IP資料包到目的主機。

在ARP背後有一個基本概念,那就是網路介面有一個硬體地址(一個48 bit的值,標識不同的乙太網或令牌環網路介面)。在硬體層次上進行的資料幀交換必須有正確的介面地址。但是,TCP/IP有自己的地址:32 bit的IP地址。知道主機的IP地址並不能讓核心傳送一幀資料給主機。核心(如乙太網驅動程式)必須知道目的端的硬體地址才能傳送資料。ARP的功能是在32 bit的IP地址和採用不同網路技術的硬體地址之間提供動態對映。


ARP的資料包分組格式

在乙太網上解析IP地址時,ARP請求和應答分組的格式如圖所示(ARP可以用於其他型別的網路,可以解析IP地址以外的地址。緊跟著幀型別欄位的前四個欄位指定了最後四個欄位的型別和長度)



1)乙太網報頭中的前兩個欄位是乙太網的源地址和目的地址。目的地址為全1的特殊地址是廣播地址。電纜上的所有乙太網介面都要接收廣播的資料幀。

2)兩個位元組長的乙太網幀型別表示後面資料的型別。對於ARP請求或應答來說,該欄位的值為0x0806。

3)hardware(硬體)和protocol(協議)型別用來描述ARP分組中的各個欄位。例如,一個ARP請求分組詢問協議地址(這裡是IP地址)對應的硬體地址(這裡是乙太網地址)。

硬體型別欄位表示硬體地址的型別。它的值為1即表示乙太網地址。協議型別欄位表示要對映的協議地址型別。它的值為0x0800即表示IP地址。它的值與包含IP資料包的乙太網資料幀中的型別欄位的值相同,這是有意設計的。

4)接下來的兩個1位元組的欄位,硬體地址長度和協議地址長度分別指出硬體地址和協議地址的長度,以位元組為單位。對於乙太網上IP地址的ARP請求或應答來說,它們的值分別為6和4。

5)操作欄位指出四種操作型別,它們是ARP請求(值為1)、ARP應答(值為2)、RARP請求(值為3)和RARP應答(值為4)(我們在第5章討論RARP)。這個欄位必需的,因為ARP請求和ARP應答的幀型別欄位值是相同的。

6)接下來的四個欄位是傳送端的硬體地址(在本例中是乙太網地址)、傳送端的協議地址(IP地址)、目的端的硬體地址和目的端的協議地址。注意,這裡有一些重複資訊:在乙太網的資料幀報頭中和ARP請求資料幀中都有傳送端的硬體地址。


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


 ARP代理

如果ARP請求是從一個網路的主機發往另一個網路上的主機,那麼連線這兩個網路的路由器就可以回答該請求,這個過程稱作委託ARP或ARP代理(Proxy ARP)。這樣可以欺騙發起ARP請求的傳送端,使它誤以為路由器就是目的主機,而事實上目的主機是在路由器的“另一邊”。路由器的功能相當於目的主機的代理,把分組從其他主機轉發給它。即路由器代理ARP

RARP

具有本地磁碟的系統引導時,一般是從磁碟上的配置檔案中讀取IP地址。但是無盤機,如X終端或無盤工作站,則需要RARP方法來獲得IP地址。

RARP分組的格式與ARP分組基本一致(見圖4-3)。它們之間主要的差別是RARP請求或應答的幀型別程式碼為0x8035,而且RARP請求的操作程式碼為3,應答操作程式碼為4。

對應於ARP,RARP請求以廣播方式傳送,而RARP應答一般是單播(unicast)傳送的。

RARP伺服器的設計

雖然RARP在概念上與ARP相似,但是一個RARP伺服器的設計與系統相關而且比較複雜。相反,提供一個ARP伺服器很簡單,通常是TCP/IP在核心中實現的一部分。由於核心知道IP地址和硬體地址,因此當它收到一個詢問IP地址的ARP請求時,只需用相應的硬體地址來提供應答就可以了。

作為使用者程式的RARP伺服器

RARP伺服器的複雜性在於,伺服器一般要為多個主機(網路上所有的無盤系統)提供硬體地址到IP地址的對映。該對映包含在一個磁碟檔案中(在Unix系統中一般位於/etc/ethers目錄中)。由於核心一般不讀取和分析磁碟檔案,因此RARP伺服器的功能就由使用者程式來提供,而不是作為核心的TCP/IP實現的一部分。

更為複雜的是,RARP請求是作為一個特殊型別的乙太網資料幀來傳送的(幀型別欄位值為0x8035,如圖2-1所示)。這說明RARP伺服器必須能夠傳送和接收這種型別的乙太網資料幀。在附錄A中,我們描述了BSD分組過濾器、Sun的網路介面栓以及SVR4資料鏈路提供者介面都可用來接收這些資料幀。由於傳送和接收這些資料幀與系統有關,因此RARP伺服器的實現是與系統捆綁在一起的。

每個網路有多個RARP伺服器

RARP伺服器實現的一個複雜因素是RARP請求是在硬體層上進行廣播的。這意味著它們不經過路由器進行轉發。為了讓無盤系統在RARP伺服器關機的狀態下也能引導,通常在一個網路上(例如一根電纜)要提供多個RARP伺服器。

當伺服器的數目增加時(以提供冗餘備份),網路流量也隨之增加,因為每個伺服器對每個RARP請求都要傳送RARP應答。傳送RARP請求的無盤系統一般採用最先收到的RARP應答(對於ARP,我們從來沒有遇到這種情況,因為只有一臺主機傳送ARP應答)。另外,還有一種可能發生的情況是每個RARP伺服器同時應答,這樣會增加乙太網發生衝突的概率。



該文章大部分段落取材於《TCP/IP詳解 卷1:協議》

相關文章