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