1. 程式人生 > >【計算機網絡】詳解網絡層(二)ARP和RARP

【計算機網絡】詳解網絡層(二)ARP和RARP

博文 拆分 detail 動態 再次 tcp 將在 ont 關於

ARP

ARP(Address Resolution Protocol,地址解析協議)是將IP地址解析為以太網MAC地址(物理地址)的協議。在局域網中,當主機或其他網絡設備有數據要發送給另一個主機或設備時,它必須知道對方的網絡層地址(即IP地址)。但是僅僅有IP地址是不夠的,因為IP數據報文必須封裝成幀才能通過物理網絡發送。因此發送方還需要有接收方的物理地址,也就需要一個從IP地址到物理地址的映射,ARP就是事先這麽功能的協議。

1、ARP報文格式

ARP是一個獨立的三層協議,所以ARP報文在此數據鏈路層傳輸時不需要經過IP協議的封裝,而是直接生成自己的報文,其中包括ARP報頭,到數據鏈路層後再由對應的數據鏈路層協議進行封裝。ARP報文分為ARP請求和ARP應答報文兩種,二者格式可以統一用下圖表示:

技術分享圖片

硬件類型,表示ARP報文可以在哪種類型的網絡上傳輸

上層協議類型,表示硬件地址要映射的協議地址類型

操作類型,指定本次ARP報文類型(請求/應答)

ARP報文並不是直接在網絡層上發送的,它還是需要向下傳輸到數據鏈路層,所有當ARP報文傳輸到數據鏈路層後,需要再次進行封裝。在以太網中,ARP傳輸到數據鏈路層後會封裝成ARP幀。其格式如下圖所示

技術分享圖片

可以看出,其幀封裝都是一樣的,網絡層的直接作為數據鏈路層幀的數據部分。

目的MAC地址,如果是ARP請求幀,因為它是一個廣播幀(後面會介紹),所以要填上廣播MAC地址——FF-FF-FF-FF,其目標為網絡上的所有主機

源MAC地址,發送ARP幀的節點MAC地址

幀類型,標識幀封裝的上層協議

2、ARP映射表

無論是主機,還是交換機都會有一個用來緩存同一網段設備IP地址和MAC地址的ARP映射表,用於數據幀的轉發。設備通過ARP解析到目的MAC地址後,將會在自己的ARP映射表中增加IP地址到MAC地址的映射表項,以用於後續到同一目的地數據幀的轉發。

ARP表項分為動態ARP表項和靜態ARP表型。

3*、ARP地址解析原理

技術分享圖片

  1. 主機A首先查看自己的ARP表(一個IP地址與MAC地址的映射表),確定其中是否包含有主機B的IP地址和對應的MAC地址。如果找到了對應的MAC地址,則主機A直接利用ARP表中的MAC地址對IP數據報進行幀封裝,並將數據報發送給主機B。類似於計算機組成中高速緩存的命中。
  2. 如果主機A在ARP表中找不到對應的MAC地址,則先緩存該數據報文,然後以廣播方式(參見數據鏈路層物理地址尋址部分,目的MAC地址為廣播MAC地址——FFFFFF,任一同網段的節點均可收到,該網絡上的所有主機)發送一個ARP請求報文,ARP請求報文中的發送端(源)IP地址和發送端MAC地址分別為主機A的IP地址和MAC地址,目的IP地址和目的MAC地址為主機B的IP地址和全0的MAC地址。ARP請求報文是以廣播的形式發送,所以該網段上的所有主機都會接收到這個請求包,但只有其IP地址與目的IP地址一致的主機B會對該請求進行處理。
  3. 主機B將ARP請求報文中的發送端(主機A)的IP地址和MAC地址存入自己的ARP表中,然後以單播方式(一對一,點對點形式)向主機A發送一個ARP響應報文,應答報文中就包含了自己的MAC地址,即原來請求報文中要請求的MAC地址。
  4. 主機A在收到來自主機B的ARP響應報文後,將主機B的MAC地址加入到自己的ARP表中以用於後續報文的轉發,同時將原來緩存的IP數據報再次修改(在目的MAC地址子彈填上已獲得的主機B的的MAC地址)後發送出去。
上面就是同一網段中兩主機的ARP地址解析的全過程。當兩主機不在同一個網段中,其ARP地址解析過程如下:
  1. 如果主機A不知道網關(一個網絡連接另一個網絡的關口)的MAC地址(即主機A的ARP表沒有命中),則主機A現在本網段中發出一個ARP請求廣播報文,ARP請求報文中的目的IP地址為網關IP地址,代表其目的就是想獲得網關的MAC地址。如果主機A已知網關MAC地址,則略過此步。
  2. 如果網關的ARP表(網關也有ARP映射表項)中已有主機B對應的MAC地址,則網關直接將在來自主機A的報文中的目的MAC地址字段填上主機B的MAC地址後轉發給主機B。
  3. 如果網關ARP中沒有,那麽網關會再次向主機B所在網段發送ARP廣播請求報文,此時目的IP地址為主機B的IP地址,其後續處理同前。
可以看出,不在一個網段的兩個主機的ARP地址解析過程實際上是拆分為兩個網段中的ARP地址解析過程,只不過介入一個網關充當主機。

這裏說一下網關,網關實質上是一個網絡通向其他網絡的IP地址,是一個邏輯概念,定義網絡的邊界。路由器是物理設備,除具備網關功能外,還具備路由功能(以後再說)。

比如說只有兩個網絡,網絡A(192.168.1.1~192.168.1.254)和網絡B(192.168.2.1`192.168.2.254),子網掩碼為255.255.255.0。可以看出這兩個網絡屬於不同的兩個網絡,不能直接進行通信。即使連接在同一臺交換機上,TCP/IP協議也會根據子網掩碼判定兩個網絡中的主機處於不同網絡裏,不能進行網絡間通信。(交換機是在物理層上工作,按MAC地址訪問,所以也稱二層交換機,兩個子網間不能互訪,除非是具備路由功能和VLAN功能的三層交換機)。這種情況下則需要通過網關進行通信。因為只有兩個網絡,也就一條連接路徑,所以只需要網關就可以。

但如果是多個網絡結構,形成一個網狀,即兩個網絡之間可以有多條訪問路徑,這樣則需要網關和路由器兩種設備,不過現在路由器已經繼承了網關的功能,所以只需要一個路由器即可,利用路由器的路由功能選擇最佳路徑進行通信。

RARP

RARP分組的格式與ARP分組基本一致。RARP為逆地址解析協議,作用與ARP相反,用於將MAC地址轉換為IP地址。

具有本地磁盤的系統引導時,一般是從磁盤上的配置文件中讀取IP地址,但是無盤機,如X中斷或無盤工作站,則需要采用其他方法來獲得IP地址。

總得說來就是,網絡上的每個系統都具有唯一的硬件地址,它是由網絡接口生產廠家配置的。無盤系統的RARP實現過程是從接口卡上讀取唯一的硬件地址,然後發送一份RARP請求,請求某個主機響應該無盤系統的IP地址。

RARP的工作過程如下:

  1. 網絡上每臺設備都會有一個獨一無二的硬件地址,一般是由設備廠商分配的MAC地址。發送主機從網卡上讀取MAC地址,然後在網絡上發送一個RARP請求的廣播數據包,請求任何收到此請求的RARP服務器分配一個IP地址;
  2. RARP服務器收到此請求後,檢查其RARP表項,查找該MAC地址對應的IP地址;
  3. 如果存在,RARP服務器就給發送主機回復一個響應數據包,並將此IP地址提供給對方主機使用;
  4. 如果不存在,RARP服務器對此不做任何的響應;
  5. 發送主機收到從RARP服務器的響應信息,就利用得到的IP地址進行通訊,如果一直沒有收到RARP服務器的響應消息,表示初始化失敗。
需要清楚,與ARP不同的是RARP是主機向RARP服務器獲取自己的IP地址。 RARP從概念上看起來比較簡單,但實際上比較復雜,服務器一般要為多個主機提供硬件地址到IP地址的映射,該映射包含在一個磁盤文件中,而內核一般不讀取和分析磁盤文件,所以RARP服務器的功能就需由用戶進程來提供。更為復雜的是,RARP請求是作為一個特殊類型的以太網數據幀來傳送的,其請求是在硬件層上進行廣播的,不經過路由器進行轉發。 RARP協議是許多無盤系統在引導時用來獲取IP地址的,一個RARP請求在網絡上進行廣播,它在分組中表明發送端的MAC地址,以請求相應IP地址的響應。另外RARP服務器的實現與系統相關。 對應於ARP,RARP請求是以廣播方式發送,而ARP,RARP應答則一般是單播傳送的。 關於ARP地址解析過程的源碼剖析參見博文【Linux 內核網絡協議棧源碼剖析】ARP地址解析協議 參考資料: 《深入理解計算機網絡》、《TCP/IP 一》。

【計算機網絡】詳解網絡層(二)ARP和RARP