1. 故事
按「下一步」一步一步看。每一步都有一位角色出場,解釋自己正在做什麼。
序幕:溫習一下
第 1 步/共 12 步
每部裝置有兩個位址
我有兩個位址:MAC Address(硬體位址) 是出廠時縫在身上的名牌;IP Address(網絡位址) 是我在這個網絡的地址,好像郵寄地址。
動畫文字版(全部步驟)
- 序幕:溫習一下
- 每部裝置有兩個位址 阿麥:我有兩個位址:MAC Address(硬體位址) 是出廠時縫在身上的名牌;IP Address(網絡位址) 是我在這個網絡的地址,好像郵寄地址。
- 阿麥:
192.168.1.10MAC00:00:5E:00:53:01 - 電視:
192.168.1.11MAC00:00:5E:00:53:02 - 桌面電腦:
192.168.1.12MAC00:00:5E:00:53:04
- 阿麥:
- 八爪只認名牌 八爪:在 LAN(區域網絡)裡,我只看 Frame(訊框)上的 MAC Address 送貨。收件人欄一定要寫 MAC Address,寫 IP Address 我是看不懂的!
- 第一幕:只知道 IP Address
- 阿麥想投放相片 阿麥:我想把相片投放到電視。投放 App 只告訴我:「送去
192.168.1.11。」可是192.168.1.11的 MAC Address 是什麼?我不知道! - 先查一查 ARP Cache 阿麥:我先翻一翻自己的小簿子,叫 ARP Cache(ARP 快取),看看之前有沒有記下答案。可惜,簿子是空的。
- 阿麥的 ARP Cache:(空的)
- 大叫一聲: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
- 八爪把 Broadcast 送給所有人 八爪:收件人是 Broadcast,我照規矩複製,送到除了 P1 以外的所有 Port。順便記下:阿麥在 P1!
- 八爪的 MAC Address Table:P1 →
…:01(阿麥)
- 八爪的 MAC Address Table:P1 →
- 不是問我,不用理會 小比:桌面電腦打開信一看:問的是
192.168.1.11,自己是192.168.1.12,不關它的事,於是把信丟掉,不作回應。 - 電視舉手: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(電視)
- 記入 ARP Cache 阿麥:收到了!我把答案記在 ARP Cache。一段時間內再送東西給電視,就不用再大叫了。
- 阿麥的 ARP Cache:
192.168.1.11→00:00:5E:00:53:02- 記錄只保留一段時間(數十秒至幾分鐘,視乎作業系統)
- 第二幕:真正的相片出發
- 填好收件人,出發! 小比:現在我的背包齊全了:收件人 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;桌面電腦完全不受打擾
- Frame 收件人:
- 如果對方在互聯網上? 阿麥:ARP 的 Broadcast 只在這個 LAN 裡傳。如果我要送去互聯網上的
192.0.2.80,就不會問它,而是問家中 Router(路由器)192.168.1.1的 MAC Address,把資料交給它。- 192 開頭不一定是 Private IP:只有 192.168 開頭才是;
192.0.2.80是互聯網上的伺服器 - 詳細內容:小故事 9「走出家門」
- 192 開頭不一定是 Private IP:只有 192.168 開頭才是;
- 總結:先問名牌,再送貨 八爪:記住三步: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,也不需要懂。它照常工作:
- ARP Request 的收件人是 Broadcast → Flooding(泛洪),送到 P1 以外的所有 Port;同時學到「阿麥在 P1」。
- 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
- Windows:打開「命令提示字元」;macOS:打開「終端機」。
- 輸入
arp -a,按 Enter。 - 你會看到一張 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
- 找一找你家 Router 的 IP Address(通常以
.1結尾),它幾乎一定在表內。想一想:為什麼?(提示:你每次上網,都要經它出去。)
手機一般不能直接查看 ARP Cache,這個任務要用電腦。
小互動
ARP 的正確次序
阿麥第一次送資料給電視(192.168.1.11)。把以下五個步驟排好次序。
- 阿麥用 Broadcast 發出 ARP Request:「誰是 192.168.1.11?」
- 阿麥用電視的 MAC Address 把相片送出
- 阿麥查看 ARP Cache,發現沒有記錄
- 阿麥把答案記入 ARP Cache
- 電視用 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. 小測驗
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(無線基地台)。