您好,登錄后才能下訂單哦!
本篇內(nèi)容介紹了“ARP協(xié)議怎么使用”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!
在同一個網(wǎng)絡(luò)(無特別說明,均指以太網(wǎng)絡(luò))中進行通信的主機,必須要擁有目標(biāo)主機的MAC地址才能夠正確地將數(shù)據(jù)發(fā)送給目標(biāo)主機,那么如何知道目標(biāo)主機的MAC地址呢?可以通過ARP協(xié)議。ARP協(xié)議就是用來獲取目標(biāo)IP地址所對應(yīng)的MAC地址的,也就是說,ARP協(xié)議可以動態(tài)地在三層IP地址和二層MAC地址之間建立一種映射關(guān)系。可以用如下示意圖來形象表示其作用:
可以看到上面的圖示是把ARP協(xié)議劃分到網(wǎng)絡(luò)層,也既是認為它是一個網(wǎng)絡(luò)層的協(xié)議,這是出于它為網(wǎng)絡(luò)層的IP協(xié)議提供服務(wù)而考慮的。但實際上,由于ARP協(xié)議用以解析出IP地址(邏輯地址)所對應(yīng)數(shù)據(jù)鏈路層中的地址(物理地址/硬件地址),所以把其劃分在數(shù)據(jù)鏈路層也是沒有問題的,這并沒有嚴(yán)格的定義。
我們下面將通過具體的實踐過程來分析四種常見的ARP包:ARP請求包、ARP響應(yīng)包、無償ARP包與IP地址沖突檢測,同時也會分析一下ARP代理的發(fā)生過程。
這里會使用的環(huán)境如下:
網(wǎng)絡(luò)設(shè)備模擬器:GNS3
抓包軟件:Wireshark
1.網(wǎng)絡(luò)環(huán)境搭建
為了簡潔起見,這里不設(shè)置一個較大的網(wǎng)絡(luò)環(huán)境來滿足前面四種情況ARP包分析的需要,而是在分析不同的ARP情況時分別搭建較小的網(wǎng)絡(luò)環(huán)境,這樣可以使我們的分析更有針對性。
2.ARP包報文格式
如下:
注意我們關(guān)注的是28字節(jié)的ARP包,只不過上面的圖還包含了以太網(wǎng)首部字段信息(顯然以太網(wǎng)首部的幀類型為ARP,在分析IP協(xié)議時提到過,這是一個數(shù)據(jù)分用的概念)。
因為對于ARP包的分析,其實我們更關(guān)心的應(yīng)該是ARP請求包、ARP響應(yīng)包、無償ARP包或者ARP代理相關(guān)的知識,而后面的實踐也主要是分類地進行討論。所以下面先給出一個普通ARP包(請求包)的實際結(jié)構(gòu),然后再給出每一個字段的具體含義(參考了《TCP/IP詳解 卷1:協(xié)議》的部分內(nèi)容),先作一個基本的了解,最后再詳細分析這些包產(chǎn)生的過程:
一個普通ARP包(請求包的實際結(jié)構(gòu))
ARP包各字段具體含義(對比上面實際抓到的包)
字段 | 含義 |
硬件類型 | 占16位 表示硬件地址的類型,值為1即表示以太網(wǎng)地址,也就是MAC地址 |
協(xié)議類型 | 點16位 表示要映射的協(xié)議地址類型,值為0x0800即表示IP地址,因為本文都是在IP協(xié)議的基礎(chǔ)上進行分析的(即網(wǎng)絡(luò)層邏輯地址為IP地址),所以所抓到的包的該字段類型都為0x0800 |
硬件地址長度 | 占8位 指出硬件地址的長度,單位為字節(jié),因為本文針對的是以太網(wǎng),而以太網(wǎng)地址為MAC地址,占48位,即6字節(jié),所以后面抓到的包中該字段的值都為6,不再作特別說明 |
協(xié)議地址長度 | 占8位 指出三層邏輯地址的長度,單位為字節(jié),因為本文針對的是以太網(wǎng)地址和IP地址的映射,而IP地址占32位,即6字節(jié),所以后面抓到的包中該字段的值都為4,不再作特別說明 |
操作字段 | 指出操作類型,對應(yīng)的值如下:
但因為RARP現(xiàn)在已經(jīng)很少使用了,所以本文不會討論 |
發(fā)送端以太網(wǎng)地址 | 占48位 準(zhǔn)確上說是“發(fā)送端硬件地址”,但因為本文只針對以太網(wǎng)進行討論,所以表述為“發(fā)送端以太網(wǎng)地址” |
發(fā)送端IP地址 | 占32位 準(zhǔn)確上說是“發(fā)送端網(wǎng)絡(luò)層邏輯地址”,但因為本文只針對的是以太網(wǎng)地址和IP地址的映射的討論,所以表述為“發(fā)送端IP地址” |
目的以太網(wǎng)地址 | 占48位 |
目的IP地址 | 占32位 |
3.在實踐中分析ARP的實現(xiàn)過程:ARP請求、ARP響應(yīng)
(1)網(wǎng)絡(luò)環(huán)境搭建
本節(jié)主要是抓取ARP請求包和ARP響應(yīng)包來分析ARP請求與響應(yīng)的一個詳細過程,以及對應(yīng)ARP包中相關(guān)字段的含義,這個實踐的網(wǎng)絡(luò)環(huán)境比較簡單,如下:
在R1路由器上做如下配置:
R1#conf t R1(config)#int f0/0 R1(config-if)#no shu R1(config-if)#ip add 192.168.1.1 255.255.255.0 R1(config-if)#do wr
在R2路由器上做如下配置:
R2#conf t R2(config)#int f0/0 R2(config-if)#no shu R2(config-if)#ip add 192.168.1.2 255.255.255.0 R2(config-if)#do wr
然后在R1路由器上查看arp緩存表:
R1#show arp Protocol Address Age (min) Hardware Addr Type Interface Internet 192.168.1.1 - cc01.127f.0000 ARPA FastEthernet0/0
可以看到arp緩存表中并沒有192.168.1.2的MAC地址,所以如果待會R1發(fā)送數(shù)據(jù)給R2,必然會有ARP請求發(fā)生,所以這里請確保R1中確實沒有192.168.1.2的MAC地址,如果有的話,建議重啟兩個路由器。(雖然可以在路由器上執(zhí)行clear arp-cache來清除arp緩存表,但是清除過后又會馬上生成,所以這里建議直接重啟)
(2)抓取并分析ARP請求包和ARP響應(yīng)包
首先在R1和R2的鏈路上啟動Wireshark,監(jiān)測R1的接口。(這是GNS3的功能,可以直接抓取通過兩個路由器之間鏈路的數(shù)據(jù)包)
在R1上執(zhí)行如下命令:
Router#ping 192.168.1.2 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 192.168.1.2, timeout is 2 seconds: .!!!! Success rate is 80 percent (4/5), round-trip min/avg/max = 44/62/76 ms
!表示數(shù)據(jù)發(fā)送成功,可以看到第一個是".",則表示數(shù)據(jù)發(fā)送失敗,這是因為,第一個包在發(fā)送時,R1中并沒有192.168.1.2的MAC地址,于是就去發(fā)送ARP請求來獲得其MAC地址,但是當(dāng)獲得MAC地址之后,第一個包已經(jīng)超時了(等待MAC地址超時),并沒有發(fā)送出去,可以看下面抓到的包:
可以看到已經(jīng)有2個ARP包(1個請求和1回答)和8個ICMP包(4個請求和4個回答),這里我們主要分析的是ARP包。
ARP請求包
數(shù)據(jù)包結(jié)構(gòu)如下:
字段分析如下:
a.硬件類型、協(xié)議類型、硬件地址長度、協(xié)議地址長度
這幾個字段的內(nèi)容跟前面討論的一樣,因為針對的是以太網(wǎng)和IP地址
b.操作字段Opcode
可以看到Opcode的值為request(1),所以這是一個ARP請求包。
c.發(fā)送端以太網(wǎng)地址
我們是從R1向R2發(fā)送數(shù)據(jù)的。
從前面的命令執(zhí)行結(jié)果:
R1#show arp Protocol Address Age (min) Hardware Addr Type Interface Internet 192.168.1.1 - cc01.127f.0000 ARPA FastEthernet0/0
這確實是R1的MAC地址(配置了192.168.1.1 IP地址的接口的MAC地址)。
d.發(fā)送端IP地址
發(fā)送端也確實是192.168.1.1,也就是R1。
e.目的以太網(wǎng)地址
可以看到這里為全0,在ARP請求包中,會把目的以太網(wǎng)地址字段的值置為全0,因為此時并不知道目的以太網(wǎng)地址是什么(也就是不知道192.168.1.2的MAC地址是多少)。
f.目的IP地址
數(shù)據(jù)包是從R1發(fā)送給R2的,所以目的IP地址就是192.168.1.2,R2收到這個ARP請求包之后,如果看到這個字段的內(nèi)容是自己的IP地址,就會回復(fù)這個ARP包,也就是會發(fā)送一個ARP響應(yīng)包。
其實字段內(nèi)容并不難理解,不過這里需要注意一點是,查看這個ARP請求包的數(shù)據(jù)鏈路層的目的MAC地址:
會發(fā)現(xiàn)其是一個廣播地址,這也就意味著,發(fā)送一個ARP請求包,以太網(wǎng)中的所有主機都能夠收到該ARP請求包,但是并不是所有的主機都會回復(fù)這個ARP請求包,只有當(dāng)接收者的IP地址與ARP請求包中的Target IP address中標(biāo)識的目的IP地址一致時才會進行回復(fù)。
ARP響應(yīng)包
數(shù)據(jù)包結(jié)構(gòu)如下:
對比ARP請求包來分析,其實發(fā)現(xiàn)并沒有相關(guān)多少,只是有以下幾點區(qū)別:
a.ARP響應(yīng)包的操作字段Opcode值為reply(2)
b.ARP響應(yīng)包的二層目的MAC地址為ARP請求包發(fā)送者的MAC地址
也就是說,ARP請求包是以廣播的形式發(fā)送的,但ARP則是以單播的形式發(fā)送的,那么發(fā)給誰呢?ARP請求包是誰發(fā)送的,ARP響應(yīng)包就發(fā)給誰,對應(yīng)的二層目的MAC地址就是ARP請求包發(fā)送者的MAC地址
c.發(fā)送端以太網(wǎng)地址、發(fā)送端IP地址、目的以太網(wǎng)地址、目的IP地址
跟ARP請求包的內(nèi)容相反,只不過ARP響應(yīng)包中的所有地址字段的值都是已知的,這個很容易理解,不過需要注意的是,在這個時候,ARP響應(yīng)包到底要發(fā)給誰,已經(jīng)很明確了,所以ARP響應(yīng)包是一個單播包。
正如上面看到的,理解常規(guī)的ARP請求包和ARP響應(yīng)包的過程并不復(fù)雜,只要知道了網(wǎng)絡(luò)通信的基本原理,各個字段的值也就很容易理解了。
4.在實踐中分析ARP的實現(xiàn)過程:無償ARP與IP地址沖突檢測
有償ARP
前面在獲取某個IP地址對應(yīng)的MAC地址是,都需要先發(fā)送一個ARP請求包,然后再通過接收一個ARP響應(yīng)包來知道該IP地址所對應(yīng)的MAC地址,因為需要發(fā)送ARP請求包,我們可以認為這是“有償”的,即要付出一些代價。
無償ARP
而所謂無償ARP,指的就是,我不需要發(fā)送一個ARP請求包,對方就會“無償”地把一個ARP響應(yīng)包發(fā)給我(其實也主是主動發(fā)送過來),以此來告訴我它的MAC地址。
(1)網(wǎng)絡(luò)環(huán)境搭建
但是在總結(jié)什么時候?qū)Ψ綍鲃影岩粋€ARP響應(yīng)包發(fā)送過來之前,我們先實踐一下,網(wǎng)絡(luò)環(huán)境還是用上面的那個:
不過我們需要修改一下R2的IP地址,修改為192.168.1.252(在這個過程中抓包軟件Wireshark要打開),如下:
R2>en R2#conf t R2(config)#int f0/0 R2(config-if)#ip add 192.168.1.252 255.255.255.0
(2)抓取并分析ARP請求包和ARP響應(yīng)包
這樣做之后打開Wireshark軟件,會發(fā)現(xiàn)抓到下面這樣一個包:
可以看到Info一列,有個Gratutous的標(biāo)識,中文意思就是“無償,免費”的意思,我們可以查看一下數(shù)據(jù)包的結(jié)構(gòu):
通過查看操作字段Opcode的值,其實可以發(fā)現(xiàn),無償ARP其實也是一個ARP響應(yīng)包(不過普通的ARP響應(yīng)包是以單播的形式發(fā)送的,而無償ARP是以廣播的形式發(fā)送的),只不過這個ARP響應(yīng)包比較特別,它是主動發(fā)送的,即它是gratuitous,無償?shù)摹?br/>
另外需要注意的是,發(fā)送端IP地址和目的IP地址是一樣,這正是無償ARP有別于普通ARP響應(yīng)包的地方,當(dāng)這個數(shù)據(jù)包被網(wǎng)絡(luò)中的其他主機(顯然我們這里的網(wǎng)絡(luò)環(huán)境比較簡單,所以只有R1)接收到之后,它會讓這些主機使用新的IP和MAC地址關(guān)系更新它們的ARP緩存表。因為這個ARP數(shù)據(jù)包是未經(jīng)請求的,即導(dǎo)致客戶端更新ARP緩存,所以會稱為無償ARP。
在分析了無償ARP之后,給出下面的幾種情況,都會有無償ARP過程的發(fā)生:
a.更改了設(shè)備的IP地址
b.某些操作系統(tǒng)在啟動完成之后就會發(fā)送無償ARP(Windows和Linux都會)
(3)IP地址沖突檢測
再分析一下,無償ARP有什么好處呢?如下:
a.可以讓以太網(wǎng)中的主機及時地更新其ARP緩存表,這樣可以確保在數(shù)據(jù)發(fā)送時可以準(zhǔn)確地封閉正確的地址信息
b.檢測IP地址是否有沖突
關(guān)于這一點,可以給R2重新配置一個IP地址,并且與R1的相同:
R2>en R2#conf t R2(config)#int f0/0 R2(config-if)#ip add 192.168.1.1 255.255.255.0
幾乎馬上就可以在R1和R2的控制臺上看到錯誤日志的輸出:
R1> *Mar 1 00:54:39.007: %IP-4-DUPADDR: Duplicate address 192.168.1.1 on FastEthernet0/0, sourced by cc02.1a18.0000 *Mar 1 00:55:09.043: %IP-4-DUPADDR: Duplicate address 192.168.1.1 on FastEthernet0/0, sourced by cc02.1a18.0000 *Mar 1 00:55:39.739: %IP-4-DUPADDR: Duplicate address 192.168.1.1 on FastEthernet0/0, sourced by cc02.1a18.0000 *Mar 1 00:56:10.011: %IP-4-DUPADDR: Duplicate address 192.168.1.1 on FastEthernet0/0, sourced by cc02.1a18.0000 *Mar 1 00:56:40.715: %IP-4-DUPADDR: Duplicate address 192.168.1.1 on FastEthernet0/0, sourced by cc02.1a18.0000 *Mar 1 00:57:10.947: %IP-4-DUPADDR: Duplicate address 192.168.1.1 on FastEthernet0/0, sourced by cc02.1a18.0000 R2(config-if)# *Mar 1 00:45:48.135: %IP-4-DUPADDR: Duplicate address 192.168.1.1 on FastEthernet0/0, sourced by cc01.127f.0000 *Mar 1 00:46:18.623: %IP-4-DUPADDR: Duplicate address 192.168.1.1 on FastEthernet0/0, sourced by cc01.127f.0000 *Mar 1 00:46:48.927: %IP-4-DUPADDR: Duplicate address 192.168.1.1 on FastEthernet0/0, sourced by cc01.127f.0000 *Mar 1 00:47:19.651: %IP-4-DUPADDR: Duplicate address 192.168.1.1 on FastEthernet0/0, sourced by cc01.127f.0000 *Mar 1 00:47:49.959: %IP-4-DUPADDR: Duplicate address 192.168.1.1 on FastEthernet0/0, sourced by cc01.127f.0000 *Mar 1 00:48:21.623: %IP-4-DUPADDR: Duplicate address 192.168.1.1 on FastEthernet0/0, sourced by cc01.127f.0000 *Mar 1 00:48:51.919: %IP-4-DUPADDR: Duplicate address 192.168.1.1 on FastEthernet0/0, sourced by cc01.127f.0000
這里因為在修改了R2的IP地址時,它發(fā)送了無償ARP包,R1通過檢查發(fā)現(xiàn)其IP地址跟自己的一樣,于是就會在控制臺上報錯,但是R2為什么又會報錯呢?因為在R1發(fā)現(xiàn)地址有沖突時,也發(fā)送了表示IP地址沖突的無償ARP包,如下:
注意這是一個廣播包,所以R2必然也能收到,查看它的包結(jié)構(gòu):
根據(jù)數(shù)據(jù)包的內(nèi)容,R2也知道發(fā)生了IP地址沖突,所以也就會在控制臺上輸出錯誤日志了。
4.在實踐中分析ARP的實現(xiàn)過程:ARP代理
如果ARP請求是從一個網(wǎng)絡(luò)的主機發(fā)往另一個網(wǎng)絡(luò)上的主機,那么連接這兩個網(wǎng)絡(luò)的路由器就可以回答這個請求,這個過程就稱為ARP代理。這是非常精簡和通俗易懂的解釋,我們可以通過下面的實踐來進行體會。
(1)網(wǎng)絡(luò)環(huán)境搭建
如下:
在前面的基礎(chǔ)上,R1增加如下配置:
R1>en R1#conf t R1(config)#ip route 0.0.0.0 0.0.0.0 f0/0
R2增加如下配置:
R2>en R2#conf t R2(config)#int f1/0 R2(config-if)#no shu R2(config-if)#ip add 192.168.2.2 255.255.255.0 R2(config-if)#do wr
R3則配置如下:
R3>en R3#conf t R3(config)#int f0/0 R3(config-if)#no shu R3(config-if)#ip add 192.168.2.3 255.255.255.0 R3(config-if)#ip route 0.0.0.0 0.0.0.0 f0/0 R3(config-if)#do wr
(2)抓取ARP包并分析ARP代理過程
在R1和R2的鏈路上啟動Wireshark,然后在R1上執(zhí)行如下命令:
R1#ping 192.168.2.3 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 192.168.2.3, timeout is 2 seconds: ...!! Success rate is 40 percent (2/5), round-trip min/avg/max = 36/50/64 ms
即R1給R3發(fā)送數(shù)據(jù),我們查看抓到的包:
再分別查看詳細的包結(jié)構(gòu):
ARP請求包
可以看到ARP請求包跟平常一樣,并沒有什么區(qū)別,即R1希望知道192.168.2.3的MAC地址。
ARP響應(yīng)包
看起來普通的ARP響應(yīng)包也沒有什么區(qū)別,其實真的是沒有什么區(qū)別,但不妨在R2上執(zhí)行下面的命令,查看一下ARP緩存表:
R2#sh arp Protocol Address Age (min) Hardware Addr Type Interface Internet 192.168.1.1 3 cc01.127f.0000 ARPA FastEthernet0/0 Internet 192.168.2.2 - cc02.1a18.0010 ARPA FastEthernet1/0 Internet 192.168.2.3 3 cc03.2327.0000 ARPA FastEthernet1/0 Internet 192.168.1.2 - cc02.1a18.0000 ARPA FastEthernet0/0
在這個ARP緩存表中,192.168.2.3對應(yīng)的MAC地址是cc03.2327.0000,并不是上面看到的數(shù)據(jù)包結(jié)構(gòu)中的cc02.1a18.0000?。。c02.1a18.0000是192.168.1.2對應(yīng)的MAC地址?。。】梢苑治鋈缦拢?/p>
拓展1: R1想要知道192.168.2.3的MAC地址,于是發(fā)送ARP請求包,但很顯然,192.168.2.3跟192.168.1.1并不在同一個網(wǎng)絡(luò)中;當(dāng)192.168.1.2接口接收到這個ARP請求包時,R2發(fā)現(xiàn)雖然192.168.2.3并不是自己,但是它可以到達192.168.2.3所在的網(wǎng)絡(luò),即192.168.2.0/24這個網(wǎng)絡(luò),于是它就向R1發(fā)回了一個ARP響應(yīng)包,告訴R1,192.168.2.3的MAC地址是自己(即配置了192.168.1.2的接口的MAC地址)。雖然這是一種“謊言”,但由于這樣做確實是可以幫R1把數(shù)據(jù)發(fā)送到R3,所以有時候我們也把ARP代理稱作“善意的謊言”。 拓展2: 這也意味著,即使R1知道192.168.2.3跟自己在不同的網(wǎng)絡(luò),它也不會直接就說去請求網(wǎng)關(guān)的MAC地址(雖然最終數(shù)據(jù)肯定是先發(fā)往網(wǎng)關(guān)的),而是還會像平常請求同網(wǎng)段IP地址的MAC地址一樣,去發(fā)送一個普通的ARP請求,這點尤其需要注意。 拓展3: 我們說,如果數(shù)據(jù)是發(fā)往不同的網(wǎng)絡(luò)的,那么應(yīng)該先把數(shù)據(jù)發(fā)給網(wǎng)關(guān),那么上面為什么不是這樣的呢?那是因為,我在配置R1的默認路由時,是以出接口的方式進行配置的,那也就意味著,并沒有所謂的網(wǎng)關(guān),即不知道網(wǎng)關(guān)是誰,既然如果,R1又怎么能夠直接去請求網(wǎng)關(guān)的MAC地址呢?對它來說,根本就沒有網(wǎng)關(guān)!但是又因為配置了默認路由,去往未知網(wǎng)絡(luò)的數(shù)據(jù)都直接從1.1的接口發(fā)送出去,所以它是直接去請求目的IP地址的MAC地址,然后才有了后來的ARP代理過程的發(fā)生。當(dāng)然,如果配置的是網(wǎng)關(guān)(在思科路由器上的配置是:ip route 0.0.0.0 0.0.0.0 下一跳即網(wǎng)關(guān)地址),則會按照正常的流程走,即沒有代理ARP過程的發(fā)生。 這一點對于數(shù)據(jù)轉(zhuǎn)發(fā)的深入理解是非常重要的,當(dāng)然,如果覺得難以理解的,也不用太擔(dān)心,這個需要一定時間的積累,同時自己也要注重思考,在實際的學(xué)習(xí)過程當(dāng)中不能囫圇吞棗,要想有深入的理解,就必須要做深入的分析。 |
那么通過上面的實踐過程和分析之后也就非常清楚什么是ARP代理了。即如果ARP請求是從一個網(wǎng)絡(luò)的主機發(fā)往另一個網(wǎng)絡(luò)上的主機,那么連接這兩個網(wǎng)絡(luò)的路由器就可以回答這個請求,這個過程就稱為ARP代理。
“ARP協(xié)議怎么使用”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。