Atom
MAC從封包來看會改變嗎?

MAC從封包來看會改變嗎?

這是之前朋友去面試的題目,我自己網路也不好所以就針對這個稍微聊了一下

🗺 網路架構說明

圖片是朋友大致畫的
面試的問題:host1 ping host2 途中src dest mac會變嗎?
但這個問的不夠準確(其實是我漏聽),他問的是封包上的mac會改變嗎?

整個網路架構如下:

  • Host 1

    • IP:192.168.10.1/24
    • MAC:0000:0000:0000:0010
    • 所屬 VLAN:V10
  • Host 2

    • IP:192.168.20.1/24
    • MAC:0000:0000:0000:0020
    • 所屬 VLAN:V20
  • Router

    • MAC:0000:0000:0000:0030
    • 同時接管 VLAN 10 和 VLAN 20
    • 負責 Layer 3 路由轉發

封包流程: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郵箱的話可以自動偵測郵箱頭像
有想多交流的話可以留網址我看到會過去逛逛


本文作者:Atom
本文鏈接:https://d0ngd.github.io/2025/09/25/MAC地址改變了嗎?/
版權聲明:本文採用 CC BY-NC-SA 3.0 CN 協議進行許可