1. 程式人生 > >《TCP/IP協議族》:ARP協議一

《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系列