TCP/IP 協定與 Internet 網路:第五章 網際層協定  上一頁           下一頁

 

翻轉工作室:粘添壽

 

5-3 ARP RARP 協定

Internet 網路下,每一部主機都有一個獨一無二的 IP 位址。理論上,欲傳送封包給任何一部主機只要知道它的 IP 位址,便可依照此 IP 位址傳送給該主機。但事實上,IP 位址只是一個網路位址,它是讓較高層的網路程式設計者(如應用層)在編寫程式時不用去考慮網路實際連線的問題(通訊協定的基本功能),但 IP 封包在網路上傳遞時,還是必須透過實體網路位址,才能送達目的位址。例如,IP 網路架設在 Ethernet 上,則網路上所有工作站依照 Ethernet 位址傳送資料,接收端收到訊框後也依照 Ethernet 位址判斷是否傳送給自己,由此可見,在實體網路上,並沒有使用到 IP 位址。因此,某一部主機欲依照 IP 位址傳送給另一部主機,首先必須知道該主機的實體網路位址(一般稱為 MAC 位址),再依 MAC 位址傳送,亦即,必須擁有該主機的 IP/MAC 對照表,同樣的,任何一部主機也必須知道自己的 IP/MAC 對照關係。但問題是當某部主機欲依照 IP 位址發送資料給另一主機時,它怎麼知道對方的 MAC 位址(如 Ethernet 位址)?一般主機當然知道自己的 MAC 位址,但如何得知自己的 IP 位址呢?

Internet 通訊協定裡有兩個協定來解決上述的問題,一為『位址解析協定』(Address Resolution Protocol, ARP;另一為『反向位址解析協定』(Reverse Address Resolution Protocol, RARPARP 是用來查問欲傳送之目的主機的MAC位址,也就是說,由已知的 IP 位址查問其相對應的網路實體位址;而 RARP 是由已知的網路實體位址查詢其相對應的 IP 位址。

5-3-1 ARP 協定

位址解析協定(ARP)是被用來以 IP 位址查詢其相對應的網路實體位址(MAC 位址),其運作方式如圖 5-20 所示。首先主機 A163.15.2.1)的網際層(Internet Layer)發送出 ARP Request(查問 163.15.2.4)訊息給網路存取層(Network Access Layer),網路存取層之 MAC 層(Ethernet 層)再將 ARP Request 訊息包裝在 Ethernet 訊框內,並廣播在網路上。網路上(區域網路內)所有主機接收到廣播訊框再拆解訊框。主機 C163.15.2.4)的網際層收到 ARP Request 後,並由其中瞭解是詢問自己,便回應 ARP Reply(包含 Ethernet 位址) 給網路存取層,網路存取層再發送訊框給主機 A163.15.2.1)。當然,其他主機也會收到 ARP Request 訊號,但皆判斷不是詢問自己而不予理會。

5-20 ARP 運作方式

不論 ARP Request Reply,或 RARP Request Reply 都使用 ARP 封包格式。ARP 封包格式如圖 5-21 所示,各欄位功能如下:

Hardware Type表示發送主機使用之網路實體介面種類,如 1 表示 Ethernet 網路介面。

Protocol Type表示所使用的通訊協定,如 0x0800 表示 IP 協定,其它通訊協定模式如表 5-1 所示。

Operation Type表示此封包的工作模式:

1 ARP 要求(ARP Request

2 ARP 回應(ARP Reply

3 RARP 要求(RARP Request

4 RARP 回應(RARP Reply

HLEN網路介面卡硬體位址長度。若 Ethernet 位址的長度為 6

PLEN網路協定位址長度。因為 IP 位址長 4 個位元組,此值為 4

Sender HW發送端的硬體位址。如果是 Ethernet 網路的話,此為 6 個位元組長的地址,如 0x8823AA112233

Target HW目的地的硬體位址。

Sender IP發送端的 IP 位址,如 163.15.2.1

Target IP目的地主機的 IP 位址,如163.15.2.4

5-21 ARP 封包格式

     5-22 RAP 封包的擷取結果,此為主機要求連線時(執行 telnet 163.15.2.62),並不知道對方的 Ethernet 位址,所廣播的 ARP Request 訊息的封包格式。由圖中可觀察 Ethernet 訊框標頭的 Type 欄位為 0x0806,表示為 ARP 訊框包裝。

5-22 擷取 ARP-Request 封包

        並非主機每次欲發送封包之前,都要詢問對方的網路硬體位址,一般主機上的快取記憶體(Cache memory)上,都有維護一只ARP 快取表』(ARP cache,由 ARP 協定建立)。當主機電腦欲依照 IP 位址發送封包時,首先到快取記憶體上的 ARP 索引表查詢是否有相對應之硬體位址,如沒有再發送 ARP Request 到網路上詢問。詢問後將相關的 IP 和硬體位址登錄在索引表上,下次可以再使用。相對應的,網路上任何一部電腦接收到 ARP Request 封包時,不管該封包是否詢問自己,在 ARP 封包內都有紀錄傳送者的 IP 位址和硬體位址(MAC),便將其 IP 位址和硬體位址紀錄在本身的索引表內。又在 Internet 網路上的任何主機啟動時,都會公佈(announceARP 訊息告訴網路上所有工作站自己的 IP 和硬體位址。快取記憶體上的索引表必須隨時更新,否則所紀錄的資料也許會失去時效性(也許主機更換 IP 位址),這必須由系統維護人員去設定自動更替時間(通常為 20 分鐘)。主機電腦(或路由器)可以利用 arp 命令來查詢 ARP 快取表的內容,查詢結果如下:

[root@linux-1 /sbin]# arp

Address     HWtype    HWaddress      Flags Mask       Iface

163.15.2.30   ether   00:00:E2:5B:4A:65    C              eth0

192.168.0.1   ether   00:C0:02:25:46:18     C             eth1

163.15.2.34   ether   00:00:E2:2E:A3:76    C              eth0

一般在跨接網路上,網路之間所連接的路由器都具有『代理 ARP』(Proxy ARP的功能,讓路由器代理回應其它網路上詢問他所管轄之工作站的 MAC 位址。但這會欺騙 ARP 發送端,以為路由器就是目的主機,而事實上目的主機位於路由器的另一端。路由器扮演了目的主機的代理身份,回應 ARP Response 給詢問端。如圖 5-23 中,工作站 A 欲詢問工作站 B MAC 位址,於是廣播 ARP Request (163.15.3.50) 到網路上,Router_A 收到該訊息,便回應 ARP Response 給工作站 A,當然,Router_A 必須事先知道工作站 B MAC 位址。如果 Router_A 不知道工作站 B MAC 位址,則它必須將該詢問訊號收取,再另外發送 ARP Request (163.15.3.50) 到另一網路上詢問,工作站 B 回應訊號給 Router_ARouter_A 取得它的 MAC 位址後,再回應給工作站 A(如圖 5-23 中的訊號傳遞順序)。

5-23 代理 ARP 之功能

5-3-2 RARP 協定

一般主機電腦上的 IP 位址設定有靜態設定和動態設定兩種方法。靜態設定是於主機電腦上直接用人工設定 IP 位址,設定後如沒有再用人工修改,則 IP 位址永遠不變;動態設定並未設定 IP 位址,每當主機啟動時,再由網路上某部伺服器給予 IP 位址,因此,每次啟動時得到的 IP 位址不一定相同。如果主機電腦採用動態指定 IP 位址模式,啟動就必須利用『反向位址解析協定』(Reverse Address Resolution Protocol, RARP,向網路上的伺服器(如 DHCP Server)要求給予一個 IP 位址。

RARP 的動作是,主機電腦用自己硬體位址(MAC 位址)向伺服器詢問自己的 IP 位址,如圖 5-24 所示。圖中假設各主機皆以動態設定 IP 位址,主機 A 『動態主機組態伺服器』(Dynamic Host Configuration Protocol, DHCP,負責分配 IP 位址給網路上主機。電腦主機啟動時便要求 DHCP 伺服器分配一個 IP 位址,電腦主機關機時便釋放該 IP 位址,下次開機時再要求重新分配。例如主機 C 啟動時立即在網路廣播(或傳送給 DHCP 伺服器) RARP Request(要求 IP 位址),主機 A 收到 RARP Request 並驗證其 Ethernet 位址是否可以給予IP 位址,再回應 RARP Reply 給主機 C,其中並攜帶著對方的 IP MAC 位址。RARP 封包格式和 ARP 一樣,不再另述。

5-24 RARP 運作方式

 

 

<GOTOP>