戲說不是胡說:高鐵換乘之 IP 地址與 MAC 地址
文末本文轉載自微信公眾號「飛天小牛肉」,作者飛天小牛肉 。轉載本文請聯系飛天小牛肉公眾號。
一個郵遞員拿著地址詳細到教室的一封信,收件人是小明,教室里沒有重名的,郵遞員問 “小明的學號是多少?”,小明站起來回答 “12345”,然后小明坐下,然后郵遞員說 “學號 12345 的過來拿信”,小明站起來去拿信。好像有點多此一舉?
問題:
當數據包到達局域網后,完全可以直接送到對應的 IP 地址主機,為什么還要詢問一下對應 IP 主機的 MAC 地址?
或者換種問法:
既然有了 IP 地址用來唯一標識這臺計算機了,那還需要 MAC 地址干啥?
首先,我來簡單的解釋下 MAC 地址所屬的數據鏈路層和 IP 地址所屬的網絡層的用途:
兩個計算機在計算機網絡之間進行通信,不可能就一條數據鏈路,對吧,它會經過很多條數據鏈路,也可能還要經過很多的通信子網,那么網絡層的任務就是選擇合適的網間路由和交換結點,確保數據及時傳送。
然后,需要明白的是,一臺計算機向網絡中的另一臺計算器進行通信的時候,需要知道的其實就是三個地址:
- 起點地址
- 下一跳的地址
- 終點地址
IP 地址負責起點地址和終點地址,下一跳的地址由 MAC 地址負責。
結合這兩點,我們來歸納下數據鏈路層和網絡層的關系:
通俗來說,數據鏈路層的作用很簡單,它是無腦的,只負責在兩個相鄰節點之間傳送數據,它并不知道它所傳送的數據最終目的地是哪。而網絡層便是它的大腦,網絡層負責指定起點地址和目的地址,并告訴數據鏈路層該走哪條路線。
看下圖,網絡層告知了 1-2-3 路線,那么數據鏈路層就會根據 MAC 地址依次找到 1、2、3,并在他們之間傳輸數據:
1)網絡層指定了從哪個主機(「源 IP 地址」)發送到哪個主機(「目的 IP 地址」)。源 IP 地址和目標 IP 地址在傳輸過程中是不會變化的
2)而數據鏈路層則是根據 MAC 地址在一個接一個的區間中進行傳輸的,每個區間內的出發地址即「源 MAC 地址」,每個區間內的目的地址即「目的 MAC 地址」。顯然,隨著數據的傳輸,源 MAC 地址和目的 MAC 地址會不斷的發生變化
再舉個形象點的例子:
我們把數據鏈路層看作一個乘坐高鐵從蘇州到南京,再在南京轉乘到北京,再在北京轉乘到西藏的旅客(一個沒腦子的機器人),那么網絡層就相當于每個車站的工作人員,在數據鏈路層這個沒腦子的機器人每次轉乘時,網絡層就會為其購買一張標有下一個 MAC 地址的車票。因此,即使數據鏈路層(旅客)不知道往哪走也沒有關系,工作人員(網絡層)會給你做出指引:
如果沒有 MAC 地址,僅僅只有 IP 地址,能不能完成這些事情?
從理論上來說,如果 IP 地址夠用,交換機也支持根據 IP 地址進行轉發,我們只需要在 IP 數據報中加一個 “下一跳 IP 地址” 的字段就行了,MAC 地址確實并不是必要的。
But,從宏觀來說,IP 地址只管上層建筑即路線規劃,底層具體走的邏輯交給 MAC 地址來做,這樣其實才符合 TCP/IP 協議體系這種分層的理念!
所以,這種設計并非多次一舉,而是為了符合最根本的設計理念。



























