5 幅图拿下 ARP 协议
0. 前言
在上一篇文章?別再恐懼 IP 協議?中, 我們了解到,「網絡層實現主機之間的通信,而鏈路層實現具體每段鏈路之間的通信」。也就是說:只要在網絡層確定了 IP 地址,就可以向這個目標地址發送 IP 數據報。然而,在底層數據鏈路層,進行實際通信時卻有必要了解每個 IP 地址所對應的 MAC 地址。
那么,ARP 就是用來實現由 IP 地址到 MAC 地址轉化的一個「網絡層協議」,當然,還有一個 RARP 協議可以實現由 MAC 地址到 IP 地址的轉化。兩者原理都差不多,本文就以 ARP 協議為例進行講解。
?
1. ARP 概要
「ARP(Address Resolution Protocol )地址解析協議」:實現由 IP 地址到 MAC 地址的轉換。準確的來說,ARP 協議以目標 IP 地址為線索,用來定位下一個應該數據分包的網絡設備對應的 MAC 地址。
🍉 以買車票為例:我們把數據鏈路層當成乘坐高鐵從蘇州到南京,再在南京轉乘到北京,再在北京轉乘到西藏的旅客,那么網絡層就相當于每個車站的工作人員,「在數據鏈路層每次轉乘時,網絡層為其購買了一張標有下一個 MAC 地址的車票」。因此,即使旅客(數據鏈路層)不知道其最終目的地也沒有關系,工作人員(網絡層)會給你做出指引。
那么,「ARP 協議做的事情就是在數據鏈路層每次換乘時,為其購買一張標有下一個 MAC 地址的車票」
具體來說,網絡層對數據鏈路層做出指引的過程稱為「路由控制」,指引數據鏈路層的下一站是哪。為了將數據包發送給目標主機,所有主機和路由器都維護著一張「路由控制表」(Routing Table),該表記錄著如下兩個字段:
-
1)IP 地址
-
2)如果想要到達這個 IP 地址,在當前路由器,數據包的下一步應該是發送到哪個路由器
很不幸的是,路由控制表中記錄的是這個數據包下一步應該發送到的 IP 地址,但是數據鏈路層進行通信的時候,它只認得 MAC 地址。所以,用來實現 IP 地址到 MAC 地址轉換的 ARP 協議在此時就顯得尤為重要。
?
2. ARP 的工作原理
那么 ARP 又是如何知道 MAC 地址的呢?
簡單地說,ARP 是借助?「ARP 請求與 ARP 響應」兩種類型的包確定 MAC 地址的。并且每個主機都有一個?「ARP 高速緩存」,里面有本局域網上的各主機和路由器的?「IP 地址到 MAC 地址的映射表」。
如下圖所示,假定主機 A 向同一鏈路上的主機 B 發送 IP 數據報,已知主機 A 和主機 B 的 IP 地址,它們互不知道對方的 MAC 地址:
1)首先,主機 A 為了獲得主機 B 的 MAC 地址,它會先去查詢自己的 ARP 高速緩存中有沒有主機 B 的相關記錄;
2)如果主機 A 的 ARP 高速緩存中沒有主機 B 的 IP 地址到 MAC 地址的映射,主機 A 就會通過「廣播」的方式發送?「ARP 請求包」(該包攜帶自己的 IP 地址 和 MAC 地址 以及 目標主機的 IP 地址),表明自己想要獲得主機 B 的 MAC 地址;
2) 由于廣播請求可以被同一個鏈路上的所有主機或路由器接收,因此如果這條鏈路上某個主機或路由的 IP 地址與這個 ARP 請求包中包含的目標主機的 IP 地址相同,那么這個節點就將自己的 MAC 地址塞入?「ARP 響應包」中返回給主機 A;
?當然,ARP 響應包是以單播的形式進行發送的,畢竟 ARP 請求包中已經包含了主機 A 的 IP 地址,所以主機 B 非常清楚這個響應包應該發送給誰。大部分網絡協議在設計的時候,都是保持極度克制的,不需要的交互就砍掉,能合并的信息就合并,能不用廣播就用單播,以此讓帶寬變得更多讓網絡變得更快。?3)主機 A 在收到主機 B 發過來的 ARP 響應包后,向其 ARP 高速緩存中寫入主機 B 的 IP 地址到 MAC 地址的映射。
當然,緩存是有一定期限的,超過這個期限,緩存的內容將被清空。這也使得即使 MAC 地址和 IP 地址的映射關系發生了變化,也依然能夠正確的將數據包發送給目標地址。
?
總結
以上是生活随笔為你收集整理的5 幅图拿下 ARP 协议的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OTB数据集评测工具---tracker
- 下一篇: jcrop 用法小结