淺談ARP

                                   
 
ARP(Address Resolution Protocol) -----地址解析協議。根據百度百科:” ARP,即地址解析協議,實現通過IP地址得知其物理地址。在tcp/ip網絡環境下,每個主機都分配了一個32位的IP地址,這種互聯網地址是在網際範圍標識主機的一種邏輯地址。爲了讓報文在物理網路上傳送,必須知道對方目的主機的物理地址。這樣就存在把IP地址變換成物理地址的地址轉換問題。以以太網環境爲例,爲了正確地向目的主機傳送報文,必須把目的主機的32位IP地址轉換成爲48位以太網的地址。這就需要在互連層有一組服務將IP地址轉換爲相應物理地址,這組協議就是ARP協議。”
 
詳見rfc826中的定義:

Presented here is a protocol that allows dynamic distribution of the information needed to build tables to translate an address A in protocol P's address space into a 48.bit Ethernet address.

注:P指的是一臺設備。
arp其實就將32位ip地址解析成48位的mac地址。因爲鏈路層不識別ip地址,另外mac地址具有唯一性。Arp用的很廣,從硬件類型就可以看出,常見的支持ethernet,frame-relay,atm,hdlc等,個人認爲,只要是ma(multi-access)都需要arp。但在p2p環境中,就不需要arp了,因爲在p2p環境中(比如ppp),他只要將報文從接口中扔出即可,接受者只有對方。撥號(pppoe)也是如此。
 
 
先看看ARP數據包的格式:
 
Dest mac
Sou
mac
type
Hardware
type
Protocol
type
Hardware
size
Protocol
size
opcode
Sender
mac
Sender
ip
Target
mac
Target
ip
 

從硬件類型(hardware type)開始就是ARP數據包了,前面是以太網的幀頭。

 
先看各個字段

硬件類型(hardware type)爲16bit,指定了硬件類型,常見的有:

編號
硬件類型
1
以太網
15
幀中繼
16
hdlc
17
ATM(異步傳輸模式)
20
串型鏈路
 

協議類型(protocol type)爲16bit.,指定了發送者映射到硬件地址(在ethernet中的mac地址,hdlc中的pvc等)的網絡層協議。

Ip 爲0X0800(這裏與以太網的frame頭中的type字段很相似,這裏標識的是上層的用的是什麼傳輸協議來封裝,比如說ip, ipv6, ipx, appletalk 等)
 

硬件地址大小(hardware address size)爲8個bit,指定了硬件地址的大小(ethernet中的mac地址大小,mac爲6(字節))

 

協議地址大小(protocol address size)爲8個bit,指定了網絡層地址的大小(ipv4爲4(字節))

 
操作(opcode)爲16個bit,指明這個arp數據包是arp request (1)還是 arp reply(2)。還有反轉arp request(8),反轉 arp reply(9)。
 

發送者硬件地址(sender hardware address)爲48個bit-----這裏以 ethernet 爲例

 
發送者網絡層地址 (sender ip address)爲32個bit ------這裏以ip 爲例
 

目的者硬件地址(target hardware address)爲48個bit

目的者網絡層地址(target ip address)爲32個bit

 
看看arp request包
 

 
 
Arp reply包
 

免費arp
 
免費arp即鏈路中的設備將自己的ip地址做爲目的地址來發送arp請求,設備是很不願意收到這樣的arp回覆的,如果收到說明鏈路中有設備與自己的ip地址相同。
主要作用:
1、 檢查鏈路中是否有重複地址
2、 用於hsrp中standby---》active
 
其實每個配置了ip地址的設備剛開機或者剛連接到鏈路上,都會發送免費arp
看看windows主機發送的免費arp:
 

再看看router發送的免費arp
cisco
 

 
路由器與主機發送的免費arp並不一致。而且個數也不相同。主機是一次發送3個request 包。而router是一次發2個relay 包。也許router之間是不會將免費arp放進自己的arp緩存中,而主機可能將router發送的免費arp放進自己的arp緩存中,可能hsrp中設備更改standby---》active狀態就是這樣更改主機的arp緩存的吧(這個與arp欺騙很相似)
 
如果設備沒有配置ip地址,他會發送免費arp嗎?


 
答案是不會。
看看router收到免費arp是否放進自己的arp-cache中
其實arp-cache的作用就是方便再一段時間再去訪問該設備不需要去請求對方的mac地址,節省鏈路的帶寬與cpu的處理------很多地方都是這樣。爲高速包交換 
看topology
 

R1與R2、R3爲192.168.1.0/24
R2與R4爲24.1.1.0/24
R3與R4爲34.1.1.0/24
R4的lookback1 地址爲4.4.4.4
 
那些ARP包會被設備放進自己的ARP-CACHE中
R2上面開啓debug arp
 

首先是免費arp,R2收到R3的免費arp,但是並沒有放進arp緩存。
 
請求目的mac的請求者與被請求者
這裏以R1請求R2的mac地址,與R3請求R1的mac地址爲例
 
先清空arp-cache
R1
 

 
R2
 

R3
 

首先R1請求R2的mac地址
 

 
訪問後R1的arp-cache
 

 
 
 
 
 
 
R2的ARP-Cache
 

 
無關人----R3的arp-cache
 
 

然後R3請求R1的mac地址
 


 
 
R3訪問R1後訪問後,R1的arp-cache
 

 
R3訪問R1後訪問後,R2的arp-cache
 
 

 
R3訪問R1後訪問後,R3的arp-cache
 
 

 
總結:
ARP數據包是一個broadcast frame,    整個broadcast domain中所以的設備都會收到。只有請求者與應答者會 將對方的ip-mac的映射放進自己的arp-cache中,而其他設備解包後丟棄,不會放進自己的arp-cache中。如果自己arp-cache中有該映射的ip地址,後接受的會覆蓋先接受的。                                           
 
代理arp
 
代理arp應該算是一種arp欺騙,網關設備向主機或者網段之間的其他設備作出的一個代理應答。因爲router並不轉發廣播包,而且有去往目的的路由。所以將自己與之直連的接口的mac地址和目的設備的ip地址做一個映射來應答請求的設備。
 
這裏讓我想起來,紅頭髮曾經遺留的一道題目:下一
條是直連設備的ip地址與下一條是自己的接口有什麼不同。
 
根據上面的top
我在R1配置一條靜態路由

R1(config)# ip route 0.0.0.0 0.0.0.0 192.168.1.2

R1(config)# ip route 0.0.0.0 0.0.0.0 fa 0/0

 
現在在R1上面去訪問R4的lookback0地址:4.4.4.4
 
先是配置成

R1(config)# ip route 0.0.0.0 0.0.0.0 192.168.1.2

而且開啓了proxy ARP(default開啓)

 

 
R1訪問目的地址爲4.4.4.4後的arp-cache

 

 

R1請求的是gateway的mac地址(裏面沒有用到proxy arp),只是將數據包扔給Gateway,由Gateway來轉發(這裏不管目的是什麼網段,都交由GATEWAY, 如果Gateway路由表裏面沒有到達的路由,就會回覆一個icmp報文:目的不可達)

 

 

 

 

將前面那條default route no掉,配置成

R1(config)# ip route 0.0.0.0 0.0.0.0 fa 0/0

 
再去訪問4.4.4.4
R1請求4.4.4.4的設備的mac地址,這時R2與R3同時將自己的mac給予迴應(這裏就是代理arp)
收到2個arp reply
先是R3迴應的:
 

 
再是R2迴應的:
 

看R3的迴應的ARP報文,還出現了多個ip地址映射成一個mac地址。而後迴應的ARP,會取代先形成的映射(ip地址相同的),與arp欺騙差不多吧
 
看R2 debug結果
 

R1訪問4.4.4.4成功,Arp-Cache中出現4.4.4.4映射的MAC(是R2做的Proxy Arp)
 

總結:這裏都能訪問目的網段,有什麼問題呢。這裏配置下一條爲接口的,誰後迴應arp,將誰的mac與目的網段做映射,如果在R2與R4之間設置了加密,而你卻走R3,如果R3是一個非法者,R1發送的包全給R3監聽了。
 
既然開啓proxy arp都可以訪問,現在關閉proxy arp功能,R2關閉後debug的結果
 

R3關閉Proxy ARP:
 

R2與R3關閉Proxy Arp後,R1訪問4.4.4.4
 
 

壓根就沒有設備迴應R1的ARP request ,R1都沒有封裝成功。
 

 
 
將默認路由的下一下換成R2的ip地址,R2成爲R1的網關:
 
R1的ARP Request
 

R2的ARP Reply:
 
 

       結果看到了吧,ping成功了。在看R1的Arp­-cache:
 

本來想做個Arp欺騙的實驗,可以環境搭建不起來,就說說原理吧:                                                                                      
就上面的top:
R1是主機,R2是Gateway,R3做爲***者,R3主動向R1發送Arp relay報文,發送者的ip 地址是R2的地址(192.168.1.2),而發送者的mac是自己的mac地址,R1收到後會覆蓋之前R2的IP地址與MAC地址映射,將R2的IP地址與R3的MAC地址形成映射。而R1要向其他網段訪問,就不會將數據包發給R2,而是R3,這個過程就是ARP欺騙。
 
本文到此結束,寫的比較倉促,有不對的地方請指正,謝謝
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章