什么是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地址)到硬件地址的最新映射 (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 端口
通過上述包分析得知:
-
首先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