日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

图解ARP协议(四)代理ARP原理与实践(“善意的欺骗”)

發(fā)布時間:2024/9/3 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 图解ARP协议(四)代理ARP原理与实践(“善意的欺骗”) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、代理ARP概述

我:當電腦要訪問互聯(lián)網(wǎng)上的服務器,目標MAC是什么?

很多小伙伴在剛學習網(wǎng)絡協(xié)議的時候,經(jīng)常這樣直接回應:不就是服務器的MAC嘛!

?

這時我會反問:那電腦怎么拿到這個服務器的MAC地址呢?

小伙伴一般都自信的拋出下面兩個點:

①根據(jù)網(wǎng)絡通信中數(shù)據(jù)封裝的原則,通信雙方需要封裝源目IP和MAC地址;

②如果要拿到目標MAC地址,就需要通過ARP協(xié)議進行交互。

?

我:好,確實沒毛病,你是指的下面這個意思吧 ==>

?

?

小伙伴:對對對,是這個意思的。

我:好,你再看看下面這個圖,再確認下。

?

?

小伙伴:好像不太對唉,剛才沒注意看...... 互聯(lián)網(wǎng)這么多路由器,根據(jù)之前學過的:

①路由器隔離廣播域,每個接口/網(wǎng)段都是獨立的廣播域;

②ARP請求是二層廣播包,廣播包沒法過路由器,

這樣的話,ARP請求廣播包根本沒法穿越互聯(lián)網(wǎng)到達目標服務器。

?

我:那我們平常上微博逛知乎去京東剁手基本都依據(jù)上面這張圖,通過DNS協(xié)議將域名解析為IP地址,通過ARP協(xié)議將IP解析為MAC地址。現(xiàn)在ARP請求無法穿越過去,電腦便無法獲取目標服務器的MAC地址,怎么跟它通信呢?

小伙伴:。。。。。。

?

上面這個疑惑,我相信每個學習網(wǎng)絡協(xié)議的初學者經(jīng)常會問到,更普遍的情況是,很多工作多年的工程師,也未必能夠?qū)⑾旅孢@幾個問題完全搞清楚:

?

①電腦訪問互聯(lián)網(wǎng)服務器的時候,ARP詢問的內(nèi)容,真的是問服務器的嗎?

②什么是代理ARP?跟ARP有什么區(qū)別?什么場景下會用到代理ARP?

③代理ARP跟網(wǎng)關(默認路由)設置有什么關系?

?

所以,這一篇文章雖然是講代理ARP,但其實核心內(nèi)容是圍繞代理ARP,解讀跨網(wǎng)段通信過程中,ARP/代理ARP/網(wǎng)關(默認路由)/數(shù)據(jù)封裝等相關問題

?

?

二、代理ARP原理

當ARP請求目標跨網(wǎng)段時,網(wǎng)關設備收到此ARP請求,會用自己的MAC地址返回給請求者,這便是代理ARP(Proxy ARP)。

?

上面這張圖中,電腦發(fā)送ARP請求服務器8.8.8.8的MAC地址,路由器(網(wǎng)關)收到這個請求時會進行判斷,由于目標8.8.8.8不屬于本網(wǎng)段(即跨網(wǎng)段),此時便返回自己的接口MAC地址給PC,后續(xù)電腦訪問服務器時,目標MAC直接封裝為MAC254。

?

代理ARP本質(zhì)是一個"善意的欺騙",是一個"錯位"的映射。從圖中我們看到服務器地址的正常映射是<8.8.8.8-MAC2>,而路由器返回給電腦的,卻是 <8.8.8.8-MAC254>。不管是不是"欺騙",至少最終電腦可以與外網(wǎng)的服務器實現(xiàn)通信,以PC Ping Server為例=>

?

實際網(wǎng)絡中,代理ARP由網(wǎng)絡中的網(wǎng)關設備來執(zhí)行,包括路由器、多層交換機、無線路由器、防火墻等設備。并且,網(wǎng)關即便有代理ARP功能,也未必一定執(zhí)行,還必須滿足兩個條件:①網(wǎng)關已經(jīng)開啟代理ARP功能;②網(wǎng)關有目標的路由信息。我們來看下面這張圖=>

?

?

上面這張圖中,我們假設路由器已具備全網(wǎng)的路由,但連接電腦的接口沒有開啟(或不支持)代理ARP功能,此時便造成一個尷尬的情況:電腦反復詢問到8.8.8.8的MAC地址,路由器收到之后,處理流程跟正常ARP是一致的,"問自己的回復,不是問自己的丟棄"。因此,當網(wǎng)絡通信采用代理ARP時,可能會"受制于沿途網(wǎng)關設備",造成網(wǎng)絡通信故障

?

進一步思考:既然代理ARP不是一種特別流暢的實現(xiàn),會"受限于別人",那我們沒必要一定要使用它。甚至,這里我們需要搞清一個事實:實際網(wǎng)絡中,無論是同網(wǎng)段還是跨網(wǎng)段通信(例如訪問互聯(lián)網(wǎng)),絕大情況下都是使用正常的ARP,而不是代理ARP。生活中的上網(wǎng)的經(jīng)驗也已經(jīng)告訴我們,好像從來沒有遇到或聽到過"XXX設備不支持代理ARP功能,導致通信故障"這樣的問題。

?

很多小伙伴看到這里,會有大大的疑惑:

① "什么! 我們才剛學習了代理ARP的實現(xiàn)原理,現(xiàn)在居然告訴說它沒怎么用?"

② 那為什么要創(chuàng)造代理ARP,它的真正使用場景在哪里??

③ 上述圖解中,電腦跨網(wǎng)段通信時ARP到底是如何工作的???

?

接下來給大家劃重點:

第一,代理ARP僅僅是正常ARP的一個拓展使用,是可選項而不是必要項;

第二:代理ARP有特定的應用場景,與網(wǎng)關/路由的設置有直接關系:當電腦沒有網(wǎng)關/路由功能時,并且需要跨網(wǎng)站通信時,則會觸發(fā)代理ARP。換句話說,如果有網(wǎng)關/路由功能,則不需要代理ARP;

第三:正常環(huán)境下,當用戶接入網(wǎng)絡時,都會通過DHCP協(xié)議或手工配置的方式得到IP和網(wǎng)關信息(所以不需要代理ARP)。

?

?

三、ARP與代理ARP:不是互斥而是互補

在大家理解了代理ARP的工作原理和應用場景之后,接下來我們終于可以更加全面的分析開篇的這個經(jīng)典問題:當用戶訪問互聯(lián)網(wǎng)的時候,到底用ARP還是代理ARP?跟網(wǎng)關/路由設置有什么關系?數(shù)據(jù)封裝又有什么區(qū)別?

?

我們通過下面兩張圖做個對比=>

?

當電腦沒有網(wǎng)關時,PC Ping 8.8.8.8,采用代理ARP =>

?

?

當電腦有網(wǎng)關時,PC Ping 8.8.8.8,采用正常ARP =>

?

通過上面的對比,我們得到以下信息:

①電腦沒有網(wǎng)關時,ARP直接詢問目標IP對應的MAC地址(跨網(wǎng)段),采用代理ARP;

②電腦有網(wǎng)關時,ARP只需詢問網(wǎng)關IP對應的MAC地址(同網(wǎng)段),采用正常ARP;

③無論是正常ARP還是代理ARP,電腦最終都拿到同一個目標MAC地址:網(wǎng)關MAC。

?

為了讓上面這個總結更加的通用性,我們將原有的網(wǎng)絡拓撲稍微復雜化 =>

?

當電腦沒有網(wǎng)關時(采用代理ARP ),PC 依次Ping 8.8.8.8、8.8.4.4、114.114.114.114=>?

?

當電腦有網(wǎng)關時(采用正常ARP ),PC 依次Ping 8.8.8.8、8.8.4.4、114.114.114.114=>

?

通過上面的拓撲,我們可以得到更加通用性的總結,歸納如下:

①當電腦沒有網(wǎng)關(采用代理ARP)時:"跨網(wǎng)段訪問誰,就問誰的MAC"

②當電腦有網(wǎng)關(采用正常ARP)時:"跨網(wǎng)段訪問誰,都問網(wǎng)關的MAC"

③無論哪種ARP,跨網(wǎng)段通信時,發(fā)送方請求得到的目標MAC地址都是網(wǎng)關MAC。

?

注明:網(wǎng)關(Gateway)、下一跳(Next-hop)、路由器(Router)都指的是離發(fā)送方最近的三層(或多層)設備,具備三層和路由轉發(fā)功能。舉例:我們通過WiFi上網(wǎng)時,網(wǎng)關就是無線路由器,它幫忙將電腦和手機的數(shù)據(jù)轉發(fā)到互聯(lián)網(wǎng);所以,我們訪問互聯(lián)網(wǎng)時(無論訪問誰),電腦和手機采用的目的MAC,都是無線路由器的MAC。有興趣的小伙伴都可以跟著我驗證下(請見下面章節(jié))。

?

?

四、ARP與代理ARP實戰(zhàn)指南

為了讓大家更直觀理解,真正"親眼所見"上面學到的技術原理,這里我?guī)Т蠹?strong>在真實網(wǎng)絡和虛擬環(huán)境分別驗證。第一個實驗,主要是針對沒任何命令基礎的小伙伴,大家可以在家就可以實驗;第二個實驗,主要針對有一定網(wǎng)絡和安全基礎的小伙伴,通過構造網(wǎng)絡虛擬實驗環(huán)境來驗證。

?

(一)真實網(wǎng)絡下ARP與代理ARP實驗

?

這個網(wǎng)絡中,我的電腦地址是192.168.199.177,連接到極路由(無線路由器),通過極路由器訪問互聯(lián)網(wǎng)。這個WiFi網(wǎng)絡的主機列表情況如下,這里的PC就是我的Macbook。

?

?

接下來再看看極路由MAC地址=>

?

?

查看我的電腦(Macox系統(tǒng))IP地址和網(wǎng)關信息,通過命令"ifconfig"查看ip地址=>(Windows系統(tǒng)則通過"ipconfig /all"查看IP地址和網(wǎng)關信息)

?

?

通過命令"netstat -rn"查看我的電腦網(wǎng)關設置=>

?

?

接下來,我的電腦連續(xù)PING 8.8.8.8和114.114.114.114或其他外網(wǎng)地址=>

?

?

重點來了,在我的電腦連續(xù)訪問這么多外網(wǎng)地址之后,我們來看看ARP表項是怎樣的,是否有8.8.8.8、114.114.114.114、www.pinginglab.net(120.24.59.68)對應的MAC呢?

?

通過命令"arp -a"查看電腦的ARP緩存信息=>

?

從最終的ARP內(nèi)容來看,我的電腦只記錄著本機和網(wǎng)關的MAC地址,MAC地址"d4:ee-07:54:c1:9e"就是上面給大家截圖的極路由MAC。

?

?

通過這個真實網(wǎng)絡的實驗,我們可以驗證了以下內(nèi)容:

①真實網(wǎng)絡中一般都是正常ARP,而不是代理ARP;

②當電腦有網(wǎng)關(采用正常ARP)時,無論跨網(wǎng)段訪問誰,都直接問網(wǎng)關的MAC;

③當?shù)谝淮潍@取網(wǎng)關MAC之后,后續(xù)的通信都不再需要重新進行ARP請求。(這個是比較容易忽略的,而代理ARP每次訪問新的外網(wǎng)地址,都需要再次請求)

?

?

(二)虛擬環(huán)境下ARP與代理ARP實驗

網(wǎng)絡拓撲采用GNS3搭建,采用C3640操作系統(tǒng)鏡像=>

?

① 首先為各個設備打開接口并配置IP地址:

PC(config)#int f0/0

PC(config-if)#no shutdown

PC(config-if)#ip address 192.168.1.1 255.255.255.0

Router(config)#int f0/0

Router(config-if)#no shutdown

Router(config-if)#ip address 192.168.1.254 255.255.255.0

Router(config-if)#int f1/0

Router(config-if)#no shutdown

Router(config-if)#ip address 8.8.8.1 255.255.255.0

Server(config)#int f0/0

Server(config-if)#no shutdown

Server(config-if)#ip address 8.8.8.8 255.255.255.0

?

②為各個設備設置路由信息:

a.關閉PC上路由功能,模擬主機并查看路由表(此時的電腦沒有設置網(wǎng)關)

PC(config)#no ip routing

PC#show ip route

Default gateway is not set

Host?????????????? Gateway?????????? Last Use??? Total Uses? Interface

b.設置并查看Router和Server路由表,保證聯(lián)通,模擬互聯(lián)網(wǎng)(這里Router已有全網(wǎng)的直連路由,Server需要設置返回內(nèi)網(wǎng)的路由;實際環(huán)境應該通過NAT返回,這里不再深入)

?

Router#show ip route

Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP

?????? D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area

?????? N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2

?????? E1 - OSPF external type 1, E2 - OSPF external type 2

?????? i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2

?????? ia - IS-IS inter area, * - candidate default, U - per-user static route

?????? o - ODR, P - periodic downloaded static route

?

Gateway of last resort is not set

?

???? 8.0.0.0/24 is subnetted, 1 subnets

C?????? 8.8.8.0 is directly connected, FastEthernet1/0

C??? 192.168.1.0/24 is directly connected, FastEthernet0/0

?

Server(config)#ip route 192.168.1.0 255.255.255.0 8.8.8.1

Server#show ip route

Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP

?????? D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area

?????? N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2

?????? E1 - OSPF external type 1, E2 - OSPF external type 2

?????? i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2

?????? ia - IS-IS inter area, * - candidate default, U - per-user static route

?????? o - ODR, P - periodic downloaded static route

?

Gateway of last resort is not set

?

???? 8.0.0.0/24 is subnetted, 1 subnets

C?????? 8.8.8.0 is directly connected, FastEthernet0/0

S??? 192.168.1.0/24 [1/0] via 8.8.8.1

?

③查看PC/Router/Server的接口MAC地址:

PC#show int f0/0

FastEthernet0/0 is up, line protocol is up

? Hardware is AmdFE, address is?cc05.1f56.0000 (bia cc05.1f56.0000)

? Internet address is 192.168.1.1/24

Router#show int f0/0

FastEthernet0/0 is up, line protocol is up

? Hardware is AmdFE, address is?cc07.1f56.0000 (bia cc07.1f56.0000)

? Internet address is 192.168.1.254/24

Router#show int f1/0

FastEthernet1/0 is up, line protocol is up

? Hardware is AmdFE, address is?cc07.1f56.0010 (bia cc07.1f56.0010)

? Internet address is 8.8.8.1/24

Server#show int f0/0

FastEthernet0/0 is up, line protocol is up

? Hardware is AmdFE, address is?cc06.1f56.0000 (bia cc06.1f56.0000)

? Internet address is 8.8.8.8/24

?

④通過Wireshark抓取PC和Router鏈路的數(shù)據(jù)包,并讓PC ping Server(8.8.8.8),查看ARP問答信息:

?

PC#ping 8.8.8.8

Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 8.8.8.8, timeout is 2 seconds:

.!!!!?? (一個ping來回為一個 ! 標識,而第一個點 . 代表此時正在arp)

Success rate is 80 percent (4/5), round-trip min/avg/max = 44/47/48 ms

?

?

從數(shù)據(jù)包可以看到,由于PC沒有設置默認網(wǎng)關,所以直接采用代理ARP方式詢問:即直接詢問跨網(wǎng)段目的8.8.8.8的IP地址。而由于路由器Router默認開啟了代理ARP功能,所以直接用自己的MAC地址回應了。這里的cc:07:1f:56:00:00即路由器的MAC地址。這里順便查看下PC的arp表:

?

PC#show arp

Protocol? Address????????? Age (min)? Hardware Addr?? Type?? Interface

Internet? 8.8.8.8???????????????? 9?? cc07.1f56.0000? ARPA?? FastEthernet0/0

Internet? 192.168.1.1???????????? -?? cc05.1f56.0000? ARPA?? FastEthernet0/0

?

因此,這里便驗證了:當電腦沒有設置網(wǎng)關信息,則采用代理ARP。

我們接著驗證另外一個點:當采用代理ARP時,會"受限于沿途網(wǎng)關設備",例如網(wǎng)關設備(路由器)可能不支持代理ARP或關閉代理ARP功能,此時電腦就無法與外網(wǎng)IP實現(xiàn)通信

?

怎么驗證呢?這里我們需要關閉路由器接口的代理ARP功能,并且清空電腦PC的arp表=>

Router(config)#int f0/0

Router(config-if)#no ip proxy-arp

PC#clear arp

PC#ping 8.8.8.8

Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 8.8.8.8, timeout is 2 seconds:

.....

Success rate is 0 percent (0/5)

?

查看底層數(shù)據(jù)包交互過程=>

?

?

當路由器關閉代理ARP時,此時電腦"苦苦哀求"外網(wǎng)8.8.8.8的MAC地址,而路由器直接丟棄不再返回,由于電腦沒有目標IP對應的MAC信息,所以通信失敗,即 ?......?我們來看下此時PC的arp表是怎樣的=>

?

PC#show arp

Protocol? Address????????? Age (min)? Hardware Addr?? Type?? Interface

Internet? 8.8.8.8???????????????? 0?? Incomplete????? ARPA??

Internet? 192.168.1.1???????????? -?? cc05.1f56.0000? ARPA?? FastEthernet0/0

?

⑤為PC設置默認網(wǎng)關,重新ping 8.8.8.8,看看能不能通=>

PC(config)#ip default-gateway 192.168.1.254

PC#ping 8.8.8.8

Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 8.8.8.8, timeout is 2 seconds:

!!!!!

Success rate is 100 percent (5/5), round-trip min/avg/max = 44/244/1040 ms

?

可以看到,當電腦具備網(wǎng)關信息之后,此時直接采用ARP詢問網(wǎng)關的MAC,即去往8.8.8.8的時候直接詢問192.168.1.254的MAC,這個時候不管Router有沒有開啟代理ARP,也會正常回應PC的ARP詢問,我們來看看底層數(shù)據(jù)包截圖=>

?

?

四、代理ARP總結

① 本章節(jié)我們深入學習了代理ARP的原理和實踐,在文章的開頭,我們通過一個引子,幫大家矯正一個誤區(qū):跨網(wǎng)段通信時,就一定要用到代理ARP;

②代理ARP是一個"善意的欺騙",當電腦要跨網(wǎng)段訪問外網(wǎng)設備時,網(wǎng)關設備用自己的MAC返回;

③代理ARP和ARP的具體實現(xiàn),跟電腦是否有設置網(wǎng)關有直接的關系;有網(wǎng)關通過ARP,沒網(wǎng)關通過代理ARP;代理ARP可以看成是ARP的補充;

④代理ARP會"受限于沿途網(wǎng)絡設備",真實網(wǎng)絡里面一般都直接用ARP獲取MAC地址。

總結

以上是生活随笔為你收集整理的图解ARP协议(四)代理ARP原理与实践(“善意的欺骗”)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。