地址解析協議(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)
網路拓撲結構如下圖:
環境
-
PC1 沒有ARP快取
-
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 幀:
需要注意的是
-
目標地址是一個廣播地址(MAC全為1的),用來對全網進行廣播。
-
opcode 欄位為 1,是一個ARP請求
NO.774
需要注意:
-
opcode 欄位值為2,為ARP應答
-
傳送方MAC和IP為Switch0 的對映
-
目標MAC為PC1 的MAC地址,這裡目標IP沒有,是直接交付的幀。
簡單來說就是這樣:
結論
解析IP分為以下幾個步驟:
-
傳送幀查詢區域網中有無對應的MAC地址
-
有則回覆,如果區域網中沒有這個對應MAC,ARP會有一個規定時間,超過這個時間則認為沒有。
需要注意以下幾點:
-
ARP不是廣播回覆,是直接應答原始請求的傳送方。
-
接受到回覆的主機將對映儲存在本地的快取中以供下次使用。
ARP快取
ARP 快取用來記錄每個介面從網路層地址(IP地址)到硬體地址的最新對映
其正常到期時間是條目建立開始後的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 埠
通過上述包分析得知:
-
首先PC3 先發送一個探測幀,探測是否有無相同的對映關係。
-
PC1 回覆了PC3 ,表示這個IP有人用了,用這個IP的人是我。
-
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提供了三種可能的解決方案:
-
停止使用這個地址
-
保留這個地址。 但傳送一個“防禦性”ARP通告,如果衝突繼續,則停止使用
-
不理會衝突,繼續使用。
與ARP有關的攻擊
最為典型的中間人攻擊
如下圖所示:
引用/參考/使用的工具
參考書籍與網站:
https://zhiliao.h3c.com/Theme/details/27896
TCP/IP 詳解 卷一
工具:
EVE-NG
Packet tracer