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欺騙。
本文到此結束,寫的比較倉促,有不對的地方請指正,謝謝