本文主要講述了ARP的作用、ARP分組格式、ARP高速緩存、免費ARP和代理ARP。
1.學(xué)習ARP前要了解的內容建立TCP連接與ARP的關(guān)系應用接受用戶(hù)提交的數據,觸發(fā)TCP建立連接,TCP的第一個(gè)SYN報文通過(guò)connect函數到達IP層,IP層通過(guò)查詢(xún)路由表:
如果目的IP和自己在同一個(gè)網(wǎng)段:
當IP層的ARP高速緩存表中存在目的IP對應的MAC地址時(shí),則調用網(wǎng)絡(luò )接口send函數(參數為IP Packet和目的MAC))將數據提交給網(wǎng)絡(luò )接口,網(wǎng)絡(luò )接口完成Ethernet Header + IP + CRC的封裝,并發(fā)送出去;
當IP層的ARP高速緩存表中不存在目的IP對應的MAC地址時(shí),則IP層將TCP的SYN緩存下來(lái),發(fā)送ARP廣播請求目的IP的MAC,收到ARP應答之后,將應答之中的 如果目的IP地址和自己不在同一個(gè)網(wǎng)段,就需要將包發(fā)送給默認網(wǎng)關(guān),這需要知道默認網(wǎng)關(guān)的MAC地址: 當IP層的ARP高速緩存表中存在默認網(wǎng)關(guān)對應的MAC地址時(shí),則調用網(wǎng)絡(luò )接口send函數(參數為IP Packet和默認網(wǎng)關(guān)的MAC)將數據提交給網(wǎng)絡(luò )接口,網(wǎng)絡(luò )接口完成Ethernet Header + IP + CRC 當IP層的ARP高速緩存表中不存在默認網(wǎng)關(guān)對應的MAC地址時(shí),則IP層將TCP的SYN緩存下來(lái),發(fā)送ARP廣播請求默認網(wǎng)關(guān)的MAC,收到ARP應答之后,將應答之中的<默認網(wǎng)關(guān)地址,對應的mac>對緩存在本地ARP高速緩存表中,然后完成TCP SYN的IP封裝,調用網(wǎng)絡(luò )接口send函數(參數為IP Packet和默認網(wǎng)關(guān)的MAC)將數據提交給網(wǎng)絡(luò )接口,網(wǎng)絡(luò )接口完成Ethernet Header + IP + CRC的封裝,并發(fā)送出去。 ARP的位置 OSI模型有七層,TCP在第4層傳輸層,IP在第3層網(wǎng)絡(luò )層,而ARP在第2層數據鏈路層。高層對低層是有強依賴(lài)的,所以TCP的建立前要進(jìn)行ARP的請求和應答。 ARP高速緩存表在IP層使用。如果每次建立TCP連接都發(fā)送ARP請求,會(huì )降低效率,因此在主機、交換機、路由器上都會(huì )有ARP緩存表。建立TCP連接時(shí)先查詢(xún)ARP緩存表,如果有效,直接讀取ARP表項的內容進(jìn)行第二層數據包的發(fā)送;只有表失效時(shí)才進(jìn)行ARP請求和應答進(jìn)行MAC地址的獲取,以建立TCP連接。 要了解ARP的作用,首先要分清兩個(gè)“地址”: (1)TCP/IP的32bit IP地址。僅知道主機的IP地址不能讓內核發(fā)送數據幀給主機。 (2)網(wǎng)絡(luò )接口的硬件地址,它是一個(gè)48bit的值,用來(lái)標識不同的以太網(wǎng)或令牌環(huán)網(wǎng)絡(luò )接口。在硬件層次上,進(jìn)行數據交換必須有正確的接口地址,內核必須知道目的端的硬件地址才能發(fā)送數據。 簡(jiǎn)言之,就是在以太網(wǎng)中,一臺主機要把數據幀發(fā)送到同一局域網(wǎng)上的另一臺主機時(shí),設備驅動(dòng)程序必須知道以太網(wǎng)地址才能發(fā)送數據。而我們只知道IP地址,這時(shí)就需要采用ARP協(xié)議將IP地址映射為以太網(wǎng)地址。 要注意一點(diǎn),一般認為ARP協(xié)議只使適用于局域網(wǎng)。 ARP分組的格式如下圖:
先要清楚,一般說(shuō)以太網(wǎng)地址就是指MAC地址。
字段1是ARP請求的目的以太網(wǎng)地址,全1時(shí)代表廣播地址。
字段2是發(fā)送ARP請求的以太網(wǎng)地址。
字段3以太網(wǎng)幀類(lèi)型表示的是后面的數據類(lèi)型,ARP請求和ARP應答這個(gè)值為0x0806。
字段4表示硬件地址的類(lèi)型,硬件地址不只以太網(wǎng)一種,是以太網(wǎng)類(lèi)型時(shí)此值為1。
字段5表示要映射的協(xié)議地址的類(lèi)型,要對IPv4地址進(jìn)行映射,此值為0x0800。
字段6和7表示硬件地址長(cháng)度和協(xié)議地址長(cháng)度,MAC地址占6字節,IP地址占4字節。
字段8是操作類(lèi)型字段,值為1,表示進(jìn)行ARP請求;值為2,表示進(jìn)行ARP應答;值為3,表示進(jìn)行RARP請求;值為4,表示進(jìn)行RARP應答。
字段9是發(fā)送端ARP請求或應答的硬件地址,這里是以太網(wǎng)地址,和字段2相同。
字段10是發(fā)送ARP請求或應答的IP地址。
字段11和12是目的端的硬件地址和協(xié)議地址。
下面是抓取的ARP數據包,可以對照上面的說(shuō)明進(jìn)行理解。
圖中紅框圈起來(lái)的是一對ARP請求和ARP應答。
下面兩張圖分別是ARP請求和相應的ARP應答的分組格式截圖。
ARP請求分組中,字段11目的MAC地址未知,用全0進(jìn)行填充。
ARP應答分組中,將ARP請求中的源和目的地址進(jìn)行交換,此外,變化的還有字段8 Opcode。其余字段內容不會(huì )發(fā)生變化。
那么我們是如何區分ARP請求和ARP應答分組的呢?
分組中的地址字段和其他相同的字段無(wú)法作為區分依據,這時(shí)Opcode字段就發(fā)揮了作用,根據Opcode的值可以確定是請求還是應答,是ARP還是RARP。
3.ARP高速緩存定義
ARP緩存是一個(gè)緩沖區,用來(lái)儲存IP地址和MAC地址,本質(zhì)就是 每一個(gè)以太網(wǎng)或令牌環(huán)網(wǎng)絡(luò )適配器都有自己?jiǎn)为毜谋怼?/p> 當地址解析協(xié)議被詢(xún)問(wèn)一個(gè)已知IP地址節點(diǎn)的MAC地址時(shí),先在A(yíng)RP緩存中查看,若存在,就直接返回與之對應的MAC地址,若不存在,才發(fā)送ARP請求向局域網(wǎng)查詢(xún)。 ARP緩存表項的生存時(shí)間TTL ARP緩存包含動(dòng)態(tài)和靜態(tài)項目: 動(dòng)態(tài)項目隨時(shí)間推移自動(dòng)添加和刪除,每個(gè)動(dòng)態(tài)ARP緩存項都有都設置了TTL(生存時(shí)間),TTL為0時(shí)此項目就從表中刪除,Windows下TTL一般不超過(guò)10分鐘。 靜態(tài) ARP 緩存條目是永久性的,可以使用 TCP/IP 工具手動(dòng)添加和刪除。靜態(tài) ARP 緩存條目用來(lái)禁止節點(diǎn)發(fā)送對常用的本地IPv4地址(例如路由器和服務(wù)器的 IPv4 地址)的ARP請求。 ARP高速緩存的使用 當主機發(fā)送一個(gè)ARP請求時(shí),先查看ARP高速緩存表,如果存在對應條目,則直接返回MAC地址,否則向局域網(wǎng)發(fā)送ARP請求廣播。 ARP高速緩存的優(yōu)缺點(diǎn) 優(yōu)點(diǎn):從ARP高速緩存的使用中可以看到,ARP高速緩存可以減小廣播量,進(jìn)而減小網(wǎng)絡(luò )通信量,提高計算機之間的通信效率。 缺點(diǎn):造成安全隱患(參考下面免費ARP的作用)。 定義 免費ARP指主機發(fā)送ARP查找自己的IP地址,通常發(fā)生在系統引導期間進(jìn)行接口配置時(shí)。 與標準ARP的區別就是免費ARP分組的目的IP地址字段封裝的是自己的IP地址,即向所在網(wǎng)絡(luò )請求自己的MAC地址。 作用 免費ARP的作用有: 1) 一個(gè)主機可以通過(guò)它來(lái)確定另一個(gè)主機是否設置了相同的 IP地址。 正常情況下發(fā)送免費ARP請求不會(huì )收到ARP應答,如果收到了一個(gè)ARP應答,則說(shuō)明網(wǎng)絡(luò )中存在與本機相同的IP地址的主機,發(fā)生了地址沖突。 2)更新其他主機高速緩存中舊的硬件地址進(jìn)行。 如果發(fā)送免費ARP的主機正好改變了硬件地址,如更換了接口卡。 其他主機接收到這個(gè)ARP請求的時(shí)候,發(fā)現自己的ARP高速緩存表中存在對應的IP地址,但是MAC地址不匹配,那么就需要利用接收的ARP請求來(lái)更新本地的ARP高速緩存表表項。 3)網(wǎng)關(guān)利用免費ARP防止ARP攻擊 有些網(wǎng)關(guān)設備在一定的時(shí)間間隔內向網(wǎng)絡(luò )主動(dòng)發(fā)送免費ARP報文,讓網(wǎng)絡(luò )內的其他主機更新ARP表項中的網(wǎng)關(guān)MAC地址信息,以達到防止或緩解ARP攻擊的效果。 4)利用免費ARP進(jìn)行ARP攻擊 ARP協(xié)議并不只在發(fā)送了ARP請求才接收ARP應答,計算機只要接收到ARP應答數據包,就會(huì )使用應答中的IP和MAC地址對本地的ARP緩存進(jìn)行更新。 主機可以構造虛假的免費ARP應答,將ARP的源MAC地址設為錯誤的MAC地址,并把這個(gè)虛假的免費ARP應答發(fā)送到網(wǎng)絡(luò )中,那么所有接收到這個(gè)免費ARP應答的主機都會(huì )更新本地ARP表項中相應IP地址對應的MAC地址。更新成功后,這些主機的數據報文就會(huì )被轉發(fā)到錯誤的MAC地址,從而實(shí)現了ARP欺騙的攻擊。 定義 代理ARP就是通過(guò)使用一個(gè)主機(通常為router),來(lái)作為指定的設備使用自己的 MAC 地址來(lái)對另一設備的ARP請求作出應答。 為什么需要代理ARP? 先要了解,路由器的重要功能之一就是把局域網(wǎng)的廣播包限制在該網(wǎng)內,阻止其擴散,否則會(huì )造成網(wǎng)絡(luò )風(fēng)暴。 ARP請求是個(gè)廣播包,它詢(xún)問(wèn)的對象如果在同一個(gè)局域網(wǎng)內,就會(huì )收到應答。但是如果詢(xún)問(wèn)的對象不在同一個(gè)局域網(wǎng)該如何處理?路由器就提供的代理ARP為這個(gè)問(wèn)題提供了解決方案。 工作過(guò)程 兩臺主機A和B處于同一網(wǎng)段但不同的廣播段時(shí),主機A發(fā)送ARP請求主機B的MAC地址時(shí),因為路由器不轉發(fā)廣播包的原因,ARP請求只能到達路由器。如果路由器啟用了代理ARP功能,并知道主機B屬于它連接的網(wǎng)絡(luò ),那么路由器就用自己接口的MAC地址代替主機B的MAC地址來(lái)對主機A進(jìn)行ARP應答。主機A接收ARP應答,但并不知道代理ARP的存在。 代理ARP的優(yōu)缺點(diǎn) 優(yōu)點(diǎn):代理ARP能在不影響路由表的情況下添加一個(gè)新的Router,使子網(wǎng)對該主機變得透明化。一般代理ARP應該使用在主機沒(méi)有配置默認網(wǎng)關(guān)或沒(méi)有任何路由策略的網(wǎng)絡(luò )上。 缺點(diǎn):從工作工程可以看到,這其實(shí)是一種ARP欺騙。而且,通過(guò)兩個(gè)物理網(wǎng)絡(luò )之間的路由器的代理ARP功能其實(shí)互相隱藏了物理網(wǎng)絡(luò ),這導致無(wú)法對網(wǎng)絡(luò )拓撲進(jìn)行網(wǎng)絡(luò )概括。此外,代理ARP增加了使用它的那段網(wǎng)絡(luò )的ARP流量,主機需要更大的ARP緩存空間,也不會(huì )為不使用ARP進(jìn)行地址解析的網(wǎng)絡(luò )工作。
聯(lián)系客服