咱們知道在網絡中通信,都是知道對方的IP地址後,才能發起鏈接,IP地址所在的層是網絡層,而在網絡層下面是數據鏈路層,這裏IP數據包繼續被封裝成以太網數據幀,固然還有別的數據鏈路層格式,可是數據鏈路層也須要尋址機制,經常就是48bit的硬件地址,又叫MAC地址。 html
任什麼時候候,當咱們發起一個網絡接連時,無非有如下的過程:緩存
知道目標主機名,經過gethostname
函數將主機名轉換爲IP地址,這個函數在DNS(域名系統)中稱爲解析器,這裏推薦看一下阮一峯老師的博文:DNS原理入門。網絡
應用程序經過TCP或者UDP使用獲得的IP創建鏈接。函數
若是目標主機在本地網絡上,知道IP地址,咱們就能夠找到對應的主機,若是目標主機在遠程網絡中,系統就會找位於本地網絡的下一站路由地址,經過IP選路讓路由器轉發IP數據報,這些操做屬於IP協議的核心,在此略過。oop
當主機知道IP地址,並把數據報發過去的過程以前,主機在鏈路層其實是要知道目標主機的物理地址的,每臺主機的物理地址又稱MAC地址是全球惟一的。在這一步,就須要咱們的ARP協議。命令行
ARP協議發送一個ARP請求,這個ARP請求是一個廣播數據幀,意味着局域網內,每一臺機器都能收到,ARP數據幀中包含着目的主機的IP地址,由於是廣播發送,若是哪臺主機擁有這個IP,則會反饋消息,發回本身的硬件地址。設計
獲得了目的主機的硬件地址後,就包含着IP數據報的以太網數據幀就能夠正常發送了。代理
在以太網中,ARP請求和應答都有着下面的分組格式。code
FF:FF:FF:FF:FF:FF
則爲廣播地址,在本地局域網內,全部的以太網接口都要接收這個數據幀。
幀類型:2個字節長的幀類型,告訴咱們這個以太網數據幀攜帶的是什麼數據。對於ARP來講這兩個字節是0x0806
,對於IP數據報是0x0800
,還有RARP(逆地址解析協議)是0x8035
。cdn
硬件類型和協議類型:這兩個字段就是用來描述ARP分組的,硬件類型用來指代須要什麼樣的物理地址,協議類型則是須要映射的協議地址類型。用來描述ARP時,表達的就是我有協議類型IP,我須要的硬件類型是以太網的物理地址。那麼硬件地址就爲1,表示以太網地址,協議類型是0x0800
,看這邊與前面的幀類型中提到的IP數據報的幀類型是同樣的,這是有意設計的。
硬件地址長度和協議地址長度:這裏的值分別爲6字節和4字節。表明48bit的以太網地址,32bit的IP地址。
操做碼:1=>ARP請求, 2=>ARP應答,3=>RARP請求,4=>RARP應答。這些值用於區分具體操做類型,由於字段都相同,因此必須指明操做碼,否則連請求仍是應答都分不清。
最後四個字段:
知道了ARP發送的原理後,咱們不由疑惑,若是每次發以前都要發送ARP請求硬件地址會不會太慢,可是實際上ARP的運行是很是高效的。那是由於每個主機上都有一個ARP高速緩存,咱們能夠在命令行鍵入arp -a
獲取本機ARP高速緩存的全部內容:
以上說的都是在一個本地網絡內完成的,若是ARP請求是從一個網絡主機發送到另外一個網絡主機呢?下面介紹ARP代理的概念
若是ARP請求是從一個網絡主機發送到另外一個網絡主機,那麼鏈接這兩個主機的路由器就能夠回答該請求,這個過程稱爲委託ARP或者ARP代理。咱們知道IP路由選擇,若是主機不相連,咱們就把數據報發送到一默認路由上,由路由器來轉發該數據報。在ARP協議中,咱們發往網絡的請求主機物理地址也會由路由器回答,獲得的就是路由器的物理地址,發送方就根據這個物理地址把數據報發送到路由器,由路由器轉發,再下面的事情由路由器完成,那是屬於IP協議的事了,固然在那個過程當中,也不斷使用ARP協議獲取每一步的物理地址。
這種狀況須要將包發給默認網關,因此主要獲取網關的MAC地址
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數據包發出時便可偵測到。此方式已在一些廠牌的網絡設備產品所支持。
參考資料: