[網路] 淺談 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 的廣播封包,查詢目標主機的實體位址。
例:PC0
要 Ping PC1
,且該網段還有一台 PC2
- 綠色為
ARP Request
的廣播封包,L2 表頭內的目標實體位址全為 FFFF - 黃綠色為
ICMP(Ping)
封包,等待填入 L2 表頭內的目標實體位址
ARP Request
封包
當初我看到這張圖時心裡就想,沒有 IP 位址的話 L3 不是沒辦法辨認嗎?
後來才發現,原來 ARP
和 IP
同屬於 Layer 3
的 Protocol,拆開後發現是給 ARP 的封包就丟給 ARP 處理囉!
由於是廣播封包,所以 L2 會移除表頭後交給 L3 做處理,PC2
的 ARP 接收後發現目標 IP 並不是找他,故丟棄
之。
PC1
在收到 ARP Request
封包後發現是找自己的,便將 PC0
的 IP 位址及 MAC 位址對應寫到 ARP 表格
裡以及回傳一個 ARP Reply
封包給 PC0
。
ARP Reply
封包內包含 Source MAC/IP
及 Target 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
的記錄。