[網路] 淺談 ARP (Address Resolution Protocol) 運作原理

用途

  在乙太網路上,資料的傳遞必須要有實體位址 (MAC Address),Layer 2 設備會驗證 Frame 的實體位址,不是找它的一律捨棄,但設備一開機總不可能就有所有設備的實體位址吧?所以就需要 ARP 協定來協助取得各個設備的實體位址。

介紹

  ARP 是利用乙太網路的廣播功能所設計出來的位址解析協定,它的主要特性是它的位址對應關係是動態的,以查詢的方式來獲得 I P位址 (IP Address) 和實體位址 (MAC Address / Physical Address) 的對應關係。

  只要是 Layer 3 的設備都一定會有 ARP Cache,並且會在 ARP 快取內建立 ARP 表格 (ARP Table) 用來記錄 IP 位址和實體位址的對應關係。這個 Table 會依據自身的存活時間遞減而消失,以確保資料的正確性。

原理

  當發送主機有一個封包要傳送給目標主機時,並且已獲得目標主機的 IP 位址,那發送主機會先檢查自己的 ARP 表格中有沒有該 IP 位址的實體位址對應。

  • 如果有,就直接將此 IP 所對應的 MAC Address 填入 Layer 2 表頭。
  • 如果沒有,則向網路發出一個 ARP Request 的廣播封包,查詢目標主機的實體位址。

例:PC0Ping PC1,且該網段還有一台 PC2

  • 綠色為 ARP Request 的廣播封包,L2 表頭內的目標實體位址全為 FFFF
  • 黃綠色為 ICMP(Ping) 封包,等待填入 L2 表頭內的目標實體位址

ARP Request 封包
當初我看到這張圖時心裡就想,沒有 IP 位址的話 L3 不是沒辦法辨認嗎?
後來才發現,原來 ARPIP 同屬於 Layer 3 的 Protocol,拆開後發現是給 ARP 的封包就丟給 ARP 處理囉!

由於是廣播封包,所以 L2 會移除表頭後交給 L3 做處理,PC2 的 ARP 接收後發現目標 IP 並不是找他,故丟棄之。

PC1 在收到 ARP Request 封包後發現是找自己的,便將 PC0 的 IP 位址及 MAC 位址對應寫到 ARP 表格 裡以及回傳一個 ARP Reply 封包給 PC0

ARP Reply 封包內包含 Source MAC/IPTarget MAC/IP。(ARP Request沒有目標MAC Address)

PC0 收到 ARP Reply 後,將目標 MAC Address 填入 ICMP(Ping) 封包的 L2 表頭之後就開始執行Ping PC1 的動作。
註:綠色為 ARP Reply、橘色為 ICMP

PC2 會不會將 PC0 的對應關係寫進去 ARP 表格啊?

上面也提到了,雖然 L2 會往上送,但 L3 會捨棄此封包,所以 ARP 表格內不會有 PC0 的記錄。