ARP 協議


目錄

ARP 簡述

ARP(Address Resolution Protocol,地址解析協議),是一個通過解析網絡層 IP 地址來找尋數據鏈路層 MAC 地址的網絡傳輸協議,它在 IPv4 中極其重要。ARP 最初在 1982 年的 RFC 826 中提出並納入互聯網標准 STD 37。在 IPv6 中,使用的是 NDP(鄰居發現協議)用於代替 ARP。

MAC 地址簡述

MAC 地址(Media Access Control Address),直譯為媒體存取控制位址,也稱為局域網地址(LAN Address),MAC 位址,以太網地址(Ethernet Address)或物理地址(Physical Address),它是一個用來確認網絡設備位置的地址。

以太網簡述

以太網是一種計算機局域網技術。IEEE 組織的 IEEE 802.3 標准制定了以太網的技術標准,它規定了包括物理層的連線、電子信號和介質訪問層協議的內容。以太網是目前應用最普遍的局域網技術,取代了其他局域網技術如令牌環、FDDI 和 ARCNET。

在這里插入圖片描述

  • 數據幀首部:占 14 字節,包含有目標主機網卡 MAC 地址、源主機網卡 MAC 地址以及數據幀類型標識。
  • 數據:從上層(網絡層)傳遞下來的數據包,范圍在 [46, 1500] 個字節之間。
  • 數據幀尾部:占 4 個字節,是 CRC 校驗序列,用來確定數據幀在傳輸過程中是否有損壞。

ARP 的基本功能

在以太網協議中規定,同一局域網中的一台主機要和另一台主機進行直接通信,必須要知道目標主機的 MAC 地址。而在 TCP/IP 協議中,網絡層和傳輸層只關心目標主機的 IP 地址以及端口號。這就導致在以太網中使用 IP 協議時,數據鏈路層的以太網協議接到上層 IP 協議提供的數據中,只包含目的主機的 IP 地址。而沒有 MAC 地址就無法最終定位目的主機,於是需要一種方法,根據目的主機的 IP 地址,獲得其 MAC 地址。這就是 ARP 協議要做的事情。所謂地址解析(Address Resolution)就是主機在發送數據幀前將目標 IP 地址轉換成目標 MAC 地址的過程

在這里插入圖片描述

而在點對點鏈路中不會使用 ARP,實際上在點對點網絡中也不會使用 MAC 地址,因為在此類網絡中分別已經獲取了對端的 IP 地址。

注意:ARP 已經在很多網路層和數據鏈接層之間得以實現,包括 IPv4、Chaosnet、DECnet 和 Xerox PARC Universal Packet(PUP),使用 IEEE 802 標准。可見,ARP 不僅限於使用在 IPv4 網絡,這一點從 ARP 的數據包結構設計中有體現出來。

ARP 的數據包結構

下圖為以太網數據幀的數據結構:

在這里插入圖片描述

  • 以太網首部
    • 以太網目的地址和以太網源地址:表示目標設備和發送端設備的以太網地址。其中,目的以太網地址全為 1,即 FF:FF:FF:FF:FF:FF,為廣播地址,在本地局域網內,所有的以太網接口都要接收這個數據幀。

    • 幀類型:表示以太網數據幀的數據類型。對於 ARP 來說這里是 0x0806,對於 IP 數據報文是 0x0800,還有 RARP(逆地址解析協議)是 0x8035。

NOTE:如果以太網數據幀的幀類型是 ARP,那么數據部分就會擁有 ARP 首部。

  • 以太網 ARP 字段
    • ARP 首部

      • 硬件類型和協議類型:這兩個字段用來描述 ARP 分組。前者表示 ARP 工作在什么類型的網絡中,需要什么樣的物理地址;后者則表示需要映射的協議地址類型。例如:用來描述 IPv4 時,則協議類型為 IP,硬件類型為以太網的物理地址。所以協議類型為 0x0800,硬件類型為 1,表示以太網地址。

      • 硬件地址長度和協議地址長度:用來描述 IPv4 時,分別表示 MAC 地址和 IP 地址的長度,分別為 6 字節和 4 字節。

      • 操作碼:表示 ARP 數據包的操作類型。

        • 1:ARP 請求
        • 2:ARP 應答
        • 3:RARP 請求
        • 4:RARP 應答
    • 源硬件地址和目標硬件地址:與以太網首部中的目的以太網地址和源以太網地址重疊。

    • 源協議地址和目標協議地址:用來描述 IPv4 時,分別表示源設備 IP 地址和目的設備 IP 地址。

NOTE 1:在發送 ARP 請求時,目標硬件地址是空着的(全為 0),因為 ARP 請求要請求的就是它的值,當目標設備請求收到后,就會把自己的硬件地址寫到這個字段,並把操作碼改成 2,再應答回去。

NOTE 2:在 ARP 中,有效數據的長度為 28 個字節,不足以太網的最小長度 46 字節長度。所以需要填充字節,填充字節最小長度為 18 個字節。

ARP 的基本工作原理

在這里插入圖片描述

在每台安裝有 TCP/IP 協議的電腦或路由器里都有一個 ARP 緩存表,表里的 IP 地址與 MAC 地址是一對應的,如下表所示。

在這里插入圖片描述

以主機 A(192.168.38.10)向主機 B(192.168.38.11)發送數據為例。

  1. 當主機 A 發送數據時,會在自己的 ARP 緩存表中尋找是否有目的 IP 地址。如果找到就知道目標 MAC 地址為 00-BB-00-62-C2-02,直接把目的 MAC 地址封裝入數據幀,然后通過數據鏈路層發送就可。

  2. 如果在 ARP 緩存表中沒有找到目的 IP 地址,那么主機 A 就會在網絡上發送一個廣播(ARP Request),目標 MAC 地址是 FF.FF.FF.FF.FF.FF,這表示向同一網段內的所有主機發出這樣的詢問:“192.168.38.11 的 MAC 地址是什么?”

ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 53.53.53.53 tell 192.168.200.10, length 28

在這里插入圖片描述

  1. 網絡上其他主機並不響應 ARP 詢問,只有主機 B 接收到這個幀時,才向主機 A 做出這樣的回應(ARP Response):“ 192.168.38.11 的 MAC 地址是 00-BB-00-62-C2-02”,此回應以單播方式。這樣,主機 A 就知道主機 B 的 MAC 地址,它就可以向主機 B 發送信息。

在這里插入圖片描述

  1. 更新自己的 ARP 高速緩存(ARP cache),下次再向主機 B 發送信息時,直接從 ARP 緩存表里查找就可。
    在這里插入圖片描述

NOTE:請求解析方收到 ARP 回應包之后,不會進行任何判斷,就直接將對應的 MAC 地址存入自己的 ARP 緩存中,這也是 ARP 投毒攻擊的產生原因。

當協議棧中需要再次進行 IP 解析的時候,系統會自動到 ARP 緩存表中查找是否已經存在相應的 IP 表項,如果已存在則使用之,如果不存在,則執行解析流程,對指定的 IP 進行 ARP 解析。

同時,ARP 緩存表采用老化機制,在一段時間內(一般為 20 分鍾)如果表中的某一行沒有使用,就會被過期刪除,這樣可減少緩存表的長度,加快查詢速度。

ARP 的客戶端

Linux 操作系統都會安裝 ARP 客戶端 —— arp 指令,操作如下:

arp --help
-a                       查看緩存中的所有項目
-s, --set                設置一個新的 ARP 項目、不帶任何參數表示查看靜態 MAC 地址
-d, --delete             人工刪除一個靜態項目
-v, --verbose            be verbose
-n, --numeric            don't resolve names
-i, --device             specify network interface (e.g. eth0)
-D, --use-device         read <hwaddr> from given device
-A, -p, --protocol       specify protocol family
-f, --file               read new entries from file or from /etc/ethers
  • 查看 ARP 緩存表
[root@ctl-host ~]# arp -a
? (172.18.22.205) at 08:9e:01:fc:48:7d [ether] on br0
? (172.18.22.10) at 52:54:00:bd:23:9e [ether] on br0
gateway (172.18.22.1) at ac:7e:8a:6c:41:c4 [ether] on br0
  • 查看 ARP 緩存表的詳細信息
[root@ctl-host ~]# arp -nv
Address                  HWtype  HWaddress           Flags Mask            Iface
172.18.22.205            ether   08:9e:01:fc:48:7d   C                     br0
172.18.22.10             ether   52:54:00:bd:23:9e   C                     br0
172.18.22.1              ether   ac:7e:8a:6c:41:c4   C                     br0
Entries: 3	Skipped: 0	Found: 3
  • 增加一個靜態的 ARP 表項
$ arp –s 157.55.85.212  00-aa-aa-562-c6-09

# 增加超時條目
$ arp -s 211.161.17.21 00:00:00:00:00:00 temp

ARP announcement(通告)

ARP announcement 是一種特殊的 ARP 請求,ARP 數據包的目的協議地址和源協議地址相同,並且目的硬件地址為全 0。所以,它又會是一個特殊的 ARP 響應,目的協議地址和源協議地址、目的硬件地址和源硬件地址都相同。

ARP announcement 旨在更新其它收到這個通告的主機的 ARP 緩存。這種免費(不請自來)的 ARP 通常用於在主機啟動或更換網卡時通知其它主機。又稱 GARP(Gratuitous ARP,免費 ARP)。

作用:用作更新 ARP 緩存,網絡中的其他主機收到該廣播則更新緩存中的條目,收到該廣播的主機無論是否存在與 IP 地址相關的條目都會強制更新,如果存在舊條目則會將 MAC 更新為廣播包中的 MAC。

ARP probe(探針)

ARP Probe 和 ARP announcement 的實現原理類似,但目的不同。ARP Probe 主要用於檢測 IPv4 地址沖突。

在主機開始使用一個 IP 地址之前,實現了 RFC 5227 規范的主機必須通過 ARP probe 來測試該 IP 地址是否已經被使用。如果 ARP probe 有應答則產生錯誤消息。

ARP suppression(壓制)

禁用主機 ARP,要求配置靜態 ARP 緩存才能通信:

ip link set dev eth0 arp off

ARP proxy(代理)

另外,當源主機和目的主機不在同一個局域網中時,即便知道對方的 MAC 地址,兩者也不能直接通信,必須經過三層路由轉發才可以。所以此時,源主機通過 ARP 協議獲得的將不是目的主機的真實 MAC 地址,而是一台可以通往局域網外的路由器的 MAC 地址。於是此后源主機發往目的主機的所有幀,都將發往該路由器,通過它向外發送。這種情況稱為委托 ARP 或 ARP 代理(Proxy)。

在這里插入圖片描述

ARP spoofing(欺騙)

ARP機制是一種 “無狀態”、“無驗證” 的協議,所以它很容易受到 ARP spoofing 攻擊。ARP spoofing,即 ARP 欺騙,又稱 ARP 投毒,是一種針對 ARP 的攻擊方式。

ARP 欺騙的運作原理是由攻擊者發送假的 ARP 數據包到網絡上,尤其是送到網關上。假設你的網關的 IP 地址是 192.168.0.2,MAC 地址為 00-11-22-33-44-55,那么你發送的數據都會從這個 MAC 地址經過,這時候我發送大量的 ARP 數據包,然而我的包是構造出來的,IP 依舊是你的 IP,但 MAC 地址卻被我替換成了我的 MAC 地址。此時當你更新你的 ARP 緩存時,就會把我機器的 MAC 地址當成 192.168.0.2 的 MAC 地址,於是你的流量都到我這來了。

所以 ARP 欺騙的目的是要讓送至特定的 IP 地址的流量被錯誤送到攻擊者所取代的地方。因此攻擊者可將這些流量另行轉送到真正的網關(Passive Sniffing,被動式數據包嗅探)或是篡改后再轉送(Man-in-the-middle Attack,中間人攻擊)。攻擊者亦可將 ARP 數據包導到不存在的 MAC 地址以達到阻斷服務攻擊的效果。

最理想的預防方式就是使用靜態的 ARP 條目,對於網關:將所有的客戶端的 MAC 以及對應 IP 進行靜態綁定,防止攻擊者假冒客戶端。而對於普通客戶端:綁定網關 MAC 地址,防止攻擊者假冒網關;不過在大型網絡不可行,因為 ARP 經常需要更新,另外一種方法,例如:DHCP snooping,網絡設備可借由 DHCP 保留網絡上各電腦的 MAC 地址,在偽造的 ARP 數據包發出時即可偵測到。此方式已在一些廠牌的網絡設備產品所支持。

參考文檔

https://www.jianshu.com/p/65710069d934
https://www.cnblogs.com/littlehann/p/3735816.html
https://juejin.im/post/59f1e319f265da430405db4a
https://www.ibm.com/developerworks/cn/linux/l-arp/index.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM