ARP 原理
ARP(Address Resolution Protocol)地址解析協議,是根據 IP 地址獲取物理地址的一個 TCP/IP 協議。
OSI 網絡七層模型中,IP 地址在 OSI 模型第三層,MAC 地址在第二層,彼此不直接通信。
在通過以太網發送 IP 數據包時,需要封裝第三層(32 位 IP 地址)和第二層(48 位 MAC 地址)的報頭。由于發送數據包時,只知道目標 IP 地址,不知道其 MAC 地址,而又不能跨越第二、三層,所以需要使用 ARP 地址解析協議。
TCP/IP 協議棧加人 ARP 過程是給發送端設備提供一種詢問機制,“ 誰的 IP 地址是這個地址,與它相關的物理地址(硬件 MAC )是什么?”
ARP 報文和 IP 報文不同。ARP 報文和 IP 報文一樣可以嵌在以太網幀或任何 LAN 幀中。ARP 幀僅在特定的局域網網段中才有效,而且它也不會離開本地局域網(也就是說,ARP 報文不可以被路由)。
代理 ARP
代理 ARP 就是通過使用一個指定的設備(通常是路由器)使用其 MAC 地址來對另一設備的 ARP 請求作出應答。
路由器的重要功能之一就是把局域網的廣播包限制在該網內,阻止其擴散,否則會造成網絡風暴。
ARP 請求是個廣播包,它查尋的對象如果在同一個局域網內,就會收到應答,但如果不在同一個局域網該如何處理?
路由器就提供的代理 ARP 為該問題提供了解決方案。
舉例:兩臺主機 A 和 B 處于同一網段但不同的廣播段時,主機 A 發送 ARP 請求主機 B 的 MAC 地址時,因為路由器不轉發廣播包的原因,ARP 請求只能到達路由器。
如果路由器啟用了代理 ARP 功能,并知道主機 B 屬于它連接的網絡,那么路由器就用自己接口的 MAC 地址代替主機 B 的 MAC 地址來對主機 A 進行 ARP 應答。主機 A 接收 ARP 應答,但并不知道代理 ARP 的存在。
ARP 報文格式
ARP 報文結構如圖所示
上圖中展示了 28 字節的 ARP 報文,因為其包括了 1 字節、2 字節、4 字節和 6 字節等不同長度的字段,因此不能直接以普通 32 位的方式顯示。前五個字段構成了報文頭部。緊接著的 4 個字段表示發送端和目的端 IP 地址與 MAC 地址。一般來說,目的 MAC 地址需要用地址解析得出。ARP 報文還可以由一串個數不定的 0 結尾。
在以太網局域網中,ARP 報文有自己的以太網類型值 (0x0806)。然而有些 ARP 實現使用了 IP 分組中 “常規的” 以太網類型 (0x0800),因為 IP 網絡可以很容易地識別出幀內部是 IPv4 報文(報文以 0x04 開頭),還是 ARP 報文(報文以 0x0001 開頭)。
以下主要的字段在 ARP 請求和應答報文中都會出現。硬件類型 —— 用 2 字節的字段標識硬件地址的類型 (其常見的當然是以太網類型的 MAC 地址,其值 = 1)。
協議類型 —— 用 2 字節的字段標識第三層(網絡層)所用到的協議類型(ARP 消息不是 IP 報文,不止用于 IP 地址解析)。這個值和以太網幀中字段的值是一樣的,所以 IP 是 0x0800。
硬件地址長度 —— 6 字節,標識硬件以太網 MAC 地址的長度。
協議地址長度 —— 4 字節,標識第三層協議 IP 地址的長度。
操作 —— 2 字節,標識 ARP 報文的目的。
操作 op 共有 4 種類型
值為 1. ARP 請求
值為 2. ARP 應答
值為 3. RARP 請求
值為 4. RARP 應答
例如,當 ARP 發起一個請求(詢問誰有這個 IPv4 地址),該字段的值就為 1,收到的應答報文的該字段值為 2。剩下的字段都沒有固定的長度,其長度取決于硬件長度字段和協議長度字段的值。在以太局域網中,硬件地址長度是 6 字節(MAC 地址),協議地址長度是 4 字節(IPv4 地址)。在這種情況下,這些字段的長度和功能如下所示。
發送端的以太網地址 —— 6 字節,標識了發送端的以太網地址。它應該與以太網幀中的源地址相同。
發送端的 IP 地址 —— 4 字節,標識了發送端的以太網 IP 地址 (這是目的端可以在不請求更多 ARP 的情況下將信息填人 ARP 緩存的方式)。
目的端以太網地址 —— 6 字節,標識了目的端主機的以太網地址。該字段在發送請求的時候全置為 0,應答時才填入內容,并把操作字段改為 “應答”。
目的端 IP 地址 —— 4 字節,標識目的端主機的 IPv4 地址。
ARP 報文是廣播幀,會被發送給所有站點。當目的端設備在數據包的 IP 層中看到目的 IP 地址與自己的 IP 地址匹配時,就直接響應發送端。目的端設備發送響應的時候,只是簡單地把 ARP 數據包中的源 IP 地址和目的 IP 地址反轉
。目的端設備在幀和報文中也使用自己的硬件地址作為源地址。
ARP 報文的封裝
ARP報文被封裝成一個數據鏈路幀
ARP 封裝使用類型字段(Type field)標識為 0x0806,表示這是一個地址解析協議(ARP)數據包。不需要帶有 Preamble 和 SFD。ARP 消息直接嵌套在以太網幀或其他局域網幀中,這些幀已經包含了前導碼和幀起始定界符。
ARP 解析過程 by charsek
via: ARP 報文詳解 - charseki - 博客園
https://www.cnblogs.com/chenshengkai/p/13936532.html
(1)當 PC1 想發送數據給 PC2,首先在自己的本地 ARP 緩存表中檢查主機 PC2 匹配的 MAC 地址
(2)如果 PC1 緩存中沒有找到響應的條目,它將詢問主機 PC2 的 MAC 地址,從而將 ARP 請求幀廣播到本地網絡的所有主機。該幀中包括源主機 PC1 的 IP、MAC 地址,本地網絡中的所有主機都接收到 ARP 請求,并且檢查是否與自己的 IP 地址相匹配。如果發現請求中 IP 地址與自己 IP 不匹配,則丟棄 ARP 請求。
(3)主機 PC2 確定 ARP 請求中的 IP 地址與自己的 IP 地址匹配,則將主機 PC1 的地址和 MAC 地址添加到本地緩存表中。
(4)主機 PC2 將包含其 MAC 地址的 ARP 回復消息直接發送回主機 PC1(數據幀為單播)。
(5)主機 PC1 收到 PC2 發揮的 ARP 回復消息,將 PC2 的 IP 和 MAC 地址添加至自己 ARP 緩存表中,本機緩存是有生存期的,默認 ARP 緩存表有效期 120s。當超過該有效期后,則將重復上面過程。主機 PC2 的 MAC 地址一旦確定,主機 PC1 就能向主機 PC2 發送 IP 信息。
arp 報文總共 42 bytes。其中以太網首部 14 bytes,arp 字段 28 字節
ARP 返回報文
下一篇
ARP 原理詳解 二 - CSDN博客
https://blog.csdn.net/u013669912/article/details/140080908