理解ARP協議

咱們知道在網絡中通信,都是知道對方的IP地址後,才能發起鏈接,IP地址所在的層是網絡層,而在網絡層下面是數據鏈路層,這裏IP數據包繼續被封裝成以太網數據幀,固然還有別的數據鏈路層格式,可是數據鏈路層也須要尋址機制,經常就是48bit的硬件地址,又叫MAC地址。 html

ARP
ARP協議就是起到在IP地址到對應的硬件地址之間提供映射做用的,因此ARP協議又叫 地址解析協議

基本工做流

任什麼時候候,當咱們發起一個網絡接連時,無非有如下的過程:緩存

  1. 知道目標主機名,經過gethostname函數將主機名轉換爲IP地址,這個函數在DNS(域名系統)中稱爲解析器,這裏推薦看一下阮一峯老師的博文:DNS原理入門網絡

  2. 應用程序經過TCP或者UDP使用獲得的IP創建鏈接。函數

  3. 若是目標主機在本地網絡上,知道IP地址,咱們就能夠找到對應的主機,若是目標主機在遠程網絡中,系統就會找位於本地網絡的下一站路由地址,經過IP選路讓路由器轉發IP數據報,這些操做屬於IP協議的核心,在此略過。oop

  4. 當主機知道IP地址,並把數據報發過去的過程以前,主機在鏈路層其實是要知道目標主機的物理地址的,每臺主機的物理地址又稱MAC地址是全球惟一的。在這一步,就須要咱們的ARP協議。命令行

  5. ARP協議發送一個ARP請求,這個ARP請求是一個廣播數據幀,意味着局域網內,每一臺機器都能收到,ARP數據幀中包含着目的主機的IP地址,由於是廣播發送,若是哪臺主機擁有這個IP,則會反饋消息,發回本身的硬件地址。設計

  6. 獲得了目的主機的硬件地址後,就包含着IP數據報的以太網數據幀就能夠正常發送了。代理

ARP的分組格式

在以太網中,ARP請求和應答都有着下面的分組格式。code

分組格式
以太網的目的地址和源地址:目的以太網地址全爲1,即 FF:FF:FF:FF:FF:FF則爲廣播地址,在本地局域網內,全部的以太網接口都要接收這個數據幀。

幀類型:2個字節長的幀類型,告訴咱們這個以太網數據幀攜帶的是什麼數據。對於ARP來講這兩個字節是0x0806,對於IP數據報是0x0800,還有RARP(逆地址解析協議)是0x8035cdn

硬件類型和協議類型:這兩個字段就是用來描述ARP分組的,硬件類型用來指代須要什麼樣的物理地址,協議類型則是須要映射的協議地址類型。用來描述ARP時,表達的就是我有協議類型IP,我須要的硬件類型是以太網的物理地址。那麼硬件地址就爲1,表示以太網地址,協議類型是0x0800,看這邊與前面的幀類型中提到的IP數據報的幀類型是同樣的,這是有意設計的。

硬件地址長度和協議地址長度:這裏的值分別爲6字節和4字節。表明48bit的以太網地址,32bit的IP地址。

操做碼:1=>ARP請求, 2=>ARP應答,3=>RARP請求,4=>RARP應答。這些值用於區分具體操做類型,由於字段都相同,因此必須指明操做碼,否則連請求仍是應答都分不清。

最後四個字段

  • 源硬件地址
  • 源協議地址
  • 目標硬件地址
  • 目標協議地址。 注意到這裏有兩個字段是與分組首端重複的。咱們在發送ARP請求時,只有目標硬件地址是空着的,由於咱們請求的就是它的值,當對應機器收到後,就會把本身的硬件地址寫到這個字段,並把操做碼改爲2,再發回去。因而就知道彼此的硬件地址,開始真正的通信。

ARP高速緩存

知道了ARP發送的原理後,咱們不由疑惑,若是每次發以前都要發送ARP請求硬件地址會不會太慢,可是實際上ARP的運行是很是高效的。那是由於每個主機上都有一個ARP高速緩存,咱們能夠在命令行鍵入arp -a獲取本機ARP高速緩存的全部內容:

arp -a
高速緩存中的每一項的生存時間通常爲20分鐘,有了這些緩存,咱們常常直接使用硬件地址,加快速度了。

以上說的都是在一個本地網絡內完成的,若是ARP請求是從一個網絡主機發送到另外一個網絡主機呢?下面介紹ARP代理的概念

ARP代理

若是ARP請求是從一個網絡主機發送到另外一個網絡主機,那麼鏈接這兩個主機的路由器就能夠回答該請求,這個過程稱爲委託ARP或者ARP代理。咱們知道IP路由選擇,若是主機不相連,咱們就把數據報發送到一默認路由上,由路由器來轉發該數據報。在ARP協議中,咱們發往網絡的請求主機物理地址也會由路由器回答,獲得的就是路由器的物理地址,發送方就根據這個物理地址把數據報發送到路由器,由路由器轉發,再下面的事情由路由器完成,那是屬於IP協議的事了,固然在那個過程當中,也不斷使用ARP協議獲取每一步的物理地址。

總結

目標IP與本身在同一網段

  • arp高速緩存有目標IP的MAC地址:直接發送到該物理地址
  • arp高速緩存沒有目標IP的MAC地址:發送ARP廣播請求目標IP的MAC地址,緩存該MAC地址,而後發數據報到該MAC地址。

目標IP與本身不在同一個網段

這種狀況須要將包發給默認網關,因此主要獲取網關的MAC地址

  • arp高速緩存有默認網關的MAC地址:直接發送IP數據報道默認網關,再由網關轉發到外網。
  • arp高速緩存沒有默認網關的MAC地址 :仍是發送ARP廣播請求默認網關的MAC地址,緩存該地址,而且發送數據報到網關。

另一個話題:ARP欺騙

ARP欺騙又叫ARP毒化,英文ARP spoofing,是一種針對ARP的攻擊方式,這裏簡略介紹一下。 運行機制 ARP欺騙主要是攻擊者發送大量假的ARP數據包到網絡上,尤爲是網關上。假設你的網關的IP地址是192.168.0.2,MAC地址爲00-11-22-33-44-55,你發送的數據都會從這個MAC地址通過,這時候我發送大量ARP數據包,然而個人包是構造出來的,IP是你的IP,可是MAC地址我替換成了個人MAC地址,這時候你更新你的ARP緩存時,就會把我機器的MAC地址當成192.168.0.2的MAC地址,因而你的流量都到我這來了,我能夠把你的數據改改再發給網關,或者什麼都不作,你都上不了網了。 防治方法 最理想的用靜態ARP,不過在大型網絡不行,由於ARP常常須要更新,另一種方法,例如DHCP snooping,網絡設備可藉由DHCP保留網絡上各電腦的MAC地址,在僞造的ARP數據包發出時便可偵測到。此方式已在一些廠牌的網絡設備產品所支持。

參考資料:

相關文章
相關標籤/搜索