六個位元組,從中間一分為二
MAC 地址是 48 位,寫作六個位元組。前三個位元組是組織唯一識別符號(OUI),由 IEEE 出售給製造商;後三個位元組由該製造商自行分配,保證它生產的每個網絡卡都不重複。廠商查詢的全部依據就是這一劃分:你識別的不是裝置,而是"誰買下了這段號碼"。
由此帶來一個常被忽略的後果:查到的廠商是網路晶片的製造者,未必是機器外殼上的品牌。筆記型電腦經常報出無線網絡卡晶片廠商而不是整機品牌;虛擬機器報出的則是虛擬化平臺,因為地址由虛擬化層生成。
書寫格式純粹是外觀差異。冒號分隔的位元組對、連字元分隔的位元組對、Cisco 的三組四位以及純十六進位制,描述的是同樣的 48 位。只不過廠商和作業系統在展示方式上各行其是,所以格式互轉才成了高頻瑣事。
改變含義的兩個位元
第一個位元組的次低位是"通用/本地"標誌。該位為 0 表示地址來自 IEEE 分配的地址塊,此時廠商查詢才有意義;該位為 1 表示地址是本地選定的,任何登錄檔都不會收錄它——查不到是預期結果,而不是資料缺失。
這一位正是現代手機和筆記本"查不到廠商"的原因。隨機 MAC 地址如今已是 Wi-Fi 掃描的預設行為,連線時往往也啟用,它會刻意置上本地位,就是為了無法被追溯到製造商、也無法跨網路關聯。看到本地管理地址時,隱私隨機化是最可能的解釋。
第一個位元組的最低位是"單播/組播"標誌。為 0 表示該幀發往單個介面,為 1 表示發往一組介面;廣播地址(48 位全為 1)只是其極端情形。如果你以為在看裝置地址卻發現組播位被置上,通常說明你看到的是協議地址而非硬體地址。
從 MAC 到 IPv6,以及它為何被棄用
頁面上顯示的"修改版 EUI-64",是過去用硬體地址構造 IPv6 地址的方法:在 MAC 中間插入 FF 和 FE 兩個位元組,並翻轉通用/本地位,得到 64 位介面識別符號,再接到網路字首之後。
它能用,而且完全確定——而這恰恰是問題所在。這樣生成的地址會把你的硬體身份帶進你加入的每一個網路,讓任何人都能跨地點關聯你的流量。RFC 8981 的隱私擴充套件與 RFC 7217 的穩定但不透明識別符號取代了這種做法,現代系統預設不再從 MAC 推導地址。
但這個轉換仍然值得理解,因為它正是讓 fe80:: 鏈路本地地址變得可讀的關鍵。看到介面識別符號中間出現 FF FE 模式,你就能一眼判斷它派生自 MAC,並據此還原出原始硬體地址。