ARP 協議
定義
位址解析協定,全名 Address Resolution Protocol,位於 網路存取層
與 網路層
(TCP/IP
模型) 中,負責將 32bit
IP
Address 轉換成 48bit
乙太網地址(MAC
Address) 的協議,用來 獲取目的 IP Address 的實體位址
,並且藉由添加 Ethernet Header 使用實體網路來傳遞。反之,若是要將 MAC Address 轉換成 IP Address,則是使用 RARP
協議。
ARP 協議只會作用於相同的網路區段下,若是兩台主機處於不同網域,則 ARP 就會直接請求所屬網域內Default Gateway 的實體位址,而不是目標主機的實體位址。
運作原理
假如當前的 Node A (120.107.152.137) 想要向 IP Address 為 120.107.152.4 的 Node 發送請求,這時候 Node A 其實不知道對應的會是 哪一個 Node
的實體位址,所以就會發 ARP Request
(查詢 120.107.152.4) 廣播
該網路區段內 的 Nodes。
每個 Node 一旦收到請求就會判斷 目標是否為自己
,若不是則直接 丟包
,反之,則將自己的 MAC Address
返回。最後,Node D (120.107.152.4) 就會根據 ARP Reply
(返回 10-bf-48-1a-2a-c1) 將結果儲存於 ARP Cache
,做為後續直接的使用。
ARP Cache
APR 為了 避免
每次都要廣播查找 MAC Address,都會將廣播獲取的結果 進行 Cached
,一般過期時間為 20 分鐘
,如果遇到像是 <incomplete>
這種不完整的資料,則是 3 分鐘
。
1 | $ arp -a |
通常可以使用 arp 指令查找相關資訊:
1 | # 顯示所有 Cache 的資料 |
ARP 格式
- Hardware Type:表示
發送主機使用之網路實體介面種類
,例如:1
表示Ethernet 網路介面
。 - Protocol Type:表示
所使用的通訊協定
,0x0800
表示IP
協定。 - Operation Type:表示此
封包的工作模式
:1:ARP Request
2:ARP Reply
3:RARP Request
4:RARP Reply
- HLEN:
網路介面卡硬體位址長度
。例如: Ethernet 位址的長度為 6。 - PLEN:
網路協定位址長度
。因為 IP 位址長 4 個位元組,此值為 4。 - Sender HW:
發送端的硬體位址
。如果是 Ethernet 網路的話,此為 6 個位元組長的地址,例如: 04:d9:f5:bc:93:8e。 - Target HW:
目的地的硬體位址
。 - Sender IP:
發送端的 IP 位址
,例如:120.107.152.137。 - Target IP:
目的地的 IP 位址
,例如:120.107.152.4。
RARP 協議
RARP 早期是用來替 diskless
或 無法儲存自己 IP
的設備提供 IP Address,透過 RARP 可以 廣播
自身 Node 的 MAC Address
,向 RARP Server
請求分配一個 IP Address。雖然早期很常使用 RARP 協議,但它已經被 DHCP
(Dynamic Host Configuration Protocol) 給取代,因為 DHCP 提供 更彈性
與 更多功能
來 動態分配 IP Addresses,目前主要出現於 嵌入式系統
和 需要預先分配 IP Address 的網路設備
之中。
ARP 排查
排查方式
本篇文章將會使用本機的環境 (120.107.152.137) 向 lab server (120.107.152.4) 使用 ping 指令發送請求,讓其自動產生 ARP 紀錄,並且透過 Wireshark 對其封包進行解析。
- 清除電腦內的 ARP Cache。
1 | $ arp -d |
- 開啟 Wireshark,分別輸入
eth.type == 0x0806
和host 120.107.152.137
,用作於攔截與 host 120.107.152.137 相關的 ARP Request,並點擊乙太網路 2
。
- 開啟 cmd,ping 目的地址 120.107.152.4。
1 | $ ping 120.107.152.4 |
- 在 Wireshark 點擊排查這兩條紀錄,其封包的組成會由
Ethernet header
(18 bytes) 和ARP packet
(24 bytes) 組成。
- ARP Request 排查。
Ethernet header:
- Destination:
目的
位址。Broadcast ff:ff:ff:ff:ff:ff - Source:
來源
位址。04:d9:f5:bc:93:8e - Type:封包
類型
。ARP (0x0806)
ARP packet:
- Hardware type:Ethernet (1)
- Protocol type:IPv4 (0x0800)
- Hardware size:6
- Protocol type:4
- Opcode:request (1)
- Sender MAC address:04:d9:f5:bc:93:8e
- Sender IP address:120.107.152.137
- Target MAC address:00:00:00:00:00:00
- Target IP address:120.107.152.4
- ARP Reply 排查。
Ethernet header:
- Destination:04:d9:f5:bc:93:8e
- Source:10:bf:48:1a:2a:c1
- Type:ARP (0x0806)
- Padding:確保 Header 格式
以 32 bits 長度
呈現的補0
ARP packet:
- Hardware type:Ethernet (1)
- Protocol type:IPv4 (0x0800)
- Hardware size:6
- Protocol type:4
- Opcode:reply(2)
- Sender MAC address:10:bf:48:1a:2a:c1
- Sender IP address:120.107.152.4
- Target MAC address:04:d9:f5:bc:93:8e
- Target IP address:120.107.152.137
- 查看 ARP Cache,這邊就會記錄剛剛所獲取到的 MAC Address。
1 | $ arp -a |
參考資料
- https://www.geeksforgeeks.org/what-is-rarp/
- https://www.tsnien.idv.tw/Manager_WebBook/chap4/4-2 ARP 協定與分析.html
- https://sdn.feisky.xyz/wang-luo-ji-chu/index/arp
- https://info.support.huawei.com/info-finder/encyclopedia/en/ARP.html