ARP 位于七層模型里的第二層,即數據鏈路層。數據鏈路層有什么?答對了,是MAC地址。MAC地址指網絡接口的硬件地址,是一個48bit的值,用來標識以太網或令牌環(huán)(已經很少聽到了)的網絡接口。送貨總要有地址吧,在硬件層次上,MAC地址就是干這個的。發(fā)送數據的前提,就必須知道目的硬件地址。
總之,在以太網里面,一臺主機要發(fā)送數據幀,必須知道對方的以太網地址才能發(fā)送數據。而我們只知道IP地址,這時就要喊ARP協(xié)議來干活了,將IP地址翻譯成MAC地址。
一般認為ARP協(xié)議只適用于局域網。
現在我們知道ARP是干嘛的了,就是用于解析MAC地址。
TCP/IP協(xié)議棧是從上層到下層依次封裝的,其中呢,第三層需要封裝目的IP地址,第二層需要封裝目的MAC地址。目的IP地址由用戶/應用程序/DNS解析得到,而目的MAC地址哪來呢?ARP解析來的。
來看一下ARP解析MAC地址過程:
比如上層數據發(fā)送一個數據包過來,假設目的IP地址已經知道了。這個時候需要在數據鏈路層把MAC地址封裝進去??墒侵鳈C說,我不知道啊,那封裝就失敗了,目的IP到目的MAC封裝映射不成功。怎么辦呢?那就先干些別的吧。 我先發(fā)個廣播,就是ARP Request請求,源MAC是發(fā)起者的MAC, 目的MAC地址是FFFF:FFFF:FFFF (所有主機)。所有收到廣播的設備,對收到的ARP Request拆封,讀取ARP數據包中需要解析的目的IP,看看找誰。 兩種結果,一種是主機發(fā)現,你要找的目的IP地址跟我的不一樣啊,那就不管了,直接忽略。另一種是目的IP正確的設備,一看奧是找我的啊,那我回復一下吧。就發(fā)個ARP Reply來回應。ARP Reply消息,源MAC為被解析設備的MAC,目的MAC是ARP Request發(fā)起者的MAC地址。發(fā)起者接收到ARP Reply后,把目的IP地址與目的MAC地址的對應關系添加到ARP表里去。然后再繼續(xù)未完成的封裝工作,現在可以把正確的目的MAC封裝到數據幀里發(fā)送出去了。
我們再看看ARP在TCP連接建立的過程中干了些啥,這次接收者是一臺路由器。
當一個應用通過交互界面提交了數據請求,需要建立TCP連接。我們知道TCP需要三次握手,當TCP的第一個SYN報文到達IP層后,IP層就開始查找路由表。有這么幾種處理方式:
1)如果發(fā)現目的IP和自己在同一個網段,那就查找ARP高速緩存表中。緩存表里面有,存在目的IP對應的MAC地址時,可以直接取出來重新封裝并發(fā)送報文;緩存表里沒有,ARP干活(緩存TCP的SYN先被緩存起來)。發(fā)送ARP Request廣播請求目的IP的MAC,收到ARP應答之后,將應答之中的<IP地址,對應的MAC>緩存在本地ARP高速緩存表中,再重新封裝TCP SYN報文并發(fā)送。
2)如果目的IP地址和自己不在同一個網段,那么久要把報文發(fā)送給默認網關(需要知道默認網關的MAC地址)。同樣查找ARP高速緩存表,有默認網關對應的MAC地址時,直接提取數據,提交給網絡接口,網絡接口完成封裝和轉發(fā)。緩存表沒有,則發(fā)送ARP廣播請求默認網關的MAC,收到ARP應答之后,將應答之中的<默認網關地址,對應的MAC>緩存在本地ARP高速緩存表中,再重新完成TCP SYN的IP封裝并轉發(fā)。
ARP高速緩存
ARP高速緩存表在IP層使用。如果每次建立TCP連接都發(fā)送ARP請求,會降低效率,因此在主機、交換機、路由器上都會有ARP緩存表。建立TCP連接時先查詢ARP緩存表,如果有效,直接讀取ARP表項的內容進行第二層數據包的發(fā)送;只有表失效時才進行ARP請求和應答進行MAC地址的獲取,以建立TCP連接。
ARP緩存是一個緩沖區(qū),用來儲存IP地址和MAC地址,本質就是<IP地址,MAC地址>的對應表。表中一個條目記錄了網絡上一個主機的IP地址和其對應的MAC地址。每一個以太網或令牌環(huán)網絡適配器都有自己單獨的表。
當地址解析協(xié)議被詢問一個已知IP地址節(jié)點的MAC地址時,先在ARP緩存中查看,若存在,就直接返回與之對應的MAC地址,若不存在,才發(fā)送ARP請求向局域網查詢。
ARP緩存包含動態(tài)和靜態(tài)項目:
動態(tài)項目隨時間推移自動添加和刪除,每個動態(tài)ARP緩存項都有都設置了TTL(生存時間),TTL為0時此項目就從表中刪除,Windows下TTL一般不超過10分鐘。
靜態(tài) ARP 緩存條目是永久性的,可以使用 TCP/IP 工具手動添加和刪除。靜態(tài) ARP 緩存條目用來禁止節(jié)點發(fā)送對常用的本地IPv4地址(例如路由器和服務器的 IPv4 地址)的ARP請求。
動態(tài)ARP老化機制
動態(tài)ARP是指設備通過ARP報文動態(tài)學習、動態(tài)刷新IP地址和MAC地址之間的映射關系,不需要網絡管理員手工進行維護。
在一段時間內,如果ARP表中的某一映射關系始終沒有得到使用,這條映射關系就會被刪除,動態(tài)ARP老化機制就是實現系統(tǒng)自動刪除ARP表項操作的一套機制。通過動態(tài)ARP的老化機制,可以及時刪除使用頻率不高的ARP表項,節(jié)省ARP表的存儲空間,進而加快設備發(fā)送數據報文之前查詢ARP表的速度。
從ARP高速緩存的使用中可以看到,ARP高速緩存可以減小廣播量,進而減小網絡通信量,提高計算機之間的通信效率。具有一定安全隱患(參考下面免費ARP)
免費ARP
免費ARP指主機發(fā)送ARP查找自己的IP地址,通常發(fā)生在系統(tǒng)引導期間進行接口配置時。
與標準ARP的區(qū)別就是免費ARP分組的目的IP地址字段封裝的是自己的IP地址,即向所在網絡請求自己的MAC地址。
免費ARP能干啥?
1) 一個主機可以通過它來確定另一個主機是否設置了相同的 IP地址。正常情況下發(fā)送免費ARP請求不會收到ARP應答,如果收到了一個ARP應答,則說明網絡中存在與本機相同的IP地址的主機,發(fā)生了地址沖突。
2)更新其他主機高速緩存中舊的硬件地址。
如果發(fā)送免費ARP的主機正好改變了硬件地址,如更換了接口卡。其他主機接收到這個ARP請求的時候,發(fā)現自己的ARP高速緩存表中存在對應的IP地址,但是MAC地址不匹配,那么就需要利用接收的ARP請求來更新本地的ARP高速緩存表表項。
3)網關利用免費ARP防止ARP攻擊
有些網關設備在一定的時間間隔內向網絡主動發(fā)送免費ARP報文,讓網絡內的其他主機更新ARP表項中的網關MAC地址信息,以達到防止或緩解ARP攻擊的效果。
免費ARP安全隱患
ARP協(xié)議并不只在發(fā)送了ARP請求才接收ARP應答,計算機只要接收到ARP應答數據包,就會使用應答中的IP和MAC地址對本地的ARP緩存進行更新。
主機可以構造虛假的免費ARP應答,將ARP的源MAC地址設為錯誤的MAC地址,并把這個虛假的免費ARP應答發(fā)送到網絡中,那么所有接收到這個免費ARP應答的主機都會更新本地ARP表項中相應IP地址對應的MAC地址。更新成功后,這些主機的數據報文就會被轉發(fā)到錯誤的MAC地址,從而實現了ARP欺騙的攻擊。
代理ARP
代理ARP就是通過使用一個主機(通常為router),來作為指定的設備使用自己的 MAC 地址來對另一設備的ARP請求作出應答。
為什么需要代理ARP?
我們知道,路由器的重要功能之一就是把局域網的廣播包限制在該網內,阻止其擴散,否則會造成網絡風暴。
ARP請求是個廣播包,它詢問的對象如果在同一個局域網內,就會收到應答。但是如果詢問的對象不在同一個局域網該如何處理?路由器就提供的代理ARP為這個問題提供了解決方案。
兩臺主機A和B處于同一網段但不同的廣播段時,主機A發(fā)送ARP請求主機B的MAC地址時,因為路由器不轉發(fā)廣播包的原因,ARP請求只能到達路由器。如果路由器啟用了代理ARP功能,并知道主機B屬于它連接的網絡,那么路由器就用自己接口的MAC地址代替主機B的MAC地址來對主機A進行ARP應答。主機A接收ARP應答,但并不知道代理ARP的存在。
代理ARP能在不影響路由表的情況下添加一個新的Router,使子網對該主機變得透明化。一般代理ARP應該使用在主機沒有配置默認網關或沒有任何路由策略的網絡上。缺點是,從工作過程可以看到,這其實是一種ARP欺騙。而且,通過兩個物理網絡之間的路由器的代理ARP功能其實互相隱藏了物理網絡,這導致無法對網絡拓撲進行網絡概括。此外,代理ARP增加了使用它的那段網絡的ARP流量,主機需要更大的ARP緩存空間。
ARP安全
ARP協(xié)議有簡單、易用的優(yōu)點,但是也因為其沒有任何安全機制,容易被攻擊者利用。在網絡中,常見的ARP攻擊方式主要包括:
ARP泛洪攻擊,也叫拒絕服務攻擊DoS(Denial of Service),主要存在這樣兩種場景:
1)設備處理ARP報文和維護ARP表項都需要消耗系統(tǒng)資源,同時為了滿足ARP表項查詢效率的要求,一般設備都會對ARP表項規(guī)模有規(guī)格限制。攻擊者就利用這一點,通過偽造大量源IP地址變化的ARP報文,使得設備ARP表資源被無效的ARP條目耗盡,合法用戶的ARP報文不能繼續(xù)生成ARP條目,導致正常通信中斷。
2)攻擊者利用工具掃描本網段主機或者進行跨網段掃描時,會向設備發(fā)送大量目標IP地址不能解析的IP報文,導致設備觸發(fā)大量ARP Miss消息,生成并下發(fā)大量臨時ARP表項,并廣播大量ARP請求報文以對目標IP地址進行解析,從而造成CPU(Central Processing Unit)負荷過重。
ARP欺騙攻擊,是指攻擊者通過發(fā)送偽造的ARP報文,惡意修改設備或網絡內其他用戶主機的ARP表項,造成用戶或網絡的報文通信異常。
提高ARP安全的方案
不同廠商產品的特性和配置方式都不盡相同,但大致有這些方式來提高ARP的安全性:
ARP報文限速;ARP Miss消息限速;免費ARP報文主動丟棄;ARP優(yōu)化應答;ARP表項限制;ARP表項限制;ARP表項固化;動態(tài)ARP檢測;ARP防網關沖突;ARP報文內MAC地址一致性檢查等。
“Spec of ARP full” 案例
本案例僅供參考。
設備:華為NE05E-SE路由器;
現象:例行巡檢時,發(fā)現錯誤告警“Spec of ARP full”。
查找資料得知,ARP表項受硬件規(guī)格限制。如果ARP表項滿了,則會導致新設備MAC地址無法注冊,無法提供IP地址到MAC地址的解析,網絡通訊無法連接等問題。
需要考慮的是,如果這些ARP是真實的,如果無法通過軟件方式提高ARP表項支持數目,就只有更換硬件了。
本案例中,當前版本的路由器支持ARP表項數量為1055 (設備ARP和ND的規(guī)格共享),可以通過“set arp specification { 1055 | 8192 }” 命令設置,設備ARP規(guī)格獨享8192,ND規(guī)格獨享1055。
RARP 反向ARP
具有本地磁盤的系統(tǒng)引導時,一般是從磁盤中的配置文件讀取IP地址。但是無盤機,如無盤工作站,則需要采用其他方法獲取ip地址。
網絡上的每個系統(tǒng)都具有唯一的硬件地址,他是由網絡接口生產廠家配置的。無盤系統(tǒng)的RARP實現過程是從接口卡上讀取唯一的硬件地址,然后發(fā)送一份RARP請求(一幀在網絡上的數據),請求某個主機在無盤系統(tǒng)的IP地址。
RARP服務器的復雜性在于。服務器一般要為多個主機提供硬件地址到IP地址的映射。更為復雜的是,RARP請求作為一個特殊類型的以太網數據幀來傳送。這說明RARP服務器必須能夠發(fā)送和接收這種類型的以太網數據幀。
RARP是許多無盤系統(tǒng)在引導時用來獲取IP地址的。RARP實現起來要比ARP復雜,因為RARP請求實在硬件層上廣播的。這意味著他們不經過路由器進行轉發(fā)。為了能讓無盤系統(tǒng)在RARP關機的情況下也能引導,通常要在一個網絡上(一根電纜)提供多個RARP服務器。