
MAC從封包來看會改變嗎?
這是之前朋友去面試的題目,我自己網路也不好所以就針對這個稍微聊了一下
🗺 網路架構說明
圖片是朋友大致畫的
面試的問題:host1 ping host2 途中src dest mac會變嗎?
但這個問的不夠準確(其實是我漏聽),他問的是封包上的mac會改變嗎?
整個網路架構如下:
Host 1
- IP:
192.168.10.1/24
- MAC:
0000:0000:0000:0010
- 所屬 VLAN:V10
- IP:
Host 2
- IP:
192.168.20.1/24
- MAC:
0000:0000:0000:0020
- 所屬 VLAN:V20
- IP:
Router
- MAC:
0000:0000:0000:0030
- 同時接管 VLAN 10 和 VLAN 20
- 負責 Layer 3 路由轉發
- MAC:
封包流程:Host 1 要 Ping Host 2
1️⃣ Host 1 發送 Ping 封包
- 發現目標 IP
192.168.20.1
不在同一個子網 - 將封包送給預設閘道(Router),假設是
192.168.10.254
- 查詢 ARP,得到 MAC 為:
0000:0000:0000:0030
- 封包會長這樣:
Source MAC: 0000:0000:0000:0010 (Host 1)
Destination MAC: 0000:0000:0000:0030 (Router)
2️⃣ Router 轉發封包
- 看到目標 IP 屬於 VLAN 20,從 VLAN 20 出口轉送
- 查詢 ARP 得到 Host 2 的 MAC:
0000:0000:0000:0020
- 修改封包為:
Source MAC: 0000:0000:0000:0030 (Router)
Destination MAC: 0000:0000:0000:0020 (Host 2)
3️⃣ Host 2 回覆 Ping
- Host 2 傳回封包給自己的預設閘道(Router)
- 封包會是:
Source MAC: 0000:0000:0000:0020 (Host 2)
Destination MAC: 0000:0000:0000:0030 (Router)
4️⃣ Router 將回覆送回 Host 1
- 查詢 ARP,找到 Host 1 的 MAC:
0000:0000:0000:0010
- 修改回應封包為:
Source MAC: 0000:0000:0000:0030 (Router)
Destination MAC: 0000:0000:0000:0010 (Host 1)
結論:MAC 有沒有改變?
答案是有改變的
步驟 | 目的 MAC | 備註 |
---|---|---|
Host 1 → Router | 0000:0000:0000:0030 |
不知道 Host 2,傳給 Router |
Router → Host 2 | 0000:0000:0000:0020 |
Router 查 ARP 得知 Host 2 MAC |
Host 2 → Router | 0000:0000:0000:0030 |
一樣傳給預設閘道 |
Router → Host 1 | 0000:0000:0000:0010 |
Router 幫忙回覆封包給 Host 1 |
Host 1 永遠看不到 Host 2 的 MAC,反之亦然。兩者都只知道 Router 的 MAC。
延伸補充
這是典型的 Router-on-a-stick(單線路由)或 Layer 3 Switch 的通訊範例。在這類設計中:
- MAC 是 L2 層資訊,跨 VLAN 傳輸時會被 Router 重新寫入
- IP 是不變的,但 MAC 是跳點間變換的
- 可以在主機上執行
arp -a
來觀察目前的 ARP 快取表,驗證只會看到 Router 的 MAC
留言區從原本需要登入github才能留言的方式改成使用 Twikoo
不須登入即可留言
如果你要匿名的話姓名、郵箱、網址可以隨便打沒關係
留QQ郵箱的話可以自動偵測郵箱頭像
有想多交流的話可以留網址我看到會過去逛逛