《TCP/IP協議族》:ARP協議一

ARP:地址解析協議

對於以太網,數據鏈路層上是根據48bit的以太網地址來確定目的接口,設備驅動程序從不檢查IP數據報中的目的IP地址。ARP協議爲IP地址到對應的硬件地址之間提供動態映射。

工作過程

在以太網(ARP協議只適用於局域網)中,如果本地主機想要向某一個IP地址的主機(路由表中的下一跳路由器或者直連的主機,注意此處IP地址不一定是IP數據報中的目的IP)發包,但是並不知道其硬件地址,此時利用ARP協議提供的機制來獲取硬件地址,具體過程如下:

1) 本地主機在局域網中廣播ARP請求,ARP請求數據幀中包含目的主機的IP地址。意思是“如果你是這個IP地址的擁有者,請回答你的硬件地址”。

2) 目的主機的ARP層解析這份廣播報文,識別出是詢問其硬件地址。於是發送ARP應答包,裏面包含IP地址及其對應的硬件地址。

3) 本地主機收到ARP應答後,知道了目的地址的硬件地址,之後的數據報就可以傳送了。

點對點鏈路不使用ARP協議。(PPP)

1.學習ARP前要了解的內容

建立TCP連接與ARP的關係

應用接受用戶提交的數據,觸發TCP建立連接,TCP的第一個SYN報文通過connect函數到達IP層,IP層通過查詢路由表:

如果目的IP和自己在同一個網段:

當IP層的ARP高速緩存表中存在目的IP對應的MAC地址時,則調用網絡接口send函數(參數爲IP Packet和目的MAC))將數據提交給網絡接口,網絡接口完成Ethernet Header + IP + CRC的封裝,併發送出去;

當IP層的ARP高速緩存表中不存在目的IP對應的MAC地址時,則IP層將TCP的SYN緩存下來,發送ARP廣播請求目的IP的MAC,收到ARP應答之後,將應答之中的<IP地址,對應的MAC>對緩存在本地ARP高速緩存表中,然後完成TCP SYN的IP封裝,調用網絡接口send函數(參數爲IP Packet和目的MAC))將數據提交給網絡接口,網絡接口完成Ethernet Header + IP + CRC的封裝,併發送出去;。

如果目的IP地址和自己不在同一個網段,就需要將包發送給默認網關,這需要知道默認網關的MAC地址:

當IP層的ARP高速緩存表中存在默認網關對應的MAC地址時,則調用網絡接口send函數(參數爲IP Packet和默認網關的MAC)將數據提交給網絡接口,網絡接口完成Ethernet Header + IP + CRC

當IP層的ARP高速緩存表中不存在默認網關對應的MAC地址時,則IP層將TCP的SYN緩存下來,發送ARP廣播請求默認網關的MAC,收到ARP應答之後,將應答之中的<默認網關地址,對應的MAC>對緩存在本地ARP高速緩存表中,然後完成TCP SYN的IP封裝,調用網絡接口send函數(參數爲IP Packet和默認網關的MAC)將數據提交給網絡接口,網絡接口完成Ethernet Header + IP + CRC的封裝,併發送出去。

ARP的位置

OSI模型有七層,TCP在第4層傳輸層,IP在第3層網絡層,而ARP在第2層數據鏈路層。高層對低層是有強依賴的,所以TCP的建立前要進行ARP的請求和應答。

ARP高速緩存表在IP層使用。如果每次建立TCP連接都發送ARP請求,會降低效率,因此在主機、交換機、路由器上都會有ARP緩存表。建立TCP連接時先查詢ARP緩存表,如果有效,直接讀取ARP表項的內容進行第二層數據包的發送;只有表失效時才進行ARP請求和應答進行MAC地址的獲取,以建立TCP連接。

ARP的作用

  要了解ARP的作用,首先要分清兩個“地址”:

  (1)TCP/IP的32bit IP地址。僅知道主機的IP地址不能讓內核發送數據幀給主機。

  (2)網絡接口的硬件地址,它是一個48bit的值,用來標識不同的以太網或令牌環網絡接口。在硬件層次上,進行數據交換必須有正確的接口地址,內核必須知道目的端的硬件地址才能發送數據。

  簡言之,就是在以太網中,一臺主機要把數據幀發送到同一局域網上的另一臺主機時,設備驅動程序必須知道以太網地址才能發送數據。而我們只知道IP地址,這時就需要採用ARP協議將IP地址映射爲以太網地址。

  要注意一點,一般認爲ARP協議只使適用於局域網。

2.ARP分組格式

 ARP/RARP幀格式

  • 以太網目的地址:目的主機的硬件地址。目的地址全爲1的特殊地址是廣播地址。
  • 以太網源地址:源主機的硬件地址。
  • 幀類型:對於ARP協議,該字段爲0x0806。對於RARP協議,該字段爲0x8035。
  • 硬件類型:表示硬件地址的類型。值爲1時表示以太網地址。也就是說ARP協議不僅僅應用於以太網協議,還可以支持別的鏈路層協議。
  • 協議類型:表示要映射的協議地址類型。值爲0x0800時表示IP協議
  • 硬件地址長度:與硬件類型對應的硬件地址的長度,以字節爲單位。如果是以太網,則是6字節(MAC長度)。
  • 協議地址長度:與協議類型對應的協議地址長度,以字節爲單位。如果是IP協議,則是4字節(IP地址長度)。
  • 操作類型(op):四中操作類型。ARP請求(1),ARP應答(2),RARP請求(3),RARP應答(4)。
  • 發送端硬件地址:如果是以太網,則是源主機以太網地址,此處和以太網頭中的源地址對應。
  • 發送端協議地址:如果是IP協議,則表示源主機的IP地址。
  • 目的端硬件地址:如果是以太網,則是目的以太網地址,和以太網頭中的目的地址對應。
  • 目的端協議地址:如果是IP協議,則表示源主機要請求硬件地址的IP地址。
  • 對應ARP請求包來說,目的端的硬件地址字段無須填充,其他字段都需要填充。對於ARP回覆包來說,所有字段都需要填充。
  • APR請求包是廣播的,但是ARP應答幀是單播的。

    以太網數據報最小長度是60字節(14字節的以太網頭,不包含4字節的FCS),ARP數據包長度爲42字節(14字節的以太網頭和28字節的ARP數據),需要加入填充字符到以太網最小長度要求:60字節

下面是抓取的ARP數據包,可以對照上面的說明進行理解。

圖中紅框圈起來的是一對ARP請求和ARP應答。

下面兩張圖分別是ARP請求和相應的ARP應答的分組格式截圖。

ARP請求分組中,字段11目的MAC地址未知,用全0進行填充。

 

ARP應答分組中,將ARP請求中的源和目的地址進行交換,此外,變化的還有字段8 Opcode。其餘字段內容不會發生變化。

那麼我們是如何區分ARP請求和ARP應答分組的呢?

分組中的地址字段和其他相同的字段無法作爲區分依據,這時Opcode字段就發揮了作用,根據Opcode的值可以確定是請求還是應答,是ARP還是RARP。

3.ARP高速緩存

定義

ARP緩存是一個緩衝區,用來儲存IP地址和MAC地址,本質就是<IP地址,MAC地址>的對應表。表中一個條目記錄了網絡上一個主機的IP地址和其對應的MAC地址。每一個以太網或令牌環網絡適配器都有自己單獨的表。當地址解析協議被詢問一個已知IP地址節點的MAC地址時,先在ARP緩存中查看,若存在,就直接返回與之對應的MAC地址,若不存在,才發送ARP請求向局域網查詢。

ARP緩存表項的生存時間TTL

ARP緩存包含動態和靜態項目:

動態項目隨時間推移自動添加和刪除,每個動態ARP緩存項都有都設置了TTL(生存時間),TTL爲0時此項目就從表中刪除,Windows下TTL一般不超過10分鐘。

靜態 ARP 緩存條目是永久性的,可以使用 TCP/IP 工具手動添加和刪除。靜態 ARP 緩存條目用來禁止節點發送對常用的本地IPv4地址(例如路由器和服務器的 IPv4 地址)的ARP請求。

ARP高速緩存的使用

當主機發送一個ARP請求時,先查看ARP高速緩存表,如果存在對應條目,則直接返回MAC地址,否則向局域網發送ARP請求廣播。

ARP高速緩存的優缺點

優點:從ARP高速緩存的使用中可以看到,ARP高速緩存可以減小廣播量,進而減小網絡通信量,提高計算機之間的通信效率。

缺點:造成安全隱患(參考下面免費ARP的作用)。

4.免費ARP

定義

免費ARP指主機發送ARP查找自己的IP地址,通常發生在系統引導期間進行接口配置時。

與標準ARP的區別就是免費ARP分組的目的IP地址字段封裝的是自己的IP地址,即向所在網絡請求自己的MAC地址。

作用 

免費ARP的作用有:
1) 一個主機可以通過它來確定另一個主機是否設置了相同的 IP地址。

正常情況下發送免費ARP請求不會收到ARP應答,如果收到了一個ARP應答,則說明網絡中存在與本機相同的IP地址的主機,發生了地址衝突。

2)更新其他主機高速緩存中舊的硬件地址進行。

如果發送免費ARP的主機正好改變了硬件地址,如更換了接口卡。其他主機接收到這個ARP請求的時候,發現自己的ARP高速緩存表中存在對應的IP地址,但是MAC地址不匹配,那麼就需要利用接收的ARP請求來更新本地的ARP高速緩存表表項。

3)網關利用免費ARP防止ARP攻擊

有些網關設備在一定的時間間隔內向網絡主動發送免費ARP報文,讓網絡內的其他主機更新ARP表項中的網關MAC地址信息,以達到防止或緩解ARP攻擊的效果。

4)利用免費ARP進行ARP攻擊

ARP協議並不只在發送了ARP請求才接收ARP應答,計算機只要接收到ARP應答數據包,就會使用應答中的IP和MAC地址對本地的ARP緩存進行更新。

主機可以構造虛假的免費ARP應答,將ARP的源MAC地址設爲錯誤的MAC地址,並把這個虛假的免費ARP應答發送到網絡中,那麼所有接收到這個免費ARP應答的主機都會更新本地ARP表項中相應IP地址對應的MAC地址。更新成功後,這些主機的數據報文就會被轉發到錯誤的MAC地址,從而實現了ARP欺騙的攻擊。

5.代理ARP

定義

代理ARP就是通過使用一個主機(通常爲router),來作爲指定的設備使用自己的 MAC 地址來對另一設備的ARP請求作出應答。

爲什麼需要代理ARP?

先要了解,路由器的重要功能之一就是把局域網的廣播包限制在該網內,阻止其擴散,否則會造成網絡風暴。

ARP請求是個廣播包,它詢問的對象如果在同一個局域網內,就會收到應答。但是如果詢問的對象不在同一個局域網該如何處理?路由器就提供的代理ARP爲這個問題提供瞭解決方案。

工作過程

兩臺主機A和B處於同一網段但不同的廣播段時,主機A發送ARP請求主機B的MAC地址時,因爲路由器不轉發廣播包的原因,ARP請求只能到達路由器。如果路由器啓用了代理ARP功能,並知道主機B屬於它連接的網絡,那麼路由器就用自己接口的MAC地址代替主機B的MAC地址來對主機A進行ARP應答。主機A接收ARP應答,但並不知道代理ARP的存在。

代理ARP的優缺點

優點:代理ARP能在不影響路由表的情況下添加一個新的Router,使子網對該主機變得透明化。一般代理ARP應該使用在主機沒有配置默認網關或沒有任何路由策略的網絡上。

缺點:從工作工程可以看到,這其實是一種ARP欺騙。而且,通過兩個物理網絡之間的路由器的代理ARP功能其實互相隱藏了物理網絡,這導致無法對網絡拓撲進行網絡概括。此外,代理ARP增加了使用它的那段網絡的ARP流量,主機需要更大的ARP緩存空間,也不會爲不使用ARP進行地址解析的網絡工作。

6.RARP:逆地址解析協議

將局域網中某個主機的物理地址轉換爲IP地址,比如局域網中有一臺主機只知道物理地址而不知道IP地址,那麼可以通過RARP協議發出徵求自身IP地址的廣播請求,然後由RARP服務器負責回答。RARP協議廣泛應用於無盤工作站引導時獲取IP地址。

RARP允許局域網的物理機器從網管服務器ARP表或者緩存上請求其IP地址

幀格式

幀格式同ARP協議,幀類型字段和操作類型不同,具體見ARP幀格式描述。

工作原理

1. 主機發送一個本地的RARP廣播,在此廣播包中,聲明自己的MAC地址並且請求任何收到此請求的RARP服務器分配一個IP地址。

2. 本地網段上的RARP服務器收到此請求後,檢查其RARP列表,查找該MAC地址對應的IP地址。

3. 如果存在,RARP服務器就給源主機發送一個響應數據包並將此IP地址提供給對方主機使用。

4. 如果不存在,RARP服務器對此不做任何的響應。

5. 源主機收到從RARP服務器的響應信息,就利用得到的IP地址進行通訊;如果一直沒有收到RARP服務器的響應信息,表示初始化失敗。

這裏推薦幾個博客寫的比較完善:

https://www.cnblogs.com/csguo/p/7542944.html  // 圖解ARP系列

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章