網絡小故事 3 · 入門

誰是 192.168.1.11?ARP(位址解析協定)

只知道對方的 IP Address,怎樣找出他的 MAC Address?

主角:阿麥、八爪、小比閱讀時間約 10 分鐘

建議先讀:第 4 課、小故事 1「Switch 入門」

1. 故事

按「下一步」一步一步看。每一步都有一位角色出場,解釋自己正在做什麼。

序幕:溫習一下

第 1 步/共 12 步

每部裝置有兩個位址

我有兩個位址:MAC Address(硬體位址) 是出廠時縫在身上的名牌;IP Address(網絡位址) 是我在這個網絡的地址,好像郵寄地址。

動畫文字版(全部步驟)
  1. 序幕:溫習一下
  2. 每部裝置有兩個位址 阿麥:我有兩個位址:MAC Address(硬體位址) 是出廠時縫在身上的名牌;IP Address(網絡位址) 是我在這個網絡的地址,好像郵寄地址。
    • 阿麥:192.168.1.10 MAC 00:00:5E:00:53:01
    • 電視:192.168.1.11 MAC 00:00:5E:00:53:02
    • 桌面電腦:192.168.1.12 MAC 00:00:5E:00:53:04
  3. 八爪只認名牌 八爪:在 LAN(區域網絡)裡,我只看 Frame(訊框)上的 MAC Address 送貨。收件人欄一定要寫 MAC Address,寫 IP Address 我是看不懂的!
  4. 第一幕:只知道 IP Address
  5. 阿麥想投放相片 阿麥:我想把相片投放到電視。投放 App 只告訴我:「送去 192.168.1.11。」可是 192.168.1.11 的 MAC Address 是什麼?我不知道!
  6. 先查一查 ARP Cache 阿麥:我先翻一翻自己的小簿子,叫 ARP Cache(ARP 快取),看看之前有沒有記下答案。可惜,簿子是空的。
    • 阿麥的 ARP Cache:(空的)
  7. 大叫一聲:ARP Request 小比:阿麥派我出發,背包上寫著收件人 FF:FF:FF:FF:FF:FF,信裡問:「誰是 192.168.1.11?請告訴 192.168.1.10。」這叫 ARP Request(ARP 請求)。背包執好,出發囉!
    • ARP 全名:Address Resolution Protocol(位址解析協定)
    • 收件人是 Broadcast(廣播),因為阿麥還不知道對方的 MAC Address
  8. 八爪把 Broadcast 送給所有人 八爪:收件人是 Broadcast,我照規矩複製,送到除了 P1 以外的所有 Port。順便記下:阿麥在 P1!
    • 八爪的 MAC Address Table:P1 → …:01(阿麥)
  9. 不是問我,不用理會 小比:桌面電腦打開信一看:問的是 192.168.1.11,自己是 192.168.1.12,不關它的事,於是把信丟掉,不作回應。
  10. 電視舉手:ARP Reply 小比:電視發現問的正是自己!它回覆:「192.168.1.11 是我,我的 MAC Address 是 00:00:5E:00:53:02。」這叫 ARP Reply(ARP 回覆),只寄給阿麥一個人。
    • ARP Reply 用 Unicast(單播),因為電視已經從 Request 知道阿麥的 MAC Address
    • 電視也順便把阿麥記入自己的 ARP Cache
    • 八爪又學到:P3 → …:02(電視)
  11. 記入 ARP Cache 阿麥:收到了!我把答案記在 ARP Cache。一段時間內再送東西給電視,就不用再大叫了。
    • 阿麥的 ARP Cache:
    • 192.168.1.11 → 00:00:5E:00:53:02
    • 記錄只保留一段時間(數十秒至幾分鐘,視乎作業系統)
  12. 第二幕:真正的相片出發
  13. 填好收件人,出發! 小比:現在我的背包齊全了:收件人 MAC 00:00:5E:00:53:02,裡面的 IP 收件人是 192.168.1.11。八爪看一看筆記簿,直接把我送到 P3!
    • Frame 收件人:00:00:5E:00:53:02(MAC)
    • Packet(封包)收件人:192.168.1.11(IP)
    • 八爪只看 MAC,送到 P3;桌面電腦完全不受打擾
  14. 如果對方在互聯網上? 阿麥:ARP 的 Broadcast 只在這個 LAN 裡傳。如果我要送去互聯網上的 192.0.2.80,就不會問它,而是問家中 Router(路由器)192.168.1.1 的 MAC Address,把資料交給它。
    • 192 開頭不一定是 Private IP:只有 192.168 開頭才是;192.0.2.80 是互聯網上的伺服器
    • 詳細內容:小故事 9「走出家門」
  15. 總結:先問名牌,再送貨 八爪:記住三步:ARP Request 用 Broadcast 問「誰是這個 IP?」;ARP Reply 用 Unicast 答「是我,這是我的 MAC」;答案記在 ARP Cache。之後我就可以準確送貨了!

2. 問題在哪裡

每部裝置都有兩個位址:

位址 比喻 誰會用它
MAC Address(硬體位址) 出廠時縫在身上的名牌 八爪,即 Switch(交換器),在 LAN(區域網絡)內送 Frame(訊框)
IP Address(網絡位址) 郵寄地址 App、Router(路由器),用來找出目的地

App 和使用者通常只知道 IP Address。例如投放 App 只說:「送去 192.168.1.11。」

可是在 LAN 裡,八爪只看 Frame 上的 MAC Address 送貨。收件人欄如果空著,小比根本出不了門。

所以,阿麥要先找出:192.168.1.11 的 MAC Address 是什麼?

3. 網絡怎樣解決

好像在課室裡大叫:「誰是陳大文?請舉手!」全班都聽到,但只有陳大文會舉手回答。

ARP(位址解析協定)就是這樣做:用 Broadcast(廣播)問全個 LAN「誰是這個 IP Address?」,對方再用 Unicast(單播)回覆自己的 MAC Address。

答案會記在 ARP Cache(ARP 快取)裡,一段時間內不用再問。

4. 看深一點

故事裡的三部裝置

裝置 IP Address MAC Address 接在八爪的
阿麥 192.168.1.10 00:00:5E:00:53:01 P1
桌面電腦 192.168.1.12 00:00:5E:00:53:04 P2
電視 192.168.1.11 00:00:5E:00:53:02 P3

ARP Request(ARP 請求)與 ARP Reply(ARP 回覆)

ARP 訊息直接放在 Ethernet(以太網)Frame 裡,不需要 IP Address 的包裝。兩種訊息的內容大約是這樣:

欄位 ARP Request(阿麥 → 所有人) ARP Reply(電視 → 阿麥)
Frame 收件人 MAC FF:FF:FF:FF:FF:FF(Broadcast) 00:00:5E:00:53:01(Unicast)
Frame 寄件人 MAC 00:00:5E:00:53:01 00:00:5E:00:53:02
類型 1 = Request 2 = Reply
寄件人 IP 192.168.1.10 192.168.1.11
寄件人 MAC 00:00:5E:00:53:01 00:00:5E:00:53:02
目標 IP 192.168.1.11 192.168.1.10
目標 MAC 00:00:00:00:00:00(未知,先填零) 00:00:5E:00:53:01

留意兩點:

  • Request 裡已經有阿麥的 IP 和 MAC,所以電視不用再問,就可以直接用 Unicast 回覆。
  • 電視收到 Request 時,也會順便把阿麥記入自己的 ARP Cache。

八爪在過程中做了什麼?

八爪不懂 ARP,也不需要懂。它照常工作:

  1. ARP Request 的收件人是 Broadcast → Flooding(泛洪),送到 P1 以外的所有 Port;同時學到「阿麥在 P1」。
  2. ARP Reply 的收件人是阿麥 → 表內找到阿麥在 P1 → Forwarding(轉發),只送到 P1;同時學到「電視在 P3」。

所以,ARP 完成後,阿麥和八爪都「認識」電視了。

ARP Cache 只是暫時記錄

ARP Cache 的記錄只保留一段時間,由數十秒至幾分鐘不等,視乎作業系統。過期後,下次要送資料時會再問一次。

這樣設計,是因為 IP Address 會改變。例如電視重新開機後,可能由 DHCP(動態主機設定協定)分到另一個 IP Address;舊答案留太久,就會送錯人。

對方在互聯網上,就問 Router

ARP 的 Broadcast 只在同一個 LAN 裡傳,不會穿過 Router。

假設阿麥要連接 example.com 的伺服器 192.0.2.80。小提醒:192 開頭不一定是 Private IP(私人位址),只有 192.168 開頭才是;192.0.2.80 是互聯網上的伺服器。

阿麥會先比較 IP Address:

  • 192.168.1.11 在自己的網絡 192.168.1.0/24 內 → 直接 ARP 問對方。
  • 192.0.2.80 不在自己的網絡內 → ARP 問 Default Gateway(預設閘道)192.168.1.1 的 MAC Address(00:00:5E:00:53:FE),把 Frame 交給家中 Router。

之後怎樣走出家門,小故事 9 會詳細講。

ARP 只用於 IPv4

IPv6 沒有 ARP,也沒有 Broadcast。它用 Neighbor Discovery(鄰居發現)做同樣的工作,方法是把問題寄給一小群有關的裝置,而不是全個 LAN。

5. 動手試試

任務:偷看電腦的 ARP Cache

  1. Windows:打開「命令提示字元」;macOS:打開「終端機」。
  2. 輸入 arp -a,按 Enter。
  3. 你會看到一張 IP Address 和 MAC Address 的對照表。Windows 的結果大約是這樣(MAC Address 用「-」分隔、小寫,意思一樣):
Interface: 192.168.1.10 --- 0x5
  Internet Address      Physical Address      Type
  192.168.1.1           00-00-5e-00-53-fe     dynamic
  192.168.1.11          00-00-5e-00-53-02     dynamic
  192.168.1.255         ff-ff-ff-ff-ff-ff     static
  1. 找一找你家 Router 的 IP Address(通常以 .1 結尾),它幾乎一定在表內。想一想:為什麼?(提示:你每次上網,都要經它出去。)

手機一般不能直接查看 ARP Cache,這個任務要用電腦。

小互動

ARP 的正確次序

阿麥第一次送資料給電視(192.168.1.11)。把以下五個步驟排好次序。

  1. 阿麥用 Broadcast 發出 ARP Request:「誰是 192.168.1.11?」
  2. 阿麥用電視的 MAC Address 把相片送出
  3. 阿麥查看 ARP Cache,發現沒有記錄
  4. 阿麥把答案記入 ARP Cache
  5. 電視用 Unicast 回覆 ARP Reply:「是我,00:00:5E:00:53:02」

6. 比喻的極限

  • 不是全班「聽到」然後思考。 每部裝置的網絡介面收到 Broadcast,作業系統只比較一下 IP Address,不是自己就立即丟掉,整個過程只需極短時間。
  • ARP 不會檢查對方有沒有說謊。 任何裝置都可以回覆「是我」,ARP 不會核實。有人會利用這一點冒充別人,這叫 ARP Spoofing(ARP 欺騙),所以公司網絡會加上額外的保護。
  • 小簿子不是永久的。 真正的 ARP Cache 會自動過期,和 Switch 的 MAC Address Table 一樣會定時清理。
  • 阿麥不是每次都「大叫」。 只要 ARP Cache 裡有答案,阿麥就直接送資料,不會再發出 ARP Request。
  • 相片不是一個小比就裝得下。 動畫中一個小比代表整張相片;現實中相片會被切成很多個 Frame,每個 Frame 都用同一個 ARP 答案。

7. 小測驗

第 1 題,共 3 題阿麥要找出 192.168.1.11 的 MAC Address,ARP Request 的 Frame 收件人 MAC Address 是什麼?
第 2 題,共 3 題ARP Reply 是怎樣送回阿麥的?
第 3 題,共 3 題阿麥要送資料到互聯網上的 192.0.2.80,他會用 ARP 問誰的 MAC Address?

8. 重點筆記

  • 在 LAN 內送 Frame,一定要知道收件人的 MAC Address;ARP(位址解析協定)負責由 IP Address 找出 MAC Address。
  • ARP Request(ARP 請求)用 Broadcast 問「誰是這個 IP?」;ARP Reply(ARP 回覆)用 Unicast 答「是我,這是我的 MAC」。
  • 答案會暫時記在 ARP Cache(ARP 快取),過期後要再問。
  • 對方不在同一個網絡時,ARP 問的是 Default Gateway(Router)的 MAC Address。
  • ARP 只用於 IPv4;IPv6 用 Neighbor Discovery(鄰居發現)。

延伸閱讀

阿麥學會了先問名牌、再送貨,八爪也就能準確地把相片送到電視。不過,家中的手機一個網線插口也沒有,它是怎樣加入這個 LAN 的?下一個故事,我們會認識看不見的網線:Wi-Fi(無線網絡)與 Access Point(無線基地台)。