1. 程式人生 > 其它 >地址解析協議(ARP) 分析

地址解析協議(ARP) 分析

什麼是ARP協議

ARP(A ddress R esolution P rotocol)— 地址解析協議 ,用於將IP地址解析為MAC地址。複雜來說,ARP用於32位IPv4地址和乙太網的48位MAC地址之間的對映。

與ARP相反功能的協議稱為 RARP(Reverse Address Resolution Protocol)逆地址解析協議 。用於將MAC地址轉換為IP地址。一般用於無盤系統中。

一個基本的例子

PC1 訪問 閘道器(switch0,192.168.1.1)

網路拓撲結構如下圖:

環境

  1. PC1 沒有ARP快取

  2. PC1 ,PC2,Switch0 在同一個網段同一個Vlan

PC1 執行如下命令,並且監聽並捕獲e0/0 和 e0/1 兩個埠(只捕獲ARP協議)

VPCS> ping 192.168.1.1

捕獲結果

e0/0

e0/1

捕獲分析

  • No.773幀,PC1 向 Switch0 傳送一個幀,Switch 0在本Vlan廣播 ,查詢誰的IP是192.168.1.1

  • No770,Switch廣播幀到網段,向e0/1 傳送廣播幀,PC2接受但沒有回覆。

  • No774,Switch0 答覆了PC1。表明192.168.1.1 對應的MAC地址是我的

NO.773 幀:

需要注意的是

  1. 目標地址是一個廣播地址(MAC全為1的),用來對全網進行廣播。

  2. opcode 欄位為 1,是一個ARP請求

NO.774

需要注意:

  1. opcode 欄位值為2,為ARP應答

  2. 傳送方MAC和IP為Switch0 的對映

  3. 目標MAC為PC1 的MAC地址,這裡目標IP沒有,是直接交付的幀。

簡單來說就是這樣:

結論

解析IP分為以下幾個步驟:

  • 傳送幀查詢區域網中有無對應的MAC地址

  • 有則回覆,如果區域網中沒有這個對應MAC,ARP會有一個規定時間,超過這個時間則認為沒有。

需要注意以下幾點:

  • ARP不是廣播回覆,是直接應答原始請求的傳送方。

  • 接受到回覆的主機將對映儲存在本地的快取中以供下次使用。

ARP快取

ARP 快取用來記錄每個介面從網路層地址(IP地址)到硬體地址的最新對映

(MAC地址)。

其正常到期時間是條目建立開始後的20分鐘[RFC1122]

檢視ARP快取

通過使用命令

> arp -a

windows平臺下的顯示結果:

型別欄位指明瞭對映關係是通過動態獲取還是靜態獲取

ARP幀

下圖顯示了ARP幀的格式:

欄位解釋:

乙太網幀頭部

    - DST:目的地址

    - SRC : 源地址

    - 長度或型別:多數情況用於確定後面的協議型別,在ARP幀中,這個值是0x0806

固定大小:

    - 硬體型別:指出硬體地址的型別。對乙太網來說該值為1

    - 協議型別:指出對映的協議地址型別。位於IPv4地址,該值為0x0800

    - 硬體大小,協議大小:

        分別指出硬體地址和協議地址的位元組數

        對於乙太網使用IPv4地址的ARP請求或應答,它們的值分別為6和4

    - op:指出操作的型別,這個值是必須的(?由於ARP請求和ARP應答的長度/型別欄位相同)

        ARP請求(值為1)

        ARP應答(2)

        RARP請求(3)

        RARP應答(4)

可變大小:

    - 傳送方硬體地址

    - 傳送方協議地址

    - 目的硬體地址

    - 目的協議地址

  • FSC:用於校驗

ARP幀的示例

下圖是一個ARP幀的示例,1.2 主機查詢1.5主機的ARP請求幀:

其中 :

乙太網幀部分

  • 前導碼和SFD佔了8個bit

  • 目的地址為FFFF.FFFF.FFFF(全1的廣播地址),同網段同vlan的所有主機將接受到這個幀

  • type(型別)欄位為0x0806,用來表示這是一個ARP幀

ARP幀部分:

    - HARDWARE TYPE(硬體型別):在乙太網中該值為1

    - PROTOCAL TYPE(協議型別):0x0800,對於IPv4地址,該值為0x0800

    - 硬體大小(HLEN)和協議大小(PLEN)

        這裡分別是0x06和0x04 ,表示MAC 6位元組,IPv4地址4位元組

    - OP(OPCODE):操作碼,這裡表示ARP請求(值為1)

可變大小:

  • 傳送方的硬體地址(SOURCE MAC)

  • 傳送方的協議地址(SOURCE IP):這裡是一個IPv4地址

  • 目的硬體地址(TARGET MAC)

  • 目的協議地址(TARGET IP)

ARP快取超時

重新整理快取,來保證對映條目是最新的。

防止出現不完整條目,比如說IP和MAC對應不上(出現這種情況可能是主機IP設定改變,網絡卡改變)

完整條目的超時為20分鐘,不完整條目的超時為3分鐘

代理ARP

代理ARP用來隱匿傳送端和接收端。

代理ARP使一個系統可回答不同主機的ARP請求

這樣做有兩個常見原因:

  • 有些系統無法進行子網劃分

  • 有些系統使用比較舊的廣播地址(全零的主機ID ,而不是全1的主機ID)

免費ARP和地址衝突檢測

Gratuitous ARP ,被翻譯為“免費ARP”,也被稱為“無故ARP”。相比“免費”這個翻譯,“無故”這個更易理解:“在沒有人問自己的情況下,無緣無故自問自答”,即免費ARP是裝置傳送的一個傳送端IP地址和目標IP地址都是本裝置IP地址的ARP request/reply報文

一個免費ARP的例子

PC3 的IP地址與PC1的衝突

網路拓撲結構圖如下:

環境

  • 只捕獲ARP幀

  • PC3 的IP地址沒有設定

  • PC3的ARP快取表是空的

分析

e0/2 埠

e0/0 埠

e0/1 埠

通過上述包分析得知:

  1. 首先PC3 先發送一個探測幀,探測是否有無相同的對映關係。

  2. PC1 回覆了PC3 ,表示這個IP有人用了,用這個IP的人是我。

  3. PC2 沒有回覆PC3,因為沒有檢測到衝突。

ACD的三次探測

什麼是ACD

ARP並沒有為IP和MAC的對映衝突提供解決方式,而是由[RFC5277]描述IPv4地址衝突檢測(ACD)
ACD 定義了ARP探測分組和ARP通告分組。探測分組是一個ARP請求分組,ARP通告與ARP探測相同,除了傳送方協議地址和目的協議地址欄位被填充為候選IPv4地址外。它用於通告發送方使用候選IPv4地址的意圖

如下是ACD的三次通告:

  • time列中,每次間隔一秒傳送,用來防止介面擁塞,網路流量激增。

ACD 被認為是一個持續的過程

這是它與免費ARP的區別

當一個主機通告它正在使用的地州,它會繼續檢查輸入的ARP流量(請求和應答),檢視自己的地址與之衝突(自己的協議地址是否出現在傳送方的協議地址欄位中,也就是IP地址相同),如果IP地址相同,代表發生衝突了,ACD提供了三種可能的解決方案:

  1. 停止使用這個地址

  2. 保留這個地址。 但傳送一個“防禦性”ARP通告,如果衝突繼續,則停止使用

  3. 不理會衝突,繼續使用。

與ARP有關的攻擊

最為典型的中間人攻擊

如下圖所示:

引用/參考/使用的工具

參考書籍與網站:

https://zhiliao.h3c.com/Theme/details/27896

TCP/IP 詳解 卷一

工具:

EVE-NG

Packet tracer