計算機網絡(六)——ARP協議


ARP協議是“Address Resolution Protocol”(地址解析協議)的縮寫。

ARP協議是地址解析的通用協議,提供了網絡層地址(IP地址)到物理地址(mac地址)之間的動態映射。其作用是在數據的傳輸過程中將已知IP地址轉換為MAC地址

為什么需要通過IP地址獲取MAC地址?

當網絡設備要發送數據給另一台設備時,必須要知道對方的網絡層地址(即IP地址)。但是僅有IP地址是不夠的,IP數據報文必須封裝成幀才能通過數據鏈路進行發送。而數據幀必須包含目的MAC地址,因此發送端還必須獲取到目的MAC地址。通過目的IP地址而獲取目的MAC地址的過程是由ARP協議來實現的

  • IPv4中,我們使用ARP地址解析協議來完成IP地址與物理地址的轉化;
  • IPv6中,使用鄰居發現協議(NDP協議)進行IP地址與物理地址的轉化,它包含在ICMPv6中。 

ARP協議工作原理

發送之前先檢索ARP緩存表中是否有對應目的主機,沒有的話主機發送信息時將包含目標IP地址的ARP請求廣播到局域網絡上的所有主機,並接收返回消息,以此確定目標的物理地址;收到返回消息后將該IP地址和物理地址存入本機ARP緩存中並保留一定時間,下次請求時直接查詢ARP緩存以節約資源。

實際工作過程

主機A的IP地址為192.168.1.1,MAC地址為0A-11-22-33-44-01;
主機B的IP地址為192.168.1.2,MAC地址為0A-11-22-33-44-02;
主機A要與主機B通信,地址解析協議(ARP)可以將主機B的IP地址(192.168.1.2)解析成主機B的MAC地址,以下為工作流程:
1:根據主機A上的路由表內容,IP確定用於訪問主機B的轉發IP地址是192.168.1.2。然后A主機在自己的 本地ARP緩存中檢查主機B的匹配MAC地址。
2:如果主機A在ARP緩存中沒有找到映射,它將詢問192.168.1.2的硬件地址,從而將 ARP請求幀廣播到本地網絡上的所有主機。源主機A的IP地址和MAC地址都包括在ARP請求中。本地網絡上的每台主機都接收到ARP請求並且檢查是否與自己的IP地址匹配。如果主機發現請求的IP地址與自己的IP地址不匹配,它將丟棄ARP請求。
3:如果主機發現請求的IP地址與自己的IP地址不匹配,它將丟棄ARP請求。而主機B 確定ARP請求中的IP地址與自己的IP地址匹配,則將主機A的IP地址和MAC地址映射添加到本地ARP緩存中
4:主機B 將包含其MAC地址的ARP回復消息直接發送回主機A
5:當 主機A收到從主機B發來的ARP回復消息時,會用主機B的IP和MAC地址映射更新ARP緩存。本機緩存是有生存期的,生存期結束后,將再次重復上面的過程。主機B的MAC地址一旦確定,主機A就能向主機B發送IP通信了。

ARP協議報文

Hardware Type—— 表示硬件地址類型,一般為以太網
Protocol Type  —— 表示三層協議地址類型,一般為IP
Hardware LengthProtocol 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 緩存

網絡設備一般都有一個ARP緩存(ARP Cache),ARP緩存用來存放IP地址和MAC地址的關聯信息

在發送數據前,設備會先查找ARP緩存表。

  • 如果緩存表中存在對方設備的MAC地址,則直接采用該MAC地址來封裝幀,然后將幀發送出去。
  • 如果緩存表中不存在相應信息,則通過發送ARP Request報文來獲得它。

學習到的IP地址和MAC地址的映射關系會被放入ARP緩存表中存放一段時間。在有效期內,設備可以直接從這個表中查找目的MAC地址來進行數據封裝,而無需進行ARP查詢。過了這段有效期,ARP表項會被自動刪除。

如果目標設備位於其他網絡,則源設備會在ARP緩存表中查找網關的MAC地址,然后將數據發送給網關,網關再把數據轉發給目的設備。

ARP 請求

當主機需要找出這個網絡中的另一個主機的物理地址時,它就可以發送一個ARP請求報文,這個報文包好了發送方的MAC地址和IP地址以及接收方的IP地址。

如圖,主機A的ARP緩存表中不存在主機C的MAC地址,所以主機A會發送ARP Request來獲取目的MAC地址。ARP Request報文封裝在以太幀里。幀頭中的源MAC地址為發送端主機A的MAC地址。此時,由於主機A不知道主機C的MAC地址,所以目的MAC地址為廣播地址FF-FF-FF-FF-FF-FF。ARP Request報文中包含源IP地址、目的IP地址、源MAC地址、目的MAC地址,其中目的MAC地址的值為0。ARP Request報文會在整個網絡上傳播(廣播),該網絡中所有主機包括網關都會接收到此ARP Request報文。網關將會阻止該報文發送到其他網絡上(ARP報文不能跨網段傳播)。

ARP 響應

局域網中的每一台主機都會接受並處理這個ARP請求報文,然后進行驗證,查看接收方的IP地址是不是自己的地址,只有驗證成功的主機才會返回一個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 Request報文,請求B的MAC地址,但是廣播報文無法被路由器轉發,所以主機B無法收到主機A的請求報文。

在上述例子的組網中,主機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

主機被分配了IP地址或者IP地址發生變更后,必須立刻檢測其所分配的IP地址在網絡上是否是唯一的,以避免地址沖突。主機通過發送ARP Request報文來進行地址沖突檢測,這種操作被稱為免費ARP。

主機A將ARP Request廣播報文中的目的IP地址字段設置為自己的IP地址,且該網絡中所有主機包括網關都會接收到此報文。當目的IP地址已經被某一個主機或網關使用時,該主機或網關就會回應ARP Reply報文。通過這種方式,主機A就能探測到IP地址沖突了。

網絡設備在什么情況下會發送ARP Request?

源設備在發送數據給目的設備前,會首先查看自身的ARP緩存,查找ARP緩存中是否存在目的設備的IP地址和MAC地址的映射。如果存在則直接使用,如果不存在則會發送ARP Request。

網絡設備什么時候會產生免費ARP?

當網絡上的一個設備被分配了IP地址或者IP地址發生變更后,可以通過免費ARP來檢查IP地址是否沖突。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM