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