ARP 位于七層模型里的第二層粗悯,即數(shù)據(jù)鏈路層。數(shù)據(jù)鏈路層有什么同欠?答對(duì)了样傍,是MAC地址。MAC地址指網(wǎng)絡(luò)接口的硬件地址铺遂,是一個(gè)48bit的值衫哥,用來標(biāo)識(shí)以太網(wǎng)或令牌環(huán)(已經(jīng)很少聽到了)的網(wǎng)絡(luò)接口。送貨總要有地址吧襟锐,在硬件層次上撤逢,MAC地址就是干這個(gè)的。發(fā)送數(shù)據(jù)的前提,就必須知道目的硬件地址蚊荣。
總之初狰,在以太網(wǎng)里面,一臺(tái)主機(jī)要發(fā)送數(shù)據(jù)幀互例,必須知道對(duì)方的以太網(wǎng)地址才能發(fā)送數(shù)據(jù)奢入。而我們只知道IP地址,這時(shí)就要喊ARP協(xié)議來干活了媳叨,將IP地址翻譯成MAC地址腥光。
一般認(rèn)為ARP協(xié)議只適用于局域網(wǎng)。
現(xiàn)在我們知道ARP是干嘛的了糊秆,就是用于解析MAC地址武福。
TCP/IP協(xié)議棧是從上層到下層依次封裝的,其中呢扩然,第三層需要封裝目的IP地址艘儒,第二層需要封裝目的MAC地址。目的IP地址由用戶/應(yīng)用程序/DNS解析得到夫偶,而目的MAC地址哪來呢界睁?ARP解析來的。
來看一下ARP解析MAC地址過程:
比如上層數(shù)據(jù)發(fā)送一個(gè)數(shù)據(jù)包過來兵拢,假設(shè)目的IP地址已經(jīng)知道了翻斟。這個(gè)時(shí)候需要在數(shù)據(jù)鏈路層把MAC地址封裝進(jìn)去∷盗澹可是主機(jī)說访惜,我不知道啊,那封裝就失敗了腻扇,目的IP到目的MAC封裝映射不成功债热。怎么辦呢?那就先干些別的吧幼苛。 我先發(fā)個(gè)廣播窒篱,就是ARP Request請(qǐng)求,源MAC是發(fā)起者的MAC, 目的MAC地址是FFFF:FFFF:FFFF (所有主機(jī))舶沿。所有收到廣播的設(shè)備墙杯,對(duì)收到的ARP Request拆封,讀取ARP數(shù)據(jù)包中需要解析的目的IP括荡,看看找誰高镐。 兩種結(jié)果,一種是主機(jī)發(fā)現(xiàn)畸冲,你要找的目的IP地址跟我的不一樣啊嫉髓,那就不管了观腊,直接忽略。另一種是目的IP正確的設(shè)備算行,一看奧是找我的啊恕沫,那我回復(fù)一下吧。就發(fā)個(gè)ARP Reply來回應(yīng)纱意。ARP Reply消息,源MAC為被解析設(shè)備的MAC鲸阔,目的MAC是ARP Request發(fā)起者的MAC地址偷霉。發(fā)起者接收到ARP Reply后,把目的IP地址與目的MAC地址的對(duì)應(yīng)關(guān)系添加到ARP表里去褐筛。然后再繼續(xù)未完成的封裝工作类少,現(xiàn)在可以把正確的目的MAC封裝到數(shù)據(jù)幀里發(fā)送出去了。
我們?cè)倏纯碅RP在TCP連接建立的過程中干了些啥渔扎,這次接收者是一臺(tái)路由器硫狞。
當(dāng)一個(gè)應(yīng)用通過交互界面提交了數(shù)據(jù)請(qǐng)求,需要建立TCP連接晃痴。我們知道TCP需要三次握手残吩,當(dāng)TCP的第一個(gè)SYN報(bào)文到達(dá)IP層后,IP層就開始查找路由表倘核。有這么幾種處理方式:
1)如果發(fā)現(xiàn)目的IP和自己在同一個(gè)網(wǎng)段泣侮,那就查找ARP高速緩存表中。緩存表里面有紧唱,存在目的IP對(duì)應(yīng)的MAC地址時(shí)活尊,可以直接取出來重新封裝并發(fā)送報(bào)文;緩存表里沒有漏益,ARP干活(緩存TCP的SYN先被緩存起來)蛹锰。發(fā)送ARP Request廣播請(qǐng)求目的IP的MAC,收到ARP應(yīng)答之后绰疤,將應(yīng)答之中的<IP地址铜犬,對(duì)應(yīng)的MAC>緩存在本地ARP高速緩存表中,再重新封裝TCP SYN報(bào)文并發(fā)送峦睡。
2)如果目的IP地址和自己不在同一個(gè)網(wǎng)段翎苫,那么久要把報(bào)文發(fā)送給默認(rèn)網(wǎng)關(guān)(需要知道默認(rèn)網(wǎng)關(guān)的MAC地址)。同樣查找ARP高速緩存表榨了,有默認(rèn)網(wǎng)關(guān)對(duì)應(yīng)的MAC地址時(shí)煎谍,直接提取數(shù)據(jù),提交給網(wǎng)絡(luò)接口龙屉,網(wǎng)絡(luò)接口完成封裝和轉(zhuǎn)發(fā)呐粘。緩存表沒有满俗,則發(fā)送ARP廣播請(qǐng)求默認(rèn)網(wǎng)關(guān)的MAC,收到ARP應(yīng)答之后作岖,將應(yīng)答之中的<默認(rèn)網(wǎng)關(guān)地址唆垃,對(duì)應(yīng)的MAC>緩存在本地ARP高速緩存表中,再重新完成TCP SYN的IP封裝并轉(zhuǎn)發(fā)痘儡。
ARP高速緩存
ARP高速緩存表在IP層使用辕万。如果每次建立TCP連接都發(fā)送ARP請(qǐng)求,會(huì)降低效率沉删,因此在主機(jī)渐尿、交換機(jī)、路由器上都會(huì)有ARP緩存表矾瑰。建立TCP連接時(shí)先查詢ARP緩存表砖茸,如果有效,直接讀取ARP表項(xiàng)的內(nèi)容進(jìn)行第二層數(shù)據(jù)包的發(fā)送殴穴;只有表失效時(shí)才進(jìn)行ARP請(qǐng)求和應(yīng)答進(jìn)行MAC地址的獲取凉夯,以建立TCP連接。
ARP緩存是一個(gè)緩沖區(qū)采幌,用來儲(chǔ)存IP地址和MAC地址劲够,本質(zhì)就是<IP地址,MAC地址>的對(duì)應(yīng)表植榕。表中一個(gè)條目記錄了網(wǎng)絡(luò)上一個(gè)主機(jī)的IP地址和其對(duì)應(yīng)的MAC地址再沧。每一個(gè)以太網(wǎng)或令牌環(huán)網(wǎng)絡(luò)適配器都有自己?jiǎn)为?dú)的表。
當(dāng)?shù)刂方馕鰠f(xié)議被詢問一個(gè)已知IP地址節(jié)點(diǎn)的MAC地址時(shí)尊残,先在ARP緩存中查看炒瘸,若存在,就直接返回與之對(duì)應(yīng)的MAC地址寝衫,若不存在顷扩,才發(fā)送ARP請(qǐng)求向局域網(wǎng)查詢。
ARP緩存包含動(dòng)態(tài)和靜態(tài)項(xiàng)目:
動(dòng)態(tài)項(xiàng)目隨時(shí)間推移自動(dòng)添加和刪除慰毅,每個(gè)動(dòng)態(tài)ARP緩存項(xiàng)都有都設(shè)置了TTL(生存時(shí)間)隘截,TTL為0時(shí)此項(xiàng)目就從表中刪除,Windows下TTL一般不超過10分鐘汹胃。
靜態(tài) ARP 緩存條目是永久性的婶芭,可以使用 TCP/IP 工具手動(dòng)添加和刪除。靜態(tài) ARP 緩存條目用來禁止節(jié)點(diǎn)發(fā)送對(duì)常用的本地IPv4地址(例如路由器和服務(wù)器的 IPv4 地址)的ARP請(qǐng)求着饥。
動(dòng)態(tài)ARP老化機(jī)制
動(dòng)態(tài)ARP是指設(shè)備通過ARP報(bào)文動(dòng)態(tài)學(xué)習(xí)犀农、動(dòng)態(tài)刷新IP地址和MAC地址之間的映射關(guān)系,不需要網(wǎng)絡(luò)管理員手工進(jìn)行維護(hù)宰掉。
在一段時(shí)間內(nèi)呵哨,如果ARP表中的某一映射關(guān)系始終沒有得到使用赁濒,這條映射關(guān)系就會(huì)被刪除,動(dòng)態(tài)ARP老化機(jī)制就是實(shí)現(xiàn)系統(tǒng)自動(dòng)刪除ARP表項(xiàng)操作的一套機(jī)制孟害。通過動(dòng)態(tài)ARP的老化機(jī)制拒炎,可以及時(shí)刪除使用頻率不高的ARP表項(xiàng),節(jié)省ARP表的存儲(chǔ)空間挨务,進(jìn)而加快設(shè)備發(fā)送數(shù)據(jù)報(bào)文之前查詢ARP表的速度击你。
從ARP高速緩存的使用中可以看到,ARP高速緩存可以減小廣播量谎柄,進(jìn)而減小網(wǎng)絡(luò)通信量果漾,提高計(jì)算機(jī)之間的通信效率。具有一定安全隱患(參考下面免費(fèi)ARP)
免費(fèi)ARP
免費(fèi)ARP指主機(jī)發(fā)送ARP查找自己的IP地址谷誓,通常發(fā)生在系統(tǒng)引導(dǎo)期間進(jìn)行接口配置時(shí)。
與標(biāo)準(zhǔn)ARP的區(qū)別就是免費(fèi)ARP分組的目的IP地址字段封裝的是自己的IP地址吨凑,即向所在網(wǎng)絡(luò)請(qǐng)求自己的MAC地址捍歪。
免費(fèi)ARP能干啥?
1) 一個(gè)主機(jī)可以通過它來確定另一個(gè)主機(jī)是否設(shè)置了相同的 IP地址鸵钝。正常情況下發(fā)送免費(fèi)ARP請(qǐng)求不會(huì)收到ARP應(yīng)答糙臼,如果收到了一個(gè)ARP應(yīng)答,則說明網(wǎng)絡(luò)中存在與本機(jī)相同的IP地址的主機(jī)恩商,發(fā)生了地址沖突变逃。
2)更新其他主機(jī)高速緩存中舊的硬件地址。
如果發(fā)送免費(fèi)ARP的主機(jī)正好改變了硬件地址怠堪,如更換了接口卡揽乱。其他主機(jī)接收到這個(gè)ARP請(qǐng)求的時(shí)候,發(fā)現(xiàn)自己的ARP高速緩存表中存在對(duì)應(yīng)的IP地址粟矿,但是MAC地址不匹配凰棉,那么就需要利用接收的ARP請(qǐng)求來更新本地的ARP高速緩存表表項(xiàng)。
3)網(wǎng)關(guān)利用免費(fèi)ARP防止ARP攻擊
有些網(wǎng)關(guān)設(shè)備在一定的時(shí)間間隔內(nèi)向網(wǎng)絡(luò)主動(dòng)發(fā)送免費(fèi)ARP報(bào)文陌粹,讓網(wǎng)絡(luò)內(nèi)的其他主機(jī)更新ARP表項(xiàng)中的網(wǎng)關(guān)MAC地址信息撒犀,以達(dá)到防止或緩解ARP攻擊的效果。
免費(fèi)ARP安全隱患
ARP協(xié)議并不只在發(fā)送了ARP請(qǐng)求才接收ARP應(yīng)答掏秩,計(jì)算機(jī)只要接收到ARP應(yīng)答數(shù)據(jù)包或舞,就會(huì)使用應(yīng)答中的IP和MAC地址對(duì)本地的ARP緩存進(jìn)行更新。
主機(jī)可以構(gòu)造虛假的免費(fèi)ARP應(yīng)答蒙幻,將ARP的源MAC地址設(shè)為錯(cuò)誤的MAC地址映凳,并把這個(gè)虛假的免費(fèi)ARP應(yīng)答發(fā)送到網(wǎng)絡(luò)中,那么所有接收到這個(gè)免費(fèi)ARP應(yīng)答的主機(jī)都會(huì)更新本地ARP表項(xiàng)中相應(yīng)IP地址對(duì)應(yīng)的MAC地址杆煞。更新成功后魏宽,這些主機(jī)的數(shù)據(jù)報(bào)文就會(huì)被轉(zhuǎn)發(fā)到錯(cuò)誤的MAC地址腐泻,從而實(shí)現(xiàn)了ARP欺騙的攻擊。
代理ARP
代理ARP就是通過使用一個(gè)主機(jī)(通常為router)队询,來作為指定的設(shè)備使用自己的 MAC 地址來對(duì)另一設(shè)備的ARP請(qǐng)求作出應(yīng)答派桩。
為什么需要代理ARP?
我們知道蚌斩,路由器的重要功能之一就是把局域網(wǎng)的廣播包限制在該網(wǎng)內(nèi)铆惑,阻止其擴(kuò)散,否則會(huì)造成網(wǎng)絡(luò)風(fēng)暴送膳。
ARP請(qǐng)求是個(gè)廣播包员魏,它詢問的對(duì)象如果在同一個(gè)局域網(wǎng)內(nèi),就會(huì)收到應(yīng)答叠聋。但是如果詢問的對(duì)象不在同一個(gè)局域網(wǎng)該如何處理撕阎?路由器就提供的代理ARP為這個(gè)問題提供了解決方案。
兩臺(tái)主機(jī)A和B處于同一網(wǎng)段但不同的廣播段時(shí)碌补,主機(jī)A發(fā)送ARP請(qǐng)求主機(jī)B的MAC地址時(shí)虏束,因?yàn)槁酚善鞑晦D(zhuǎn)發(fā)廣播包的原因,ARP請(qǐng)求只能到達(dá)路由器厦章。如果路由器啟用了代理ARP功能镇匀,并知道主機(jī)B屬于它連接的網(wǎng)絡(luò),那么路由器就用自己接口的MAC地址代替主機(jī)B的MAC地址來對(duì)主機(jī)A進(jìn)行ARP應(yīng)答袜啃。主機(jī)A接收ARP應(yīng)答汗侵,但并不知道代理ARP的存在。
代理ARP能在不影響路由表的情況下添加一個(gè)新的Router群发,使子網(wǎng)對(duì)該主機(jī)變得透明化晰韵。一般代理ARP應(yīng)該使用在主機(jī)沒有配置默認(rèn)網(wǎng)關(guān)或沒有任何路由策略的網(wǎng)絡(luò)上。缺點(diǎn)是熟妓,從工作過程可以看到宫屠,這其實(shí)是一種ARP欺騙。而且滑蚯,通過兩個(gè)物理網(wǎng)絡(luò)之間的路由器的代理ARP功能其實(shí)互相隱藏了物理網(wǎng)絡(luò)浪蹂,這導(dǎo)致無法對(duì)網(wǎng)絡(luò)拓?fù)溥M(jìn)行網(wǎng)絡(luò)概括。此外告材,代理ARP增加了使用它的那段網(wǎng)絡(luò)的ARP流量坤次,主機(jī)需要更大的ARP緩存空間。
ARP安全
ARP協(xié)議有簡(jiǎn)單斥赋、易用的優(yōu)點(diǎn)缰猴,但是也因?yàn)槠錄]有任何安全機(jī)制,容易被攻擊者利用疤剑。在網(wǎng)絡(luò)中滑绒,常見的ARP攻擊方式主要包括:
ARP泛洪攻擊闷堡,也叫拒絕服務(wù)攻擊DoS(Denial of Service),主要存在這樣兩種場(chǎng)景:
1)設(shè)備處理ARP報(bào)文和維護(hù)ARP表項(xiàng)都需要消耗系統(tǒng)資源疑故,同時(shí)為了滿足ARP表項(xiàng)查詢效率的要求杠览,一般設(shè)備都會(huì)對(duì)ARP表項(xiàng)規(guī)模有規(guī)格限制。攻擊者就利用這一點(diǎn)纵势,通過偽造大量源IP地址變化的ARP報(bào)文踱阿,使得設(shè)備ARP表資源被無效的ARP條目耗盡,合法用戶的ARP報(bào)文不能繼續(xù)生成ARP條目钦铁,導(dǎo)致正常通信中斷软舌。
2)攻擊者利用工具掃描本網(wǎng)段主機(jī)或者進(jìn)行跨網(wǎng)段掃描時(shí),會(huì)向設(shè)備發(fā)送大量目標(biāo)IP地址不能解析的IP報(bào)文牛曹,導(dǎo)致設(shè)備觸發(fā)大量ARP Miss消息佛点,生成并下發(fā)大量臨時(shí)ARP表項(xiàng),并廣播大量ARP請(qǐng)求報(bào)文以對(duì)目標(biāo)IP地址進(jìn)行解析黎比,從而造成CPU(Central Processing Unit)負(fù)荷過重恋脚。
ARP欺騙攻擊,是指攻擊者通過發(fā)送偽造的ARP報(bào)文焰手,惡意修改設(shè)備或網(wǎng)絡(luò)內(nèi)其他用戶主機(jī)的ARP表項(xiàng),造成用戶或網(wǎng)絡(luò)的報(bào)文通信異常怀喉。
提高ARP安全的方案
不同廠商產(chǎn)品的特性和配置方式都不盡相同书妻,但大致有這些方式來提高ARP的安全性:
ARP報(bào)文限速;ARP Miss消息限速躬拢;免費(fèi)ARP報(bào)文主動(dòng)丟棄躲履;ARP優(yōu)化應(yīng)答;ARP表項(xiàng)限制聊闯;ARP表項(xiàng)限制工猜;ARP表項(xiàng)固化;動(dòng)態(tài)ARP檢測(cè)菱蔬;ARP防網(wǎng)關(guān)沖突篷帅;ARP報(bào)文內(nèi)MAC地址一致性檢查等。
“Spec of ARP full” 案例
本案例僅供參考拴泌。
設(shè)備:華為NE05E-SE路由器魏身;
現(xiàn)象:例行巡檢時(shí),發(fā)現(xiàn)錯(cuò)誤告警“Spec of ARP full”蚪腐。
查找資料得知箭昵,ARP表項(xiàng)受硬件規(guī)格限制。如果ARP表項(xiàng)滿了回季,則會(huì)導(dǎo)致新設(shè)備MAC地址無法注冊(cè)家制,無法提供IP地址到MAC地址的解析正林,網(wǎng)絡(luò)通訊無法連接等問題。
需要考慮的是颤殴,如果這些ARP是真實(shí)的觅廓,如果無法通過軟件方式提高ARP表項(xiàng)支持?jǐn)?shù)目,就只有更換硬件了诅病。
本案例中哪亿,當(dāng)前版本的路由器支持ARP表項(xiàng)數(shù)量為1055 (設(shè)備ARP和ND的規(guī)格共享),可以通過“set arp specification { 1055 | 8192 }” 命令設(shè)置贤笆,設(shè)備ARP規(guī)格獨(dú)享8192蝇棉,ND規(guī)格獨(dú)享1055。
RARP 反向ARP
具有本地磁盤的系統(tǒng)引導(dǎo)時(shí)芥永,一般是從磁盤中的配置文件讀取IP地址篡殷。但是無盤機(jī),如無盤工作站埋涧,則需要采用其他方法獲取ip地址板辽。
網(wǎng)絡(luò)上的每個(gè)系統(tǒng)都具有唯一的硬件地址,他是由網(wǎng)絡(luò)接口生產(chǎn)廠家配置的棘催。無盤系統(tǒng)的RARP實(shí)現(xiàn)過程是從接口卡上讀取唯一的硬件地址劲弦,然后發(fā)送一份RARP請(qǐng)求(一幀在網(wǎng)絡(luò)上的數(shù)據(jù)),請(qǐng)求某個(gè)主機(jī)在無盤系統(tǒng)的IP地址醇坝。
RARP服務(wù)器的復(fù)雜性在于邑跪。服務(wù)器一般要為多個(gè)主機(jī)提供硬件地址到IP地址的映射。更為復(fù)雜的是呼猪,RARP請(qǐng)求作為一個(gè)特殊類型的以太網(wǎng)數(shù)據(jù)幀來傳送画畅。這說明RARP服務(wù)器必須能夠發(fā)送和接收這種類型的以太網(wǎng)數(shù)據(jù)幀。
RARP是許多無盤系統(tǒng)在引導(dǎo)時(shí)用來獲取IP地址的宋距。RARP實(shí)現(xiàn)起來要比ARP復(fù)雜轴踱,因?yàn)镽ARP請(qǐng)求實(shí)在硬件層上廣播的。這意味著他們不經(jīng)過路由器進(jìn)行轉(zhuǎn)發(fā)谚赎。為了能讓無盤系統(tǒng)在RARP關(guān)機(jī)的情況下也能引導(dǎo)淫僻,通常要在一個(gè)網(wǎng)絡(luò)上(一根電纜)提供多個(gè)RARP服務(wù)器。