星期六, 9月 06, 2014

ARP and Gratuitous ARP

Ethernet 是靠 MAC 位址傳送封包,真正傳送 IP 封包前需要先知道對方 MAC 位址。ARP (Address Resolution Protocol) 就是用來詢問對方 MAC 位址的協定,包括 ARP request 跟 ARP reply。ARP request 廣播詢問對方 (用對方的 IP 位址) 的 MAC 位址。

ARP 的 Ethernet 封包使用 EtherType 0x0806,ARP 格式如下:

HW TypeProtocol TypeHALPALOpcodeSender HW AddressSender Protocol AddressTarget HW AddressTarget Protocol Address
22112HALPAL HALPAL
Hardware Type:1 = Ethernet。
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位址長度OpcodeSender 位址Target 位址
Hardware1 = Ethernet61 = request
2 = response
MAC 位址
MAC 位址
Potocol0x0800 = IPv44IP 位址
IP 位址
長度212HAL/PALHAL/PAL
ARP request:(這裡 Target 就是對方)
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 確認。

參考

  1. wireshark: Gratuitous ARP
  2. wikipedia: ARP announcements

沒有留言:

張貼留言