本文主要講述了ARP的做用、ARP分組格式、ARP高速緩存、免費ARP和代理ARP。緩存
應用接受用戶提交的數據,觸發TCP創建鏈接,TCP的第一個SYN報文經過connect函數到達IP層,IP層經過查詢路由表:安全
若是目的IP和本身在同一個網段:服務器
當IP層的ARP高速緩存表中存在目的IP對應的MAC地址時,則調用網絡接口send函數(參數爲IP Packet和目的MAC))將數據提交給網絡接口,網絡接口完成Ethernet Header + IP + CRC的封裝,併發送出去;網絡
當IP層的ARP高速緩存表中不存在目的IP對應的MAC地址時,則IP層將TCP的SYN緩存下來,發送ARP廣播請求目的IP的MAC,收到ARP應答以後,將應答之中的<IP地址,對應的MAC>對緩存在本地ARP高速緩存表中,而後完成TCP SYN的IP封裝,調用網絡接口send函數(參數爲IP Packet和目的MAC))將數據提交給網絡接口,網絡接口完成Ethernet Header + IP + CRC的封裝,併發送出去;。併發
若是目的IP地址和本身不在同一個網段,就須要將包發送給默認網關,這須要知道默認網關的MAC地址:函數
當IP層的ARP高速緩存表中存在默認網關對應的MAC地址時,則調用網絡接口send函數(參數爲IP Packet和默認網關的MAC)將數據提交給網絡接口,網絡接口完成Ethernet Header + IP + CRC工具
OSI模型有七層,TCP在第4層傳輸層,IP在第3層網絡層,而ARP在第2層數據鏈路層。高層對低層是有強依賴的,因此TCP的創建前要進行ARP的請求和應答。學習
ARP高速緩存表在IP層使用。若是每次創建TCP鏈接都發送ARP請求,會下降效率,所以在主機、交換機、路由器上都會有ARP緩存表。創建TCP鏈接時先查詢ARP緩存表,若是有效,直接讀取ARP表項的內容進行第二層數據包的發送;只有表失效時才進行ARP請求和應答進行MAC地址的獲取,以創建TCP鏈接。spa
要了解ARP的做用,首先要分清兩個「地址」:代理
(1)TCP/IP的32bit IP地址。僅知道主機的IP地址不能讓內核發送數據幀給主機。
(2)網絡接口的硬件地址,它是一個48bit的值,用來標識不一樣的以太網或令牌環網絡接口。在硬件層次上,進行數據交換必須有正確的接口地址,內核必須知道目的端的硬件地址才能發送數據。
簡言之,就是在以太網中,一臺主機要把數據幀發送到同一局域網上的另外一臺主機時,設備驅動程序必須知道以太網地址才能發送數據。而咱們只知道IP地址,這時就須要採用ARP協議將IP地址映射爲以太網地址。
要注意一點,通常認爲ARP協議只使適用於局域網。
ARP分組的格式以下圖:
先要清楚,通常說以太網地址就是指MAC地址。
字段1是ARP請求的目的以太網地址,全1時表明廣播地址。
字段2是發送ARP請求的以太網地址。
字段3以太網幀類型表示的是後面的數據類型,ARP請求和ARP應答這個值爲0x0806。
字段4表示硬件地址的類型,硬件地址不僅以太網一種,是以太網類型時此值爲1。
字段5表示要映射的協議地址的類型,要對IPv4地址進行映射,此值爲0x0800。
字段6和7表示硬件地址長度和協議地址長度,MAC地址佔6字節,IP地址佔4字節。
字段8是操做類型字段,值爲1,表示進行ARP請求;值爲2,表示進行ARP應答;值爲3,表示進行RARP請求;值爲4,表示進行RARP應答。
字段9是發送端ARP請求或應答的硬件地址,這裏是以太網地址,和字段2相同。
字段10是發送ARP請求或應答的IP地址。
字段11和12是目的端的硬件地址和協議地址。
下面是抓取的ARP數據包,能夠對照上面的說明進行理解。
圖中紅框圈起來的是一對ARP請求和ARP應答。
下面兩張圖分別是ARP請求和相應的ARP應答的分組格式截圖。
ARP請求分組中,字段11目的MAC地址未知,用全0進行填充。
ARP應答分組中,將ARP請求中的源和目的地址進行交換,此外,變化的還有字段8 Opcode。其他字段內容不會發生變化。
那麼咱們是如何區分ARP請求和ARP應答分組的呢?
分組中的地址字段和其餘相同的字段沒法做爲區分依據,這時Opcode字段就發揮了做用,根據Opcode的值能夠肯定是請求仍是應答,是ARP仍是RARP。
定義
ARP緩存是一個緩衝區,用來儲存IP地址和MAC地址,本質就是<IP地址,MAC地址>的對應表。表中一個條目記錄了網絡上一個主機的IP地址和其對應的MAC地址。
每個以太網或令牌環網絡適配器都有本身單獨的表。
當地址解析協議被詢問一個已知IP地址節點的MAC地址時,先在ARP緩存中查看,若存在,就直接返回與之對應的MAC地址,若不存在,才發送ARP請求向局域網查詢。
ARP緩存表項的生存時間TTL
ARP緩存包含動態和靜態項目:
動態項目隨時間推移自動添加和刪除,每一個動態ARP緩存項都有都設置了TTL(生存時間),TTL爲0時此項目就從表中刪除,Windows下TTL通常不超過10分鐘。
靜態 ARP 緩存條目是永久性的,可使用 TCP/IP 工具手動添加和刪除。靜態 ARP 緩存條目用來禁止節點發送對經常使用的本地IPv4地址(例如路由器和服務器的 IPv4 地址)的ARP請求。
ARP高速緩存的使用
當主機發送一個ARP請求時,先查看ARP高速緩存表,若是存在對應條目,則直接返回MAC地址,不然向局域網發送ARP請求廣播。
ARP高速緩存的優缺點
優勢:從ARP高速緩存的使用中能夠看到,ARP高速緩存能夠減少廣播量,進而減少網絡通訊量,提升計算機之間的通訊效率。
缺點:形成安全隱患(參考下面免費ARP的做用)。
定義
免費ARP指主機發送ARP查找本身的IP地址,一般發生在系統引導期間進行接口配置時。
與標準ARP的區別就是免費ARP分組的目的IP地址字段封裝的是本身的IP地址,即向所在網絡請求本身的MAC地址。
做用
免費ARP的做用有:
1) 一個主機能夠經過它來肯定另外一個主機是否設置了相同的 IP地址。
正常狀況下發送免費ARP請求不會收到ARP應答,若是收到了一個ARP應答,則說明網絡中存在與本機相同的IP地址的主機,發生了地址衝突。
2)更新其餘主機高速緩存中舊的硬件地址進行。
若是發送免費ARP的主機正好改變了硬件地址,如更換了接口卡。
其餘主機接收到這個ARP請求的時候,發現本身的ARP高速緩存表中存在對應的IP地址,可是MAC地址不匹配,那麼就須要利用接收的ARP請求來更新本地的ARP高速緩存表表項。
3)網關利用免費ARP防止ARP攻擊
有些網關設備在必定的時間間隔內向網絡主動發送免費ARP報文,讓網絡內的其餘主機更新ARP表項中的網關MAC地址信息,以達到防止或緩解ARP攻擊的效果。
4)利用免費ARP進行ARP攻擊
ARP協議並不僅在發送了ARP請求才接收ARP應答,計算機只要接收到ARP應答數據包,就會使用應答中的IP和MAC地址對本地的ARP緩存進行更新。
主機能夠構造虛假的免費ARP應答,將ARP的源MAC地址設爲錯誤的MAC地址,並把這個虛假的免費ARP應答發送到網絡中,那麼全部接收到這個免費ARP應答的主機都會更新本地ARP表項中相應IP地址對應的MAC地址。更新成功後,這些主機的數據報文就會被轉發到錯誤的MAC地址,從而實現了ARP欺騙的攻擊。
定義
代理ARP就是經過使用一個主機(一般爲router),來做爲指定的設備使用本身的 MAC 地址來對另外一設備的ARP請求做出應答。
爲何須要代理ARP?
先要了解,路由器的重要功能之一就是把局域網的廣播包限制在該網內,阻止其擴散,不然會形成網絡風暴。
ARP請求是個廣播包,它詢問的對象若是在同一個局域網內,就會收到應答。可是若是詢問的對象不在同一個局域網該如何處理?路由器就提供的代理ARP爲這個問題提供瞭解決方案。
工做過程
兩臺主機A和B處於同一網段但不一樣的廣播段時,主機A發送ARP請求主機B的MAC地址時,由於路由器不轉發廣播包的緣由,ARP請求只能到達路由器。若是路由器啓用了代理ARP功能,並知道主機B屬於它鏈接的網絡,那麼路由器就用本身接口的MAC地址代替主機B的MAC地址來對主機A進行ARP應答。主機A接收ARP應答,但並不知道代理ARP的存在。
代理ARP的優缺點
優勢:代理ARP能在不影響路由表的狀況下添加一個新的Router,使子網對該主機變得透明化。通常代理ARP應該使用在主機沒有配置默認網關或沒有任何路由策略的網絡上。
缺點:從工做工程能夠看到,這實際上是一種ARP欺騙。並且,經過兩個物理網絡之間的路由器的代理ARP功能其實互相隱藏了物理網絡,這致使沒法對網絡拓撲進行網絡歸納。此外,代理ARP增長了使用它的那段網絡的ARP流量,主機須要更大的ARP緩存空間,也不會爲不使用ARP進行地址解析的網絡工做。