太強了,5幅圖就拿下了ARP協議 前言 ARP 概要 ARP 的工作原理

前言

在上一篇文章 別再恐懼 IP 協議 中, 我們瞭解到,網絡層實現主機之間的通信,而鏈路層實現具體每段鏈路之間的通信。也就是說:只要在網絡層確定了 IP 地址,就可以向這個目標地址發送 IP 數據報。然而,在底層數據鏈路層,進行實際通信時卻有必要了解每個 IP 地址所對應的 MAC 地址。

對於這段話不太瞭解的小夥伴強烈推薦翻看上篇講解 IP 協議的文章 別再恐懼 IP 協議,有非常詳細的解釋和圖例

那麼,ARP 就是用來實現由 IP 地址到 MAC 地址轉化的一個網絡層協議,當然,還有一個 RARP 協議可以實現由 MAC 地址到 IP 地址的轉化。兩者原理都差不多,本文就以 ARP 協議爲例進行講解。

ARP 概要

ARP(Address Resolution Protocol )地址解析協議:實現由 IP 地址到 MAC 地址的轉換。準確的來說,ARP 協議以目標 IP 地址爲線索,用來定位下一個應該數據分包的網絡設備對應的 MAC 地址。

以買車票爲例:我們把數據鏈路層當成乘坐高鐵從蘇州到南京,再在南京轉乘到北京,再在北京轉乘到西藏的旅客,那麼網絡層就相當於每個車站的工作人員,在數據鏈路層每次轉乘時,網絡層爲其購買了一張標有下一個 MAC 地址的車票。因此,即使旅客(數據鏈路層)不知道其最終目的地也沒有關係,工作人員(網絡層)會給你做出指引。

那麼,ARP 協議做的事情就是在數據鏈路層每次換乘時,爲其購買一張標有下一個 MAC 地址的車票

[圖片上傳失敗...(image-8d9387-1611578463853)]

具體來說,網絡層對數據鏈路層做出指引的過程稱爲路由控制,指引數據鏈路層的下一站是哪。爲了將數據包發送給目標主機,所有主機和路由器都維護着一張路由控制表(Routing Table),該表記錄着如下兩個字段:

  • 1)IP 地址
  • 2)如果想要到達這個 IP 地址,在當前路由器,數據包的下一步應該是發送到哪個路由器

很不幸的是,路由控制表中記錄的是這個數據包下一步應該發送到的 IP 地址,但是數據鏈路層進行通信的時候,它只認得 MAC 地址。所以,用來實現 IP 地址到 MAC 地址轉換的 ARP 協議在此時就顯得尤爲重要。

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 地址的映射關係發生了變化,也依然能夠正確的將數據包發送給目標地址。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章