TCP/IP之ARP詳解

1. ARP概述

     地址解析協議(ARP-Address Resolution Protocol )是一種網絡協議,用於從IP地址中查找主機的硬件(MAC)地址。在以太網局域網上使用ARP是因爲希望相互通信的主機需要知道它們各自的MAC地址。這是一個請求-應答協議;ARP請求消息用於請求MAC地址,而ARP應答消息用於發送請求的MAC地址。

     以太網 (Ethernet) 網絡中的主機只有知道主機的以太網地址(MAC地址),才能與該主機通信。 像IP這樣的高級協議使用了一種不同於像MAC地址這樣的低級硬件尋址方案。 ARP用於從主機的IP地址獲取主機的以太網地址。 ARP被以太網網絡中的所有主機廣泛使用。以太網中數據鏈路驅動程序從不去檢查IP數據包中的目的IP地址。
在這裏插入圖片描述
     ARP提供了IP地址到對應MAC地址之間的動態映射,這個過程用戶是不感知的。
     

2. ARP首部結構

     ARP(地址解析協議)的首部結構圖如下所示。
在這裏插入圖片描述

     Hardware Type: ARP消息中的“硬件類型”字段指定硬件的類型,用於本地網絡傳輸地址解析協議(ARP)信息。以太網是常見的硬件類型,它的值爲1。這個字段的大小是2字節。更多關於“硬件類型”的功能請參考 Address Resolution Protocol (ARP) Parameters

     Protocol Type: 每個協議都被分配一個用於該字段的數字。IPv4是0x0800。更多關於“協議類型(Protocol Type)”的功能請參考 Address Resolution Protocol (ARP) Parameters

     Hardware Address Length: ARP消息中的硬件地址長度是以字節爲單位的硬件(MAC)地址長度。以太網MAC地址是6字節長。

     Protocol Address Length: 邏輯地址(IPv4地址)的長度(以字節爲單位)。IPv4地址有4個字節長。

     Operation: 操作碼,該字段用來說明ARP數據包是請求數據包還是應答數據包和地址解析協議類型(ARP/RARP)。RARP是RAP的一個逆向過程,旨在讓某個主機從數據鏈路層獲取網絡地址IP的過程。ARP和RARP的操作碼及對應操作類型如下:
     1-ARP請求; 2-ARP應答; 3-RARP請求; 4-RARP應答。

     Sender Hardware Address: 源主機硬件地址(MAC)。

     Sender Protocol Address: 源主機協議(IP)地址。

     Target Hardware Address: 目標主機硬件地址(MAC)。ARP請求數據包中該字段被忽略,置爲0.

     Target Protocol Address: 目的主機協議(IP)地址。
     

     ARP包被直接封裝到數據鏈路幀中。如下圖所示,一個ARP包封裝在一個以太網幀中。請注意,type字段表示由幀攜帶的數據是ARP包

在這裏插入圖片描述
                    圖片來自 Address Resolution Protocol (ARP)

     

3. ARP工作原理

3.1 MAC硬件地址

     一個MAC地址由六個十六進制數組成。可能的最高十六進制數是FF:FF:FF:FF:FF:FF,之間用冒號分隔,它是廣播地址。前3個字節表示網卡製造商的唯一標識,後3個字節是網卡製造商分配給網絡適配器(NIC,NIC本質上是一種計算機電路卡,可讓您的計算機連接到網絡。NIC將數據轉換爲可以通過網絡傳輸的電信號)的唯一ID序列號,常見的著名網卡製造商有 Dell, Belkin, Nortel 和 Cisco。比如MAC地址:98:8b:0a:db:76:6b, 前三個8位組“98:8b:0a”表示該網卡的製造商,後面三個8位組(db:76:6b)表示該網絡適配器的唯一序列ID。

     一些著名網卡製造商的“組織唯一標識”ID如下:
          Dell:    00-14-22
          Nortel:  00-04-DC
          Cisco:   00-40-96
          Belkin: 00-30-BD

     每個NIC都有一個稱爲MAC的硬件地址,用於媒體訪問控制。IP地址與TCP/IP(網絡軟件)相關聯時,MAC地址鏈接到網絡適配器的硬件。製造時,會將MAC地址分配給網絡適配器。它被硬連線或硬編碼到計算機的網絡接口卡(NIC)上,並且是唯一的。稱爲ARP(地址解析協議)的東西將IP地址轉換爲MAC地址。ARP就像通行證一樣,通過實際的計算機硬件從IP地址獲取數據(參考 WhatIsMyIPAddress )。

     MAC地址也是有可能重複出現的,因爲一些製造商已經開始重新使用它們的號碼。這通常不是一個問題,因爲相同MAC地址的複製品幾乎從不出現在同一個網絡上。有些卡允許你通過使用特殊的軟件或方式來更改MAC地址(可參考 How do I change my MAC address?)。

3.2 ARP緩存

     每一次的網絡通信,應用層的數據都需要經過從應用層到物理層的封裝步驟,即數據鏈路層在封裝數據幀的時候都需要用到目的MAC地址信息。如果每次通信都需要廣播一個ARP請求,那麼對網絡壓力、帶寬、設備性能都會有很大的影響,畢竟整個設備(服務器)還有太多的東西跑。爲了降低因廣播ARP請求獲取目的設備MAC地址對網絡壓力的影響,每臺IP主機在自己內存中維護了一個ARP緩衝區。類似一張表,該緩衝區記錄了各IP地址與其對應的MAC地址信息間的映射關係,可動態添加和刪除

     使用命令: arp -a 可以獲取當前設備的ARP緩衝表。

|-------IP-----------|------MAC-------|---網卡綁定模式---|
? (10.66.114.4) at 38:ad:be:c1:15:b0 [ether] on bond0
? (10.66.114.11) at 74:ea:c8:a7:80:b2 [ether] on bond0
? (10.254.254.19) at <incomplete> on ens2
gateway (10.66.114.254) at ac:74:09:66:be:e7 [ether] on bond0
? (10.254.254.9) at <incomplete> on ens2
? (10.254.254.18) at <incomplete> on ens2
? (10.254.254.8) at <incomplete> on ens2
.................
? (10.254.254.1) at 00:00:23:34:45:01 [ether] on ens2
? (10.254.254.20) at <incomplete> on ens2
? (10.66.114.253) at 70:4d:7b:33:9d:d1 [ether] on bond0
? (10.66.114.10) at 74:ea:c8:a7:7c:f2 [ether] on bond0
? (10.254.254.10) at <incomplete> on ens2

     ARP緩衝區支持系列手動的操作,比如手動添加一個IP地址和對應的MAC地址信息,手動刪除一個ARP緩衝數據等。詳情 arp --help.

     若想手動刪除一個指定IP的ARP緩存信息,則使用 “arp -d 指定ip”。

arp -d 指定IP 
如: arp -d 10.66.114.115, 該指定執行結束,ARP內存緩衝區中將移除該ARP緩存信息

     若要手動添加一個指定IP的ARP緩存映射信息,則使用“arp -s ip MAC”

[root@Thor tcpdump]# arp -s 10.66.114.117 98:8b:0a:db:76:9f
//當添加成功之後,再次使用 arp -a 可查看到ARP緩衝區信息中有10.66.114.117IP的對應MAC映射信息
[root@Thor tcpdump]# arp -a
............................
............................
? (10.66.114.117) at 98:8b:0a:db:76:9f [ether] PERM on bond0

3.2.1 ARP靜態緩存

     ARP緩衝區有動態和靜態兩種類型之分。對於靜態ARP緩存,地址解析被手動添加(即arp -s IP MAC)到設備的緩存表,並永久保存在緩存中(2020/04/07補充: 除非在末尾加上temp. 即 arp -s IP MAC temp)。我在115設備上面手動添加了117設備(即設備ip是xx.xx.xx.117)IP到MAC地址映射,確認是永久生效

3.2.2 ARP動態緩存

     廣播的ARP請求,在收到響應之後,會將其目的IP和MAC映射關係存儲到ARP內存緩衝區中,保留一段時間再進行刷新(刪除)。ARP緩存區可同時包括“靜態緩存”和“動態緩存”。
     

3.3 ARP如何工作

     ARP的功能是通過向同一個局域網(若在另外一個網絡,則需要路由表的加入)廣播一個ARP請求,以獲得通信目的主機的MAC(硬件地址)信息。

     它的主要流程如下:
     1. 本機ARP內存緩衝區中查找目標IP主機的MAC信息;
     2. 若找到,則直接使用,反之則執行流程3.
     3. 廣播一條ARP請求報文,等待響應,並解析ARP報文且將對應IP地址和MAC地址映射到緩存中。

     通常局域網(LAN)中並不會僅僅只有幾臺設備,多數情況下,都是成百上千臺設備的。爲了簡化流程,用下圖中的五臺設備來充當若干臺主機設備,其實無論兩臺還是若干臺,其原理實現過程是一樣的。

在這裏插入圖片描述
     現假設主機PC5需要和主機PC2進行通信,但是主機PC5不知道主機PC2的MAC地址,所以需要廣播ARP請求,以獲取對應主機的MAC地址。首先主機PC5會在自身ARP緩存區內存中查找是否有IP爲10.66.114.117的主機MAC地址,若找到,則直接使用,就不必發送ARP廣播請求。反之,則需要廣播一條ARP請求報文,位於該局域網(LAN)上的其他主機(本處只有:PC1、PC2、PC3、PC4)都會收到來自主機PC5的廣播數據,這些主機在收到請求數據包之後,解析並查看其中的目的IP地址信息是否和本身的IP對應,若不是,則丟失該包並忽略(即不迴應該請求);反之,則解析包並獲取源IP+源MAC信息,並將這些必要信息組包(填充本機的IP和MAC數據)響應給發送ARP請求的主機PC5(只有對應的目的主機IP纔會響應請求消息)。

     PC5主機在收到來自PC2主機的響應之後,解析出其中的IP和MAC,並將其存入自己的ARP內存緩衝區中,以便下次通信響應。爲了節省內存空間和降低維護成本,ARP緩衝區中的每條數據都是有生命週期的,默認記錄2min中(120s),之後便刪除掉。避免維護一些長時間不通信使用的ARP緩存信息。

     這裏仍以 TCP/IP之傳輸層詳解 中的客戶端、服務端代碼作爲演示。其中10.66.114.115設備是服務端,10.66.114.95是客戶端,我們先手動清楚掉兩臺設備上面的對應ARP緩存內存信息(10.66.114.95, arp -d 10.66.114.115,10.66.14.115,arp -d 10.66.114.95)。

     先啓動115上的服務進程,然後tcpdump在該設備上面開啓抓包,同時在95設備上面開啓客戶端進程。
在這裏插入圖片描述
     將tcpdump抓包得到的文件使用Wireshark打開,通過顯示過濾器(手動輸入過濾條件)來篩選出本次通信中的各請求交互過程如下圖所示:
在這裏插入圖片描述
     因爲ARP緩存中的信息已被手動清除,所以在建立握手前,需要獲取目的主機的MAC地址,之後並開始握手連接和通信,然後再關閉連接。

     下圖是廣播ARP請求的首部信息。ARP請求數據包中包括: 源硬件(MAC)地址、源IP(協議)地址、目的IP(協議)地址。目的(標)硬件地址(MAC)字段全部設置爲0,指明其信息是未知的。
在這裏插入圖片描述

     
     下圖是ARP的響應數據包首部結構圖信息,可以看到在響應報文中,目的主機115已經將其自身的MAC地址填充到對應的首部結構字段中。
在這裏插入圖片描述
     Wireshark中關於顯示過濾器篩選ARP的相關字段請求參考: Display Filter Reference: Address Resolution Protocol

     ARP在響應其請求時,僅回覆請求主機(本例中PC5)的單播消息,而不是廣播給同一局域網(LAN)中的所有主機。一些消息來源提到ARP是第2層協議,而另一些消息來源則把ARP放在第3層。
在這裏插入圖片描述
                              來自 GEEK UNIVERSITY

     所有與ARP相關的問題,都可以在 ARP - Q&A 找到答案。

     IP引入的這個額外的地址解析協議(ARP),它用於在MAC幀中的目標硬件地址和IP網絡地址之間進行映射。從ARP所處TCP/IP協議族看,它是屬於數據鏈路層。

在這裏插入圖片描述
                              圖片來自 IPv4 over Ethernet
     

3.4 ARP使用情形

     下面是可以使用ARP服務的四種不同情況:

     1. 發送方是一個主機,希望將數據包發送到同一網絡上的另一個主機.在這種情況下,必須映射到物理地址的邏輯地址是數據報頭中的目標IP地址。

     2. 發送方是一個主機,希望將數據包發送到另一個網絡上的另一個主機。主機查看它的路由表,並查找此目的地的下一跳(路由器)的IP地址。如果沒有路由表,則查找默認路由器的IP地址。路由器的IP地址成爲必須映射到物理地址的邏輯地址。

     3. 發送者是一個路由器,它接收了一個發送到另一個網絡主機的數據報。它檢查它的路由表並找到下一個路由器的IP地址。下一個路由器的IP地址成爲必須映射到物理地址的邏輯地址。

     4. 發送者是一個路由器,它接收到一個數據報,目的地是同一網絡中的一個主機。數據報的目標IP地址成爲必須映射到物理地址的邏輯地址。

     如圖所示:
在這裏插入圖片描述
                    圖片來自 Address Resolution Protocol (ARP)

     比如一個IP地址爲130.23.43.20和物理地址爲B2:34:55:10:22:10的主機有一個數據包要發送給另一個IP地址爲130.23.43.25和物理地址爲A4:6E:F4:59:83:AB的主機(這是第一個主機所不知道的)。這兩個主機在同一個以太網中。顯示封裝在以太網幀中的ARP請求和應答包。
在這裏插入圖片描述
                    圖片和示例來自 Address Resolution Protocol (ARP)

     

4. ARP攻擊

     也被稱爲ARP中毒路由(APR)或ARP緩存中毒,一種攻擊以太局域網的方法,通過更新目標計算機的ARP緩存,同時使用僞造的ARP請求和應答包,努力改變第2層以太網MAC地址(即,網卡的地址)發送到攻擊者可以監視的地址。由於ARP應答是僞造的,目標計算機首先向攻擊者的計算機發送原本要發送給原始目的地的幀,以便讀取幀。一個成功的APR嘗試對用戶來說是不可見的。

     具體ARP欺騙原理和防備參考 基於ARP協議的欺騙及其預防
     

5. 總結

     本節對ARP的定義、首部結構圖和功能作了比較詳細的說明,同時對其工作原理作了簡要剖析,說明ARP使用的場景和方式。也提到了ARP協議欺騙大致原理。

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