iT邦幫忙

2026 iThome 鐵人賽

DAY 3
0

Day 02 終於把一件以前很常背、但其實沒有真的懂的事情弄清楚:

IP + Subnet Mask
↓
算出 Network Address
↓
判斷對方是不是同網段

例如:

PC A:192.168.1.10/24
PC B:192.168.1.20/24

兩台算出來都是:

192.168.1.0/24

所以 PC A 知道:

PC B 跟我是自己人,不需要先把資料丟給 Router。

到這裡本來覺得很順。

結果下一秒就冒出一個問題:

都知道 PC B 的 IP 是 192.168.1.20 了,為什麼不能直接送?

然後我就撞到今天這個主題:

MAC Address

以前看到 MAC Address,我大概只會回答:

網卡有一組 MAC 位址。

然後就沒了 XD

但如果真的從「封包怎麼走」開始追,就會發現 MAC 根本躲不掉。


IP 跟 MAC 到底差在哪?

我現在先用一個不是百分之百精準,但比較好理解的方式記。

IP Address
= 我要去哪裡

MAC Address
= 在目前這一段網路,這一跳實際要交給誰

例如我要從高雄寄東西去台北。

「台北某個地址」比較像 IP。

但貨物真的進到某個配送站時,配送站還是要知道:

這一站到底要交給哪一台車、哪一個出口?

MAC 比較接近這種「目前這一段怎麼送」的概念。

所以 IP 跟 MAC 並不是二選一。

不是:

有 IP
所以不需要 MAC

而是:

IP 負責 Layer 3 的目的地
MAC 負責這一段 Ethernet 的傳送

Ethernet 裡真正送的是 Frame

這裡也是我以前很容易全部叫做「封包」。

但其實不同 Layer 有不同名稱。

今天先看最簡單的版本:

Ethernet Frame
┌─────────────────────────────┐
│ Destination MAC             │
│ Source MAC                  │
│                             │
│ Payload                     │
│ └─ 裡面可以放 IP Packet       │
│                             │
│ FCS                         │
└─────────────────────────────┘

所以可以先得到一個很重要的畫面:

Ethernet Frame
└── IP Packet

有點像:

箱子
└── 裡面又裝了一個東西

IP Packet 沒有消失。

只是當它要在 Ethernet 網路上跑的時候,外面還會再包一層 Ethernet Frame。

這時 Ethernet 就需要:

Source MAC
Destination MAC

問題又來了。


我只有 IP,哪來的 MAC?

假設 PC A 要找:

192.168.1.20

它已經知道這台機器跟自己同網段。

但是 PC A 現在只知道:

192.168.1.20

不知道:

192.168.1.20 的 MAC 是多少?

這時候就輪到:

ARP

出場。

ARP,全名是:

Address Resolution Protocol

名字看起來有點硬。

但我現在會先把它記成:

我知道你的 IPv4 Address,但我不知道你的 MAC,所以我要問一下。


ARP 到底在問什麼?

PC A 會送出類似這樣的問題:

誰是 192.168.1.20?

如果你是 192.168.1.20,
請告訴我你的 MAC Address。

問題是:

PC A 就是因為不知道 PC B 的 MAC 才來問。

那它怎麼指定:

Destination MAC = PC B

不能。

所以這時候會用到:

Broadcast

也就是:

FF:FF:FF:FF:FF:FF

可以先把它理解成:

同一個 Broadcast Domain 裡,大家先聽一下。

於是:

PC A:
誰是 192.168.1.20?

大家都可能收到。

但是只有真正拿著:

192.168.1.20

的 PC B 會回答:

是我。

我的 MAC 是:
BB:BB:BB:BB:BB:BB

ARP Cache 又是什麼?

如果每送一次資料都要重新問:

誰是 192.168.1.20?

那也太累了。

所以 PC A 會先把結果記起來。

例如:

192.168.1.20
↓
BB:BB:BB:BB:BB:BB

這就是 ARP Cache 在做的其中一件事情。

所以我現在先記:

ARP Cache

IP
↓
MAC

它解決的是:

我知道 IP,但這一跳我要用哪一個 MAC?


那 Switch 又在幹嘛?

好。

現在 PC A 已經知道 PC B 的 MAC。

假設:

PC A
MAC:AA:AA:AA:AA:AA:AA

PC B
MAC:BB:BB:BB:BB:BB:BB

而網路長這樣:

PC A
  │
Port 1
  │
Switch
  │
Port 2
  │
PC B

PC A 送出的 Ethernet Frame 裡會寫:

Source MAC
= AA:AA:AA:AA:AA:AA

Destination MAC
= BB:BB:BB:BB:BB:BB

Switch 收到之後,重點來了:

Switch 主要不是看 Destination IP 決定往哪送。

Layer 2 Switch 主要看的是:

Destination MAC

然後查自己的:

MAC Address Table

例如:

AA:AA:AA:AA:AA:AA → Port 1
BB:BB:BB:BB:BB:BB → Port 2

看到:

Destination MAC
= BB:BB:BB:BB:BB:BB

就知道:

往 Port 2

送。

這樣資料才真的到 PC B。


可是 Switch 怎麼知道 MAC 在哪一個 Port?

這又是一個以前很容易直接背答案的地方。

Switch 不是出廠時就知道:

PC A 在 Port 1
PC B 在 Port 2

它是慢慢學的。

例如 PC A 的 Frame 從 Port 1 進來。

Frame 裡面寫著:

Source MAC
= AA:AA:AA:AA:AA:AA

Switch 就會想:

喔,原來 AA:AA:AA:AA:AA:AA 是從 Port 1 來的。

於是學到:

AA:AA:AA:AA:AA:AA → Port 1

所以我現在會這樣記:

Source MAC
↓
Switch 學習這台設備在哪個 Port

而:

Destination MAC
↓
Switch 決定 Frame 要從哪個 Port 出去

突然就合理很多。


如果 Switch 還不知道 Destination MAC 在哪呢?

例如 Switch 目前只知道:

AA:AA:AA:AA:AA:AA → Port 1

但是還沒有:

BB:BB:BB:BB:BB:BB → ???

那怎麼辦?

它會做:

Flooding

也就是先把 Frame 往其他相關 Port 送出去。

等 PC B 回傳資料時,Switch 看到:

Source MAC = BB:BB:BB:BB:BB:BB

而這個 Frame 是從 Port 2 進來的。

它就學到了:

BB:BB:BB:BB:BB:BB → Port 2

後面再看到送給 BB 的 Frame,就可以直接往 Port 2 送。

不需要每次都 Flood。


ARP Cache 跟 MAC Address Table 不要混在一起

這兩個我以前非常容易混。

因為裡面都有 MAC。

但它們根本是在回答不同問題。

ARP Cache

IP → MAC

例如:

192.168.1.20
↓
BB:BB:BB:BB:BB:BB

它回答:

我知道 IP,那這一跳要用哪個 MAC?

MAC Address Table

MAC → Port

例如:

BB:BB:BB:BB:BB:BB
↓
Port 2

它回答:

我知道 MAC,那這個 MAC 在 Switch 哪個 Port?

所以把兩個串起來:

192.168.1.20
      │
      │ ARP
      ▼
BB:BB:BB:BB:BB:BB
      │
      │ Switch MAC Table
      ▼
    Port 2

這張圖我覺得比背十個名詞有用。


把 Day 02 和 Day 03 串一次

假設:

PC A
192.168.1.10/24

PC B
192.168.1.20/24

PC A 要送資料給 PC B。

完整流程目前可以先理解成:

1.
PC A 看 Destination IP
192.168.1.20

↓

2.
用 Subnet Mask 判斷

192.168.1.10/24
192.168.1.20/24

↓

同網段

↓

3.
不用先交給 Default Gateway

↓

4.
ARP 查:
192.168.1.20 的 MAC 是什麼?

↓

5.
得到:
BB:BB:BB:BB:BB:BB

↓

6.
建立 Ethernet Frame

Destination MAC
= BB:BB:BB:BB:BB:BB

↓

7.
Switch 查 MAC Address Table

BB:BB:BB:BB:BB:BB
→ Port 2

↓

8.
Frame 送到 PC B

到這裡終於開始有「資料真的在網路上移動」的感覺。


可是如果對方不同網段呢?

現在把 PC B 換成:

10.0.0.20

PC A 是:

192.168.1.10/24

Day 02 已經知道它會判斷:

不同網段

所以它不會直接在自己的 LAN 裡找:

10.0.0.20 的 MAC

但 Ethernet Frame 還是一定需要 Destination MAC。

那這次 Destination MAC 要填誰?

答案是:

Default Gateway 的 MAC

這裡又出現一個很好玩的問題:

IP Packet 的 Destination IP 明明是 10.0.0.20,為什麼 Ethernet Frame 的 Destination MAC 卻可以是 Router?

這題我決定留給 Day 04。


Day 03 我先記這幾件事

今天如果全部忘光,我希望至少還記得:

IP
= 我要去哪裡

MAC
= 這一跳 Ethernet 要交給誰

再來:

ARP Cache
= IP → MAC

以及:

Switch MAC Address Table
= MAC → Port

最後把流程縮成:

IP
↓
ARP
↓
MAC
↓
Switch
↓
Port

Day 01 我們在看:

Internet
LAN
Switch
Router

Day 02 開始知道:

到底是不是同網段?

Day 03 才真正開始看到:

好,就算是同網段,資料也不是憑空飛到對方電腦。

它還得先知道 MAC,再經過 Switch,把 Ethernet Frame 真的送到正確的 Port。


上一篇
Day 02|IP、Subnet Mask、網段:怎麼知道對方跟自己是不是在同一個網路?
下一篇
Day 04|不同網段怎麼寄?Gateway 為什麼是第一站?
系列文
網路為什麼筆記本:從一個封包開始,把 Router、Switch 與 Routing 串起來9
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言