為什麼第一次 Ping 時會出現延遲?

第一次執行 ping 時,有時會比後續封包慢,甚至出現 Timeout。常見原因不是 ICMP 本身,而是主機可能還不知道下一跳設備的 MAC Address。

當 ARP Cache 沒有可用紀錄時,主機必須先完成 ARP Resolution,才能送出 ICMP Echo Request。

先講結論

  • ARP Cache Miss 時,Ping 前會先出現 ARP Request 與 Reply。
  • 第一次 Ping 不一定會 Timeout,只可能因 ARP Resolution 稍微變慢。
  • 目的地在外部網路時,ARP 查詢的是 Default Gateway,而不是最終目的 IP。

實驗環境

  • 作業系統:Windows 11
  • 連線方式:Laptop → USB tethering → Phone
  • Laptop IP:10.112.189.151
  • Default Gateway:10.112.189.148

Wireshark 使用 Display Filter arp or icmp,Windows 則透過 arp -a 查看目前的 ARP Cache。

ARP Cache 有紀錄時

測試開始前,Laptop 已經保存 Default Gateway 的 IP-to-MAC 對應。因此執行 Ping 時,可以直接將 ICMP 封裝成 Ethernet Frame,不必重新發送 ARP Request。

Wireshark 此時只會看到 ICMP Echo Request 與 Echo Reply。這不代表 ARP 不重要,而是所需的 MAC Address 已經存在 Cache 裡。

清除 ARP Cache 後發生什麼?

為了製造 ARP Cache Miss,我先刪除 Gateway 的 ARP Entry,再執行一次 Ping:

arp -d 10.112.189.148
ping -n 1 10.112.189.148

Wireshark 擷取到以下完整流程:

  1. Laptop 向 Broadcast 發送 ARP Request,詢問誰擁有 10.112.189.148
  2. Gateway 使用 ARP Reply 告知自己的 MAC Address。
  3. Laptop 取得 Gateway MAC 後,送出 ICMP Echo Request。
  4. Gateway 回覆 ICMP Echo Reply。
清除 ARP Cache 後,Laptop 先透過 Broadcast ARP Request 取得 Default Gateway 的 MAC Address,接著才送出 ICMP Echo Request。

因為 Laptop 一開始不知道 Gateway 的 MAC Address,ARP Request 必須送往 Ethernet Broadcast Address ff:ff:ff:ff:ff:ff

Gateway 收到 Request 後,可以從 Sender IP 與 Sender MAC 得知 Laptop 的資訊,因此直接以 Unicast ARP Reply 回覆。

補充觀察:實驗中,Gateway 後續也曾直接向 Laptop MAC 發送 Unicast ARP Request,用來確認既有的 IP-to-MAC 對應。因此 ARP Request 並非永遠都是 Broadcast。

為什麼第一個 Ping 沒有 Timeout?

本次實驗中,ARP Request 到 ARP Reply 約花費 1.8 ms,ICMP Echo Request 到 Echo Reply 約花費 1.2 ms。

ARP Resolution 遠低於 Ping 的逾時門檻,因此 Windows 可以先取得 Gateway MAC,再送出等待中的 ICMP 封包。第一個 Ping 仍然成功。

第一次 Ping 不一定會 Timeout。ARP Cache Miss 只表示主機必須先完成 ARP Resolution;是否逾時仍取決於實際的回覆速度與網路狀況。

Ping 外部 IP 時,ARP 查詢的是誰?

接著執行 ping -n 1 1.1.1.1。清除 Cache 後,Laptop 並沒有詢問誰擁有 1.1.1.1,而是再次查詢 Default Gateway 10.112.189.148 的 MAC Address。

原因是 1.1.1.1 不在本地網段。Laptop 必須先把 Ethernet Frame 交給 Default Gateway,再由 Router 繼續轉送。

HeaderDestination
Ethernet HeaderDefault Gateway MAC
IPv4 Header1.1.1.1

也就是說,Layer 2 的目的地是目前這一跳要交付的設備;Layer 3 的目的地才是封包最終要抵達的位置。


結論

  1. ARP Cache Miss 時,第一次 Ping 可能因為需要先完成 ARP Resolution 而稍慢。
  2. 如果 ARP Cache 已有紀錄,就能直接送出 ICMP,不會產生新的 ARP 封包。
  3. 跨網段傳送時,ARP 解析的是 Default Gateway,也就是本地鏈路上的 Next Hop。

IP Address 決定封包最終要去哪裡;MAC Address 則決定目前這一段本地鏈路要先交給誰。

References


留言

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *