Learning Objectives
- 說明為什麼送出 IP 封包前要先知道下一站的 MAC 位址
- 描述 ARP 的請求(廣播)與回覆(單播),並解讀 ARP 表
- 說明跨網段時封包交給預設閘道:目的 MAC 是閘道的,目的 IP 仍然是最終的對方
- 從症狀判斷預設閘道沒設、設成不存在的位址或設成一般主機
知道 IP 位址還不夠
PC1 要 ping 同一個網段的 192.168.1.20。IP 封包要裝進乙太網路訊框(frame)才能在線上傳送, 而訊框的目的地寫的是 MAC 位址(第 3 課):交換器只看 MAC,不看 IP。
| 層 | 用什麼位址 | PC1 現在知道嗎 |
|---|---|---|
| 網路層(IP 封包) | 目的 IP 192.168.1.20 | 知道,使用者輸入的 |
| 資料鏈結層(乙太網路訊框) | 目的 MAC ??:??:??:??:??:?? | 不知道 |
所以 PC1 需要一個「IP 位址 → MAC 位址」的查詢方法,這就是 ARP(Address Resolution Protocol,位址解析協定,1982 年的 RFC 826):
- PC1 送出 ARP 請求:「誰是 192.168.1.20?請告訴 192.168.1.10。」目的 MAC 是
ff:ff:ff:ff:ff:ff,也就是廣播,同一個網段的每台主機都會收到。 - 只有 192.168.1.20 回 ARP 回覆:「192.168.1.20 在 02:00:00:00:03:01。」回覆直接送給 PC1,是單播。
- PC1 把答案記進 ARP 表(ARP 快取),再把 ping 裝進目的 MAC 是 PC2 的訊框送出。
下次再送給同一個位址就直接查表,不必再問。ARP 表的記錄會在一段時間後過期(各作業系統的時間不同),以免對方換了網卡還用舊的 MAC。
在自己的電腦上,Windows 與 macOS 可以用 arp -a 看 ARP 表,Linux 用 ip neigh。
小測驗:ARP
ARP 請求的目的 MAC 位址是什麼?
PC1 剛 ping 過 PC2,十秒後再 ping 一次。第二次會怎樣?
ARP 的請求能不能穿過路由器,問到另一個網段的主機?
跨網段:交給預設閘道
PC1(192.168.1.10/24)要連 10.0.2.10。它先用遮罩判斷(第 6 課):10.0.2.10 不在 192.168.1.0/24 裡, 不能直接送;ARP 請求也問不到別的網段。這時封包交給預設閘道(default gateway),也就是同網段裡那台路由器的介面。
關鍵在於兩層位址的分工:
| 欄位 | PC1 送出的訊框 | R1 轉送出去的訊框 |
|---|---|---|
| 來源 MAC | PC1 | R1 的 g1 |
| 目的 MAC | R1 的 g0(閘道) | SRV |
| 來源 IP | 192.168.1.10 | 192.168.1.10(不變) |
| 目的 IP | 10.0.2.10(最終的對方) | 10.0.2.10(不變) |
- PC1 用 ARP 問的是閘道 192.168.1.1 的 MAC,不是 10.0.2.10 的 MAC。
- IP 位址從頭到尾不變(第 12 課的 NAT 例外),MAC 位址每經過一台路由器就換一次:每一段只負責送到下一站。
- 路由器收到後查路由表(第 9 課),再用 ARP 問下一站的 MAC,重新裝進新的訊框。
所以 PC1 的 ARP 表裡只會有閘道,不會有 10.0.2.10。閘道的位址通常是網段的第一個或最後一個可用位址(例如 .1 或 .254),這只是習慣,不是規定。
閘道設錯的症狀
閘道設錯時,同網段的通訊完全正常,只有跨網段不通,這是最典型的線索。常見的錯誤:
| 錯誤 | 症狀 | 封包紀錄看得到什麼 |
|---|---|---|
| 沒有設定閘道 | 跨網段立刻失敗 | 沒有任何封包送出,主機說「沒有路由」 |
| 設成不存在的位址(例如打錯成 .254) | 跨網段失敗 | 主機一直問「誰是 192.168.1.254?」,沒有人回答 |
| 設成同網段的一般主機 | 跨網段失敗 | ARP 問得到(那台主機會回覆),封包送到了,但主機不轉送別人的封包 |
| 閘道不在自己的網段(第 6 課的遮罩問題) | 跨網段失敗 | 主機說「沒有路由」 |
排錯的順序:先 ping 自己的閘道(同網段,確認第 2 層與 ARP 正常),再 ping 外面的位址。前者通、後者不通,就檢查閘道設定與路由。
安全預告:ARP 沒有任何驗證,主機收到回覆就相信。有心人可以不斷送出假的 ARP 回覆,宣稱「閘道的 IP 在我的 MAC」, 讓別人的封包先經過自己的電腦,這叫 ARP 偽冒(ARP spoofing)。第 23 課會說明它的原理與防禦方法(例如交換器的動態 ARP 檢查)。
小測驗:預設閘道
PC1(192.168.1.10)送給 10.0.2.10 的訊框,離開 PC1 時的目的 MAC 與目的 IP 分別是?
封包從 PC1 經過兩台路由器到達伺服器。途中哪一個欄位沒有改變?
同學的電腦能 ping 到同網段的印表機,也能 ping 到 192.168.1.1(學校的路由器),但連不上任何外面的網站。最該先檢查什麼?
重點整理
- 乙太網路訊框靠 MAC 位址送達;知道 IP 之後,還要用 ARP 問出下一站的 MAC。
- ARP 請求是廣播、回覆是單播;答案記進 ARP 表,一段時間後過期。只有被問的主機會記下發問者。
- 目的地在同一個網段:直接問對方的 MAC。不在:交給預設閘道,問的是閘道的 MAC。
- 一路上 IP 位址不變、MAC 位址每一段都換。
- 閘道設錯的共同症狀:同網段正常、跨網段不通。先 ping 閘道,再 ping 外面,看封包停在哪裡。
- ARP 沒有驗證,可能被偽冒;防禦方法在第 23 課。
封包交給閘道之後,路由器怎麼決定下一步往哪裡送?下一課講路由表與靜態路由。