天天看點

TCP/IP(3.3) —ARP和RARP

arp和rarp協定的作用

TCP/IP(3.3) —ARP和RARP

arp

  我們知道,網絡層使用的是ip位址,但在實際網絡的鍊路上傳送資料幀時,最終還是必須使用該網絡的硬體位址。但ip和下面的網絡的硬體位址以為格式不同而不存在簡單的映射關系。(ip是32位,而區域網路硬體位址是48位。)更換網絡擴充卡還可能改換硬體位址。

  位址解析協定arp就是解決這個問題的方法是在主機arp高速緩存中存放一個從ip位址到硬體位址的映射表,并且這個映射表經常動态更新(動态這個詞是因為整個過程是軟體自動完成的,一般應用程式和使用者不必關心)

  每一個主機都設有一個apr高速緩存(arp

cache)。裡面有本區域網路上各個主機和路由器的ip位址到硬體位址的映射表。

使用arp的四種情況

  1. 發送方式主機,要把ip資料報發送到本網絡上的另一個主機。這時arp找到目的主機的硬體位址。

  2. 發送方是主機,要把ip資料報發送到另一個網絡上的主機,這時arp找到本網絡上的一個路由器的硬體位址,剩下的工作由這個路由器完成。

  3. 發送方式路由器,要把ip資料報轉發到本網絡上的一個主機。這時arp找到目的主機的硬體位址

  4. 發送方式路由器,要把ip資料報轉發到另一個網絡上的一個主機。這時用arp找到本網絡上的一個路由器的硬體位址。剩下的工作由這個路由器來完成。

那麼主機是怎麼知道這些位址的呢?

arp的運作過程

  如果主機B剛入網,或者主機A剛啟動,高速緩存還是空的,這時a是沒有b的位址的

  在這種情況下,主機A就自動運作ARP,按照下面步驟找到B的位址:

1.arp程序在本區域網路上廣播發送一個arp請求分組,其中廣播内容如下圖(或者了解為如果你是這個ip位址的所有者,請回答你的硬體位址):

TCP/IP(3.3) —ARP和RARP

2.本區域網路上的所有主機運作的arp程序都收到此arp請求分組。

3.主機b在arp請求中看到自己的ip位址,就向主機a發送arp相應分組,應寫入自己的硬體位址。其餘所有的主機都不理睬這個a的arp請求分組。arp請求分組是廣播的,但是arp相應分組是普通的單點傳播

TCP/IP(3.3) —ARP和RARP

4.主機A收到B的相應分組後,就在其ARP高速緩存中寫入B的從IP到硬體位址的映射。

5.主機a在向主機b發送arp請求時,也把自己的ip到硬體位址的映射寫入了arp請求分組中。當b接收到時,就寫入到自己的arp高速緩存中。

  可見arp高速緩存非常有用。如果不使用arp高速緩存,任何一個主機隻要進行一次通信,就要在網絡上以廣播的形式發送arp請求分組,這樣就使得網絡上的通信量大大增加。

  arp把儲存在高速緩存中的每一個映射位址都設定生存時間(例如20分鐘)。凡超過生存時間的項目就從高速緩存中删除掉。這種生存時間是很重要的。設想如果a和b通信,如果b的網絡擴充卡突然壞掉了,a還按照原來的硬體位址發送,肯定就不能成功了、a在删掉後,又重新廣播arp請求分組,又找到了b

  可能我們會有疑問,既然在網絡鍊路上傳送的幀最終是按硬體位址找到目的主機的,那麼為什麼不直接使用硬體位址進行通信呢?

  因為全世界存在各式各樣的網絡,它們使用不同的硬體位址,要使得這些異構網絡能夠通信就必須進行非常複雜的硬體位址轉換工作。但是統一的ip位址把這個複雜的問題解決了。

arp的分組格式

  在以太網上解析ip位址時, arp請求和應答分組的格式如圖3所示(

arp可以用于其他類型的網絡,可以解析ip位址以外的位址。緊跟着幀類型字段的前四個字段指定了最後四個字段的類型和長度)。

  

TCP/IP(3.3) —ARP和RARP

  以太網報頭中的前兩個字段是以太網的源位址和目的位址。目的位址為全1的特殊位址是廣播位址。電纜上的所有以太網接口都要接收廣播的資料幀。

  兩個位元組長的以太網幀類型表示後面資料的類型。對于arp請求或應答來說,該字段的值為0x0806。

  形容詞hardware (硬體)和protocol

(協定)用來描述arp分組中的各個字段。例如,一個arp請求分組詢問協定位址(這裡是ip位址)對應的硬體位址(這裡是以太網位址)。

  硬體類型字段表示硬體位址的類型。它的值為1即表示以太網位址。協定類型字段表示要映射的協定位址類型。它的值為0x0800即表示ip位址。它的值與包含ip資料報的以太網資料幀中的類型字段的值相同,這是有意設計的。

  接下來的兩個1位元組的字段,硬體位址長度和協定位址長度分别指出硬體位址和協定位址的長度,以位元組為機關。對于以太網上ip位址的arp請求或應答來說,它們的值分别為6和4。

  op

操作字段指出四種操作類型,它們是arp請求(值為1)、arp應答(值為2)、rarp請求(值為3)和r

arp應答(值為4)。這個字段必需的,因為arp請求和arp應答的幀類型字段值是相同的。

  接下來的四個字段是發送端的硬體位址(在本例中是以太網位址)、發送端的協定位址(ip位址)、目的端的硬體位址和目的端的協定位址。注意,這裡有一些重複資訊:在以太網的資料幀報頭中和arp請求資料幀中都有發送端的硬體位址。

  對于一個arp請求來說,除目的端硬體位址外的所有其他的字段都有填充值。當系統收到一份目的端為本機的arp請求封包後,它就把硬體位址填進去,然後用兩個目的端位址分别替換兩個發送端位址,并把op操作字段置為2,最後把它發送回去。