簡單的說,ARP協定就是将IP位址轉換為MAC實體位址;而RARP,就是ARP的逆向,也就是将MAC實體位址轉換為IP位址。看起來這兩個協定是完全對稱的,但發明這兩個協定的初衷基本上沒有什麼關系。ARP協定是為了在連結層中傳輸的datagram隻能識别MAC位址,是以隻能将IP位址轉換為MAC實體位址再進行傳輸和定向;RARP協定是為了擷取無磁盤作業系統的IP位址而設計的。具有本地磁盤的系統通常是從磁盤中的配置檔案中讀取IP位址的,但是無盤系統無法這樣操作,是以就需要将MAC位址轉換成IP位址了。
再介紹一下無盤系統。比如有些網吧的機器本身沒有硬碟,而是通過區域網路連接配接到伺服器。從這些機器上看到的磁盤實際上是共享的伺服器的磁盤。
(一)ARP介紹
ARP協定将IP位址轉化為MAC實體位址。網絡體系結構自上而下可以大緻分成四層:應用層,傳輸層,網絡層,連結層。資料傳輸的過程也是從上至下,最後在連結層之間進行資料交換。當資料包從網絡層将要進傳入連結接層時,這個資料包隻有目的地的IP位址,這時連結層就不清楚這個IP位址是什麼了,就好像接口不統一的手機和充電器無法連接配接一樣。這時,ARP server就派上用場了。ARP server先将目的地的IP位址轉換成實體位址,發出一個ARP request,這個request是個沒有指定目的地的廣播,當網絡中有比對的實體位址時,就将這個實體位址傳回,即ARP reply,但ARP reply是有明确的目标位址的,是單點傳播。這時,資料包就有方向了,就可以繼續向目的地進發了。
(二)ARP Cache
緩存的思想無處不在。IP位址對應MAC實體位址,ARP Cahe中存儲的就是這些mappings。有緩存自然就會有timeout,當過了某個時間間隔後,緩存就會被清除,否則緩存無限制增長是件非常可怕的事。如果需要,可以用arp指令的-s選項來添加一個永久的緩存條目。
RARP是将MAC實體位址轉換成IP位址。RARP也有request與reply,并且RARP request也是廣播,沒有目标位址;RARP reply也是有目标位址,也是單點傳播。這兩點與ARP都相同。看起來雖然僅僅是ARP協定的逆向操作,但是RARP server設計的複雜性是遠遠超過ARP server的。首先,ARP server是存在于kernel中,而RARP server僅僅是一個使用者程序,RARP就有些"先天不足"。其次,RARP是尋找與實體位址對應的IP位址,這就表明了RARP request packet包中沒有IP位址,自然也就無法通過路由器進行轉發了。因為路由器是工作在網絡層,網絡層的協定是IP協定,ARP request能夠通過路由器進行轉發,是因為在ARP request packet中有IP位址的字段,而RARP request packet沒有,是以路由器對RARP也就沒有幫助了。
RARP還有一個機制,就是在每個網絡中都有多個RARP server。我猜想這可能是為了增大可靠性,是用的主從伺服器的設計理念。源位址一般隻接受第一個RARP reply。有多個伺服器,自然也就可能出現沖突。是以RARP server是這樣設計的:一般有一個主伺服器是接收到request後立刻發送RARP reply,沒有發送延遲;而其他的伺服器即使接收到了request,也會在一個随機的發送延遲後才能發送reply,而且一般是在短時間内收到重複的第二個request才可以發送reply。因為如果這些次要的伺服器都收到了第二次相同的request,那麼這種情況一般是主伺服器挂了。
(一)相同點
對于ARP與RARP,request是廣播,而reply是單點傳播。
(二)不同點
1.協定的目的完全不同。在總述中已經說明。
2.發送ARP packet的是路由器,而RARP不是。
3.ARP server在kernel中,而RARP是一個用于程序。
本文轉自NeilHappy 51CTO部落格,原文連結:http://blog.51cto.com/neilhappy/1123140,如需轉載請自行聯系原作者