可以做h5的網(wǎng)站百度指數(shù)特點(diǎn)
什么是ARP
地址解析協(xié)議,即ARP(Address Resolution Protocol),是根據(jù)IP地址獲取物理地址的一個(gè)TCP/IP協(xié)議。主機(jī)發(fā)送信息時(shí)將包含目標(biāo)IP地址的ARP請求廣播到局域網(wǎng)絡(luò)上的所有主機(jī),并接收返回消息,以此確定目標(biāo)的物理地址;收到返回消息后將該IP地址和物理地址存入本機(jī)ARP緩存中并保留一定時(shí)間,下次請求時(shí)直接查詢ARP緩存以節(jié)約資源。地址解析協(xié)議是建立在網(wǎng)絡(luò)中各個(gè)主機(jī)互相信任的基礎(chǔ)上的,局域網(wǎng)絡(luò)上的主機(jī)可以自主發(fā)送ARP應(yīng)答消息,其他主機(jī)收到應(yīng)答報(bào)文時(shí)不會(huì)檢測該報(bào)文的真實(shí)性就會(huì)將其記入本機(jī)ARP緩存;
最直白的說法是:在IP以太網(wǎng)中,當(dāng)一個(gè)上層協(xié)議要發(fā)包時(shí),有了該節(jié)點(diǎn)的IP地址,ARP就能提供該節(jié)點(diǎn)的MAC地址。
大家都知道,OSI模式把網(wǎng)絡(luò)工作分為七層,彼此不直接打交道,只通過接口(layre interface). IP地址在第三層(網(wǎng)絡(luò)層), MAC地址在第二層(數(shù)據(jù)鏈路層)。協(xié)議在發(fā)送數(shù)據(jù)包時(shí),首先要封裝第三層(IP地址)和第二層 (MAC地址)的報(bào)頭, 但協(xié)議只知道目的節(jié)點(diǎn)的IP地址,不知道其物理地址,又不能跨第二、三層,所以得用ARP的服務(wù)拿到MAC地址。
ARP工作過程
假設(shè)主機(jī)A和B在同一個(gè)網(wǎng)段,主機(jī)A要向主機(jī)B發(fā)送信息,具體的地址解析過程如下:
- 主機(jī)A首先查看自己的ARP緩存表,確定其中是否包含有主機(jī)B對應(yīng)的ARP表項(xiàng)。如果找到了對應(yīng)的MAC地址,則主機(jī)A直接利用ARP表中的MAC地址,對IP數(shù)據(jù)包進(jìn)行幀封裝,并將數(shù)據(jù)包發(fā)送給主機(jī)B。
- 如果主機(jī)A在ARP表中找不到對應(yīng)的MAC地址,則將緩存該數(shù)據(jù)報(bào)文,然后以廣播方式發(fā)送一個(gè)ARP請求報(bào)文。ARP請求報(bào)文中的發(fā)送端IP地址和發(fā)送端MAC地址為主機(jī)A的IP地址和MAC地址,目標(biāo)IP地址和目標(biāo)MAC地址為主機(jī)B的IP地址和全0的MAC地址。由于ARP請求報(bào)文以廣播方式發(fā)送,該網(wǎng)段上的所有主機(jī)都可以接收到該請求,但只有被請求的主機(jī)(即主機(jī)B)會(huì)對該請求進(jìn)行處理。
- 主機(jī)B比較自己的IP地址和ARP請求報(bào)文中的目標(biāo)IP地址,當(dāng)兩者相同時(shí)進(jìn)行如下處理:將ARP請求報(bào)文中的發(fā)送端(即主機(jī)A)的IP地址和MAC地址存入自己的ARP表中。之后以單播方式發(fā)送ARP響應(yīng)報(bào)文給主機(jī)A,其中包含了自己的MAC地址。
- 主機(jī)A收到ARP響應(yīng)報(bào)文后,將主機(jī)B的MAC地址加入到自己的ARP表中以用于后續(xù)報(bào)文的轉(zhuǎn)發(fā),同時(shí)將IP數(shù)據(jù)包進(jìn)行封裝后發(fā)送出去。
當(dāng)主機(jī)A和主機(jī)B不在同一網(wǎng)段時(shí),主機(jī)A就會(huì)先向網(wǎng)關(guān)發(fā)出ARP請求,ARP請求報(bào)文中的目標(biāo)IP地址為網(wǎng)關(guān)的IP地址。當(dāng)主機(jī)A從收到的響應(yīng)報(bào)文中獲得網(wǎng)關(guān)的MAC地址后,將報(bào)文封裝并發(fā)給網(wǎng)關(guān)。如果網(wǎng)關(guān)沒有主機(jī)B的ARP表項(xiàng),網(wǎng)關(guān)會(huì)廣播ARP請求,目標(biāo)IP地址為主機(jī)B的IP地址,當(dāng)網(wǎng)關(guān)從收到的響應(yīng)報(bào)文中獲得主機(jī)B的MAC地址后,就可以將報(bào)文發(fā)給主機(jī)B;如果網(wǎng)關(guān)已經(jīng)有主機(jī)B的ARP表項(xiàng),網(wǎng)關(guān)直接把報(bào)文發(fā)給主機(jī)B。
ARP緩存表和TTL
ARP表
網(wǎng)絡(luò)設(shè)備一般都有一個(gè)ARP緩存(ARP Cache),ARP緩存用來存放IP地址和MAC地址的關(guān)聯(lián)信息。在發(fā)送數(shù)據(jù)前,設(shè)備會(huì)先查找ARP緩存表。如果緩存表中存在對方設(shè)備的MAC地址,則直接采用該MAC地址來封裝幀,然后將幀發(fā)送出去。如果緩存表中不存在相應(yīng)的信息,則通過發(fā)送ARP request報(bào)文來獲得它。學(xué)習(xí)到的IP地址和MAC地址的映射關(guān)系會(huì)被放入ARP緩存表中存放一段時(shí)間。在有效期內(nèi),設(shè)備可以直接從這個(gè)表中查找目的MAC地址來進(jìn)行數(shù)據(jù)封裝,而無需進(jìn)行ARP查詢。過了這段有效期,ARP表現(xiàn)會(huì)被自動(dòng)刪除。如果目標(biāo)設(shè)備位于其他網(wǎng)絡(luò)則源設(shè)備會(huì)在ARP緩存表中查找網(wǎng)關(guān)的MAC地址,然后將數(shù)據(jù)發(fā)送給網(wǎng)關(guān),網(wǎng)關(guān)再把數(shù)據(jù)轉(zhuǎn)發(fā)給目的設(shè)備。
ARP表項(xiàng)又分為動(dòng)態(tài)ARP表項(xiàng)和靜態(tài)ARP表項(xiàng)。
動(dòng)態(tài)ARP表項(xiàng)
動(dòng)態(tài)ARP表項(xiàng)由ARP協(xié)議通過ARP報(bào)文自動(dòng)生成和維護(hù),可以被老化,可以被新的ARP報(bào)文更新,可以被靜態(tài)ARP表項(xiàng)覆蓋。每個(gè)動(dòng)態(tài)ARP緩存項(xiàng)的潛在生命周期是10分鐘。新加到緩存中的項(xiàng)目帶有時(shí)間戳,如果某個(gè)項(xiàng)目添加后2分鐘內(nèi)沒有再使用,則此項(xiàng)目過期并從ARP緩存中刪除;如果某個(gè)項(xiàng)目已在使用,則又收到2分鐘的生命周期;如果某個(gè)項(xiàng)目始終在使用,則會(huì)另外收到2分鐘的生命周期,一直到10分鐘的最長生命周期。
靜態(tài)ARP表項(xiàng)
靜態(tài)ARP表項(xiàng)通過手工配置和維護(hù),不會(huì)被老化,不會(huì)被動(dòng)態(tài)ARP表項(xiàng)覆蓋。直到重新啟動(dòng)計(jì)算機(jī)為止。
配置靜態(tài)ARP表項(xiàng)可以增加通信的安全性。靜態(tài)ARP表項(xiàng)可以限制和指定IP地址的設(shè)備通信時(shí)只使用指定的MAC地址,此時(shí)攻擊報(bào)文無法修改此表項(xiàng)的IP地址和MAC地址的映射關(guān)系,從而保護(hù)了本設(shè)備和指定設(shè)備間的正常通信。
靜態(tài)ARP表項(xiàng)分為短靜態(tài)ARP表項(xiàng)和長靜態(tài)ARP表項(xiàng)。
- 在配置長靜態(tài)ARP表項(xiàng)時(shí),除了配置IP地址和MAC地址項(xiàng)外,還必須配置該ARP表項(xiàng)所在VLAN和出接口。長靜態(tài)ARP表項(xiàng)可以直接用于報(bào)文轉(zhuǎn)發(fā)。
- 在配置短靜態(tài)ARP表項(xiàng)時(shí),只需要配置IP地址和MAC地址項(xiàng)。如果出接口是三層以太網(wǎng)接口,短靜態(tài)ARP表項(xiàng)可以直接用于報(bào)文轉(zhuǎn)發(fā);如果出接口是VLAN虛接口,短靜態(tài)ARP表項(xiàng)不能直接用于報(bào)文轉(zhuǎn)發(fā),當(dāng)要發(fā)送IP數(shù)據(jù)包時(shí),先發(fā)送ARP請求報(bào)文,如果收到的響應(yīng)報(bào)文中的源IP地址和源MAC地址與所配置的IP地址和MAC地址相同,則將接收ARP響應(yīng)報(bào)文的接口加入該靜態(tài)ARP表項(xiàng)中,之后就可以用于IP數(shù)據(jù)包的轉(zhuǎn)發(fā)。
一般情況下,ARP動(dòng)態(tài)執(zhí)行并自動(dòng)尋求IP地址到以太網(wǎng)MAC地址的解析,無需管理員的介入。
當(dāng)希望設(shè)備和指定用戶只能使用某個(gè)固定的IP地址和MAC地址通信時(shí),可以配置短靜態(tài)ARP表項(xiàng),當(dāng)進(jìn)一步希望限定這個(gè)用戶只在某VLAN內(nèi)的某個(gè)特定接口上連接時(shí)就可以配置長靜態(tài)ARP表項(xiàng)。
ARP報(bào)文格式
在局域網(wǎng)中,當(dāng)主機(jī)或其它網(wǎng)絡(luò)設(shè)備有數(shù)據(jù)要發(fā)送給另一個(gè)主機(jī)或設(shè)備時(shí),它必須知道對方的網(wǎng)絡(luò)層地址(即IP地址)。但是僅僅有IP地址是不夠的,因?yàn)镮P數(shù)據(jù)報(bào)文必須封裝成幀才能通過物理網(wǎng)絡(luò)發(fā)送,因此發(fā)送站還必須有接收站的物理地址,所以需要一個(gè)從IP地址到物理地址的映射。APR就是實(shí)現(xiàn)這個(gè)功能的協(xié)議。
ARP協(xié)議是通過報(bào)文進(jìn)行工作的,是一個(gè)獨(dú)立的三層協(xié)議,所以ARP報(bào)文在向數(shù)據(jù)鏈路層傳輸時(shí)不需要經(jīng)過IP協(xié)議的封裝,而是直接生成自己的報(bào)文,其中包括ARP報(bào)頭,到數(shù)據(jù)鏈路層后再由對應(yīng)的數(shù)據(jù)鏈路層協(xié)議(如以太網(wǎng)協(xié)議)進(jìn)行封裝。ARP報(bào)文分為ARP請求和ARP應(yīng)答報(bào)文兩種,它們的報(bào)文格式可以統(tǒng)一為下圖所示。
前面Ethernet Address of destination, Ethernet Address of sender 和 Frame Type屬于數(shù)據(jù)鏈路層的封裝,往后的就是真正的ARP報(bào)文數(shù)據(jù)結(jié)構(gòu)。
ARP請求
下面是Wireshark抓的ARP請求報(bào)文,大家可以看到數(shù)據(jù)鏈路層的Ethernet Address of destination是全ff,說明這是一個(gè)廣播包,是為了獲取指定IP的MAC地址,可以看到ARP包中的Target IP address是192.168.0.7,但Target MAC address是全0,說明當(dāng)前還不知道目標(biāo)主機(jī)的MAC地址,Opcode為1,說明這是一個(gè)ARP請求報(bào)文。
?
ARP響應(yīng)
下面是Wireshark抓的ARP響應(yīng)報(bào)文,大家參照上面的報(bào)文格式解析一下咯:
?
免費(fèi)ARP
免費(fèi) ARP(Gratuitous ARP)包是一種特殊的ARP請求,它并非期待得到IP對應(yīng)的 MAC 地址,而是當(dāng)主機(jī)啟動(dòng)的時(shí)候,發(fā)送一個(gè) Gratuitous ARP請求,即請求自己的IP地址的MAC地址。
免費(fèi)ARP報(bào)文與普通ARP請求報(bào)文的區(qū)別在于報(bào)文中的目標(biāo)IP地址。普通ARP報(bào)文中的目標(biāo)IP地址是其他主機(jī)的IP地址;而免費(fèi)ARP的請求報(bào)文中,目標(biāo)IP地址是自己的IP地址。
免費(fèi) ARP 數(shù)據(jù)包有以下 3 個(gè)作用。
- 該類型報(bào)文起到一個(gè)宣告作用。它以廣播的形式將數(shù)據(jù)包發(fā)送出去,不需要得到回應(yīng),只為了告訴其他計(jì)算機(jī)自己的IP地址和MAC地址。
- 可用于檢測IP地址沖突。當(dāng)一臺(tái)主機(jī)發(fā)送了免費(fèi)ARP請求報(bào)文后,如果收到了ARP響應(yīng)報(bào)文,則說明網(wǎng)絡(luò)內(nèi)已經(jīng)存在使用該IP地址的主機(jī)。
- 可用于更新其他主機(jī)的ARP緩存表。如果該主機(jī)更換了網(wǎng)卡,而其他主機(jī)的ARP緩存表仍然保留著原來的MAC地址。這時(shí),可以發(fā)送免費(fèi)的 ARP數(shù)據(jù)包。其他主機(jī)收到該數(shù)據(jù)包后,將更新ARP緩存表,將原來的 MAC地址替換為新的MAC地址。
?
ARP欺騙
地址解析協(xié)議是建立在網(wǎng)絡(luò)中各個(gè)主機(jī)互相信任的基礎(chǔ)上的,它的誕生使得網(wǎng)絡(luò)能夠更加高效的運(yùn)行,但其本身也存在缺陷:
ARP地址轉(zhuǎn)換表是依賴于計(jì)算機(jī)中高速緩沖存儲(chǔ)器動(dòng)態(tài)更新的,而高速緩沖存儲(chǔ)器的更新是受到更新周期的限制的,只保存最近使用的地址的映射關(guān)系表項(xiàng),這使得攻擊者有了可乘之機(jī),可以在高速緩沖存儲(chǔ)器更新表項(xiàng)之前修改地址轉(zhuǎn)換表,實(shí)現(xiàn)攻擊。ARP請求為廣播形式發(fā)送的,網(wǎng)絡(luò)上的主機(jī)可以自主發(fā)送ARP應(yīng)答消息,并且當(dāng)其他主機(jī)收到應(yīng)答報(bào)文時(shí)不會(huì)檢測該報(bào)文的真實(shí)性就將其記錄在本地的MAC地址轉(zhuǎn)換表,這樣攻擊者就可以向目標(biāo)主機(jī)發(fā)送偽ARP應(yīng)答報(bào)文,從而篡改本地的MAC地址表。ARP欺騙可以導(dǎo)致目標(biāo)計(jì)算機(jī)與網(wǎng)關(guān)通信失敗,更會(huì)導(dǎo)致通信重定向,所有的數(shù)據(jù)都會(huì)通過攻擊者的機(jī)器,因此存在極大的安全隱患。
「防御措施」
- 不要把網(wǎng)絡(luò)安全信任關(guān)系建立在IP基礎(chǔ)上或MAC基礎(chǔ)上(RARP同樣存在欺騙的問題),理想的關(guān)系應(yīng)該建立在IP+MAC基礎(chǔ)上。
- 設(shè)置靜態(tài)的MAC-->IP對應(yīng)表,不要讓主機(jī)刷新設(shè)定好的轉(zhuǎn)換表。
- 除非很有必要,否則停止使用ARP,將ARP做為永久條目保存在對應(yīng)表中。
- 使用ARP服務(wù)器。通過該服務(wù)器查找自己的ARP轉(zhuǎn)換表來響應(yīng)其他機(jī)器的ARP廣播。確保這臺(tái)ARP服務(wù)器不被黑。
- 使用“proxy”代理IP的傳輸。
- 使用硬件屏蔽主機(jī)。設(shè)置好路由,確保IP地址能到達(dá)合法的路徑(靜態(tài)配置路由ARP條目),注意,使用交換集線器和網(wǎng)橋無法阻止ARP欺騙。
- 管理員定期用響應(yīng)的IP包中獲得一個(gè)RARP請求,然后檢查ARP響應(yīng)的真實(shí)性。
- 管理員定期輪詢,檢查主機(jī)上的ARP緩存。
- 使用防火墻連續(xù)監(jiān)控網(wǎng)絡(luò)。注意有使用SNMP的情況下,ARP的欺騙有可能導(dǎo)致陷阱包丟失。
- 若感染ARP病毒,可以通過清空ARP緩存、指定ARP對應(yīng)關(guān)系、添加路由信息、使用防病毒軟件等方式解決。
ARP攻擊
ARP協(xié)議的基本功能就是通過目標(biāo)設(shè)備的IP地址,查詢目標(biāo)設(shè)備的MAC地址,以保證通信的進(jìn)行?;贏RP協(xié)議的這一工作特性,黑客向?qū)Ψ接?jì)算機(jī)不斷發(fā)送有欺詐性質(zhì)的ARP數(shù)據(jù)包,數(shù)據(jù)包內(nèi)包含有與當(dāng)前設(shè)備重復(fù)的Mac地址,使對方在回應(yīng)報(bào)文時(shí),由于簡單的地址重復(fù)錯(cuò)誤而導(dǎo)致不能進(jìn)行正常的網(wǎng)絡(luò)通信,或者如果不及時(shí)處理,便會(huì)造成網(wǎng)絡(luò)通道阻塞、網(wǎng)絡(luò)設(shè)備的承載過重、網(wǎng)絡(luò)的通訊質(zhì)量不佳等情況。
一般情況下,受到ARP攻擊的計(jì)算機(jī)會(huì)出現(xiàn)兩種現(xiàn)象:
- 不斷彈出“本機(jī)的XXX段硬件地址與網(wǎng)絡(luò)中的XXX段地址沖突”的對話框。
- 計(jì)算機(jī)不能正常上網(wǎng),出現(xiàn)網(wǎng)絡(luò)中斷的癥狀。
因?yàn)檫@種攻擊是利用ARP請求報(bào)文進(jìn)行“欺騙”的,所以防火墻會(huì)誤以為是正常的請求數(shù)據(jù)包,不予攔截。因此普通的防火墻很難抵擋這種攻擊。
NDP
地址解析協(xié)議是IPv4中必不可少的協(xié)議,但在IPv6中將不再存在地址解析協(xié)議。在IPv6中,地址解析協(xié)議的功能將由NDP(鄰居發(fā)現(xiàn)協(xié)議,Neighbor Discovery Protocol)實(shí)現(xiàn),它使用一系列IPv6控制信息報(bào)文(ICMPv6)來實(shí)現(xiàn)相鄰節(jié)點(diǎn)(同一鏈路上的節(jié)點(diǎn))的交互管理,并在一個(gè)子網(wǎng)中保持網(wǎng)絡(luò)層地址和數(shù)據(jù)鏈路層地址之間的映射。鄰居發(fā)現(xiàn)協(xié)議中定義了5種類型的信息:路由器宣告、路由器請求、路由重定向、鄰居請求和鄰居宣告。與ARP相比,NDP可以實(shí)現(xiàn)路由器發(fā)現(xiàn)、前綴發(fā)現(xiàn)、參數(shù)發(fā)現(xiàn)、地址自動(dòng)配置、地址解析(代替ARP和RARP)、下一跳確定、鄰居不可達(dá)檢測、重復(fù)地址檢測、重定向等更多功能。
「NDP與ARP的區(qū)別」
- IPv4中地址解析協(xié)議是獨(dú)立的協(xié)議,負(fù)責(zé)IP地址到MAC地址的轉(zhuǎn)換,對不同的數(shù)據(jù)鏈路層協(xié)議要定義不同的地址解析協(xié)議。IPv6中NDP包含了ARP的功能,且運(yùn)行于因特網(wǎng)控制信息協(xié)議ICMPv6上,更具有一般性,包括更多的內(nèi)容,而且適用于各種數(shù)據(jù)鏈路層協(xié)議;
- 地址解析協(xié)議以及ICMPv4路由器發(fā)現(xiàn)和ICMPv4重定向報(bào)文基于廣播,而NDP的鄰居發(fā)現(xiàn)報(bào)文基于高效的組播和單播。
?