2011年12月9日 星期五

ARP/RARP協定

ARP/RARP協定
1.是IPv4中網路層必不可少的協議,不過在IPv6中已不再適用,並被icmp v6所替代
2.在乙太網協議中規定,同一區域網中的一台主機要和另一台主機進行直接通信,必須要知道目標主機的MAC地址。
3.而在 TCP/IP 協議棧中,網路層和傳輸層只關心目標主機的IP位址。
這就導致在乙太網中使用IP協議時,數據鏈路層的乙太網協議接到上層IP協議提供的數據中,只包含目的主機的IP位址。於是需要一種方法,根據目的主機的IP位址,獲得其MAC地址。這就是ARP協議要做的事情。所謂地址解析 (address resolution)就是主機在發送幀前將目標IP位址轉換成目標MAC地址的過程。
4.另外,當發送主機和目的主機不在同一個區域網中時,即便知道目的主機的MAC地址,兩者也不能直接通信,必須經過路由轉發才可以。所以此時,發送主機通過 ARP協議獲得的將不是目的主機的真實MAC地址,而是一台可以通往區域網外的路由器的MAC地址。於是此後發送主機發往目的主機的所有幀,都將發往該路 由器,通過它向外發送。這種情況稱為ARP代理(ARP Proxy)。

Proxy ARP
是讓 router 可以針對不同網段間的 ARP request,回傳正確的 ARP reply。基本上,傳送端目的僅是要取得接收端的 hardware address,與其讓 router 將 ARP request 封包 forward 到另外一個網段作廣播,不如就自己回應,網路使用的效率上反而好些(前提是 router 必須要知道接收端的 hardware address 以及 IP address)。

ARP協定(RFC 826) 
是在說當已知對方的IP address(32 bits)位址時,如何知道其實際的48 bit 的硬體位址(mac)。

以主機A(192.168.38.10)向主機C(192.168.38.11)發送數據為例。
當發送數據時,主機A會在自己的ARP緩存表中尋找是否有目標IP位址。
如果找到了,也就知道了目標MAC地址為(00-BB-00-62-C2-02), 直接把目標MAC地址寫入幀裡面發送就可以了;
如果在ARP緩存表中沒有找到相對應的IP位址,主機A就會在網路上發送一個廣播(ARP request),目標MAC地址是「FF.FF.FF.FF.FF.FF」,這表示向同一網段內的所有主機發出這樣的詢問:「192.168.38.11的MAC地址是什麼?」網路上其他主機並不響應ARP詢問,只有主機C接收到這個幀時,才向主機A做出這樣的回應(ARP response):「192.168.38.11的MAC地址是(00-BB-00-62-C2-02)」。 這樣,主機A就知道了主機B的MAC地址,它就可以向主機B發送信息了。
ARP Cache
同時它還更新了自己的ARP緩存表(ARP Cache),下次再向主機B發送信息時,直接從ARP緩存表裡查找就可以了。ARP緩存表採用了老化機制,在一段時間內如果表中的某一行沒有使用,就會被刪除,這樣可以大大減少ARP緩存表的長度,加快查詢速度。

ARP 的封包格式在 frame type 欄位中,儲存的值為 0x0806

RARP(Reverse Address Resolution Protocol)RFC902協定
主要是想經由詢問網路上其它主機而得到自己的IP位址
網路上有A、B 、C 、D四台主機,可是A不知道它自己的IP位址,於是它就廣播一個RARP request封包到網路上,假設C 、D知道A的IP位址,它們就可以發送一個RARP reply封包,將A的IP位址寫入RARP封包內,A就可以知道自己的IP位址了。

RARP 的封包格式,與 ARP 是相同的,僅是在 frame type 欄位中,儲存的值為 0x8035

沒有留言:

張貼留言