POABOB

小小工程師的筆記分享

0%

ARP 協議與排查

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,做為後續直接的使用。

a

ARP Cache

APR 為了 避免 每次都要廣播查找 MAC Address,都會將廣播獲取的結果 進行 Cached,一般過期時間為 20 分鐘,如果遇到像是 <incomplete> 這種不完整的資料,則是 3 分鐘

1
2
3
4
5
6
$ arp -a
# ...
? (10.244.0.19) at 1e:da:43:8f:b7:4c [ether] on kube-bridge
? (10.244.0.15) at 56:82:d1:0e:9e:04 [ether] on kube-bridge
? (10.244.0.18) at a2:40:ff:bf:b0:43 [ether] on kube-bridge
? (10.244.0.4) at <incomplete> on kube-bridge

通常可以使用 arp 指令查找相關資訊:

1
2
3
4
5
6
7
8
# 顯示所有 Cache 的資料
$ arp -a

# 新增靜態的 ARP 紀錄,若需要 `永久保存`,則要修改 `/etc/ethers` 檔案
$ arp -s ip \<ip-address\> mac \<mac-address\>

# 讓 `/etc/ethers` 中的靜態 ARP 紀錄 `生效`
$ arp -f

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。

b

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 對其封包進行解析。

  1. 清除電腦內的 ARP Cache。
1
2
3
4
5
6
7
8
9
10
11
$ arp -d

$ arp -a
介面: 120.107.152.137 --- 0x5
網際網路網址 實體位址 類型
224.0.0.2 01-00-5e-00-00-02 靜態
224.0.0.22 01-00-5e-00-00-16 靜態

介面: 172.19.192.1 --- 0x12
網際網路網址 實體位址 類型
224.0.0.22 01-00-5e-00-00-16 靜態
  1. 開啟 Wireshark,分別輸入 eth.type == 0x0806host 120.107.152.137,用作於攔截與 host 120.107.152.137 相關的 ARP Request,並點擊 乙太網路 2

c

  1. 開啟 cmd,ping 目的地址 120.107.152.4。
1
2
3
4
5
6
7
8
9
10
11
$ ping 120.107.152.4

Ping 120.107.152.4 (使用 32 位元組的資料):
回覆自 120.107.152.4: 位元組=32 時間<1ms TTL=64
回覆自 120.107.152.4: 位元組=32 時間<1ms TTL=64
回覆自 120.107.152.4: 位元組=32 時間<1ms TTL=64
回覆自 120.107.152.4: 位元組=32 時間<1ms TTL=64

120.107.152.4 的 Ping 統計資料:
封包: 已傳送 = 4,已收到 = 4, 已遺失 = 0 (0% 遺失),大約的來回時間 (毫秒):
最小值 = 0ms,最大值 = 0ms,平均 = 0ms
  1. 在 Wireshark 點擊排查這兩條紀錄,其封包的組成會由 Ethernet header (18 bytes) 和 ARP packet (24 bytes) 組成。

d

e

  1. 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

f

  1. 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

g

  1. 查看 ARP Cache,這邊就會記錄剛剛所獲取到的 MAC Address。
1
2
3
4
5
6
7
8
9
10
11
12
$ arp -a

介面: 120.107.152.137 --- 0x5
網際網路網址 實體位址 類型
120.107.152.4 10-bf-48-1a-2a-c1 動態
224.0.0.2 01-00-5e-00-00-02 靜態
224.0.0.22 01-00-5e-00-00-16 靜態

介面: 172.19.192.1 --- 0x12
網際網路網址 實體位址 類型
224.0.0.2 01-00-5e-00-00-02 靜態
224.0.0.22 01-00-5e-00-00-16 靜態

參考資料

  • 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
------ 本文結束 ------