Ethernet 是靠 MAC 位址傳送封包,真正傳送 IP 封包前需要先知道對方 MAC 位址。ARP (Address Resolution Protocol) 就是用來詢問對方 MAC 位址的協定,包括 ARP request 跟 ARP reply。ARP request 廣播詢問對方 (用對方的 IP 位址) 的 MAC 位址。
ARP 的 Ethernet 封包使用 EtherType 0x0806,ARP 格式如下:
HW Type | Protocol Type | HAL | PAL | Opcode | Sender HW Address | Sender Protocol Address | Target HW Address | Target Protocol Address |
2 | 2 | 1 | 1 | 2 | HAL | PAL | HAL | PAL |
Protocol Type:0x0800 = IPv4
HAL (Hardware Address Length):MAC Address 是 6。
PAL (Protocol Address Length):IPv4 是 4。
Opcode:1 為 ARP request,2 為 ARP response。
欄位 | Type | 位址長度 | Opcode | Sender 位址 | Target 位址 |
---|---|---|---|---|---|
Hardware | 1 = Ethernet | 6 | 1 = request 2 = response | MAC 位址 | MAC 位址 |
Potocol | 0x0800 = IPv4 | 4 | IP 位址 | IP 位址 | |
長度 | 2 | 1 | 2 | HAL/PAL | HAL/PAL |
L2: Sender MAC -> Broadcast (由於不曉得在哪裡,所以必須用廣播)
L3: Sender MAC & IP, Target IP,Target MAC 還不知道填 0
因為用廣播傳送,所以 Ethernet 上的主機都會收到,只有 IP 位址符合的對方會填上 Target MAC 回 ARP reply。其實 ARP request 有一個附帶作用是告訴對方跟大家 Sender 的 MAC 位址,對方就可以用 unicast 送 ARP reply。(broadcast 回不好嗎?)
ARP reply (Sender 是對方):
L2: Sender MAC -> Target MAC
L3: Sender MAC & IP, Target MAC & IP
Gratuitous 可譯作「無理由的、沒來由的」,Gratuitous ARP 的 Target IP 跟 Sender IP 一樣是自己的 IP,詢問自己 IP 的 MAC 位址是不是很無理?其實它是有一些作用的,可以是 request 或 reply,用 L2 broadcast 送給大家,正常情形不會有 reply。
作用:
- 告訴 Ethernet 上所有機器我的 IP 及對應的 MAC Address,更新所有機器的 ARP 表格,Ethernet switch 也可以知道這個 MAC Address 在哪個 port
- 偵測 IP 衝突
- 當某個服務換介面時 (IP 沒變), 快速切換 MAC Address
- 如果每當 Link up 時就送 GARP,如果常常有 GARP 出現,可以表示接線品質不佳
- 負載平衡,同一 IP,但告訴不同機器不同 MAC Address
- arp_accept
unicast ARP request:確認已知 MAC 位址是否還在。
- RFC 1122 §2.3.2.1 講到 4 種清除過期 ARP cache 的機制,其中一個是 periodically 送 unicast ARP Request 詢問,如果連續 N 次沒收到回應則清除。
- 被 ping 完過數秒會 unicast ARP request 確認。
參考
- wikipedia: High-availability cluster
- arp-scan:掃 IP
- ARP 協定分析實驗
- 第三者 Ethernet 抓封包 (本站)
- arping -U <my_IP> # 送 GARP
- Proxy ARP
- arpd
- arpwatch
- CARP
- VRRP
沒有留言:
張貼留言