在生活中我們常常聽說ARP攻擊,到底ARP的作用是啥呢?今天來個全面的瞭解關於ARP協議的知識。網絡設備有數據要發送給另一臺網絡設備時,必須要知道對方的網絡層地址(即IP地址)。IP地址由網絡層來提供,但是僅有IP地址是不夠的,IP數據報文必須封裝成幀才能夠通過數據鏈路進行轉發。數據幀必須要包含目的MAC地址,因此發送端還必須獲取到目的MAC地址。通過目的IP地址而獲取目的MAC地址的過程由ARP(Address Resolution Protocol)協議來實現。
ARP數據包格式
PS:ARP報文不能穿越路由器,不能被轉發到其他廣播域
網絡設備通過ARP報文來發現目的MAC地址。 ARP報文中包含以下字段
- Hardware Type表示硬件地址類型, 一般為以太網;
- Protocol Type表示三層協議地址類型, 一般為IP;
- Hardware Length和Protocol Length為MAC地址和IP地址的長度單位是字節;
- Operation Code指定了ARP報文的類型, 包括ARP request和ARP reply;
- Source Hardware Address指的是發送ARP報文的設備MAC地址;
- Source Protocol Address指的是發送ARP報文的設備IP地址;
- Destination Hardware Address指的是接收者MAC地址在ARPrequest報文中 該字段值為0;
- Destination Protocol Address指的是指接收者的IP地址。
ARP工作過程
主機A發送一個數據包給主機C之前,首先獲取主機C的MAC地址。通過ARP協議, 網絡設備可以建立目標IP地址和MAC地址之間的映射。網絡設備通過網絡層獲取到目的IP地址之後, 還要判斷目的MAC地址是否已知。
ARP緩存
網絡設備一般都有一個ARP緩存(ARP Cache) , ARP緩存用來存放IP地址和MAC地址的關聯信息。 在發送數據前, 設備會先查找ARP緩存表。 如果緩存表中存在對方設備的MAC地址, 則直接採用該MAC地址來封裝幀, 然後將幀發送出去。 如果緩存表中不存在相應信息, 則通過發送ARP request報文來獲得它。 學習到的IP地址和MAC地址的映射關係會被放入ARP緩存表中存放一段時間。 在有效期內, 設備可以直接從這個表中查找目的MAC地址來進行數據封裝, 而無需進行ARP查詢。 過了這段有效期, ARP表項會被自動刪除。
如果目標設備位於其他網絡, 則源設備會在ARP緩存表中查找網關的MAC地址, 然後將數據發送給網關, 網關再把數據轉發給目的設備。
ARP請求
本例中,主機A的ARP緩存表中不存在主機C的MAC地址, 所以主機A會發送ARP request來獲取目的MAC地址。 ARP request報文封裝在以太幀裡。 幀頭中的源MAC地址為發送端主機A的MAC地址。 此時, 由於主機A不知道主機C的MAC地址, 所以目的MAC地址為
廣播地址FF-FFFF-FF-FF-FF。 ARP request報文中包含源IP地址、 目的IP地址、 源MAC地址、 目的MAC地址, 其中目的MAC地址的值為0。ARP Request報文會在整個網絡上傳播, 該網絡中所有主機包括網關都會接收到此ARP request報文。 網關將會阻止該報文發送到其他網絡上。ARP響應
所有的主機接收到該ARP Request報文後, 會檢查它的目的協議地址字段與自身的IP地址是否匹配。 如果不匹配, 則該主機將不會響應該ARP Request報文。 如果匹配, 則該主機會將ARP報文中的源MAC地址和源IP地址信息記錄到自己的ARP緩存表中, 然後通過ARP Reply報文進行響應。
主機C會向主機A回應ARP Reply報文。 ARP Reply報文中的源協議地址是主機C自己的IP地址, 目標協議地址是主機A的IP地址, 目的MAC地址 是 主 機 A 的 MAC 地 址 , 源 MAC 地 址 是 自 己 的 MAC 地 址 , 同 時Operation Code被設置為reply。
ARP Reply報文通過單播傳送。ARP緩存
主機A收到ARP Reply以後, 會檢查ARP報文中目的MAC地址是否與自己的MAC匹配。 如果匹配, ARP報文中的源MAC地址和源IP地址會被記錄到主機A的ARP緩存表中。 ARP表項的老化超時時間缺省為1200秒。
ARP代理
在上述例子的組網中,主機A需要與主機B通信時, 目的IP地址與本機的IP地址位於不同網絡, 但是由於主機A未配置網關, 所以它將會以廣播形式發送ARP Request報文, 請求主機B的MAC地址。 但是, 廣播報文無法被路由器轉發, 所以主機B無法收到主機A的ARP請求報文, 當然也就無法應答。
在路由器上啟用代理ARP功能, 就可以解決這個問題。 啟用代理ARP後, 路由器收到這樣的請求, 會查找路由表, 如果存在主機B的路由表項, 路由器將會使用自己的G0/0/0接口的MAC地址來回應該ARP request。 主機A收到ARP reply後, 將以路由器的G0/0/0接口MAC地址作為目的MAC地址進行數據轉發。
路由器啟用代理ARP功能:在接口模式下執行如下命令
arp-proxy enable
免費ARP
免費ARP是用來探測IP地址是否衝突。
主機被分配了IP地址或者IP地址發生變更後, 必須立刻檢測其所分配的IP地址在網絡上是否是唯一的, 以避免地址衝突。 主機通過發送ARP request報文來進行地址衝突檢測。
主機A將ARP Request廣播報文中的目的IP地址字段設置為自己的IP地址, 該網絡中所有主機包括網關都會接收到此報文。 當目的IP地址已經被某一個主機或網關使用時, 該主機或網關就會回應ARP reply報文。通過這種方式,主機A就能探測到IP地址衝突了。
閱讀更多 攻城獅成長之路 的文章