有了 IP 地址,為什么還要用MAC地址?

IP 地址和 MAC 地址可以類比生活中寄快遞的過程。
“在整個(gè)網(wǎng)絡(luò)中數(shù)據(jù)被封裝成數(shù)據(jù)報(bào)文進(jìn)行發(fā)送,就像我們生活中寄快遞時(shí)將物品放進(jìn)包裹中。而數(shù)據(jù)在路由器之間的跳轉(zhuǎn)也可以看作是不同地區(qū)快遞小哥對(duì)物流的交接。

IP 地址
ip 地址等價(jià)于快遞包裹上的收件人地址。
“快遞員通過收件人地址將包裹在出發(fā)地到目的地之間連出一條線,然后通過不同地區(qū)之間的物流中轉(zhuǎn)最后將包裹送到收件人的手中。

從上圖的粗箭頭所描述的路徑便可達(dá)到目的地址,陜西省 - 西安市 - xx 縣 - xx 街道 -…。
“同理,ip 地址也具備此功能,通過 IP 地址的網(wǎng)絡(luò)位可以確定某個(gè)主機(jī)所在網(wǎng)絡(luò)的位置,從而明確一條數(shù)據(jù)傳送的路徑。例如目的地址為 192.168.10.110/26,則該地址所在的網(wǎng)絡(luò)為 192.168.10.64

用之前圖示地址的尋址方式,我們可以模擬這一過程

那么,還是那個(gè)問題,為什么還要 MAC 地址呢?
MAC 地址
MAC 地址等價(jià)于快遞包裹上的收件人姓名。
“MAC 地址更多是用于確認(rèn)對(duì)方信息而存在的。就如同快遞跨越幾個(gè)城市來到你面前,快遞員需要和你確認(rèn)以下收件人是否正確,才會(huì)把包裹交給你一樣。

“這里我們模擬一個(gè)場(chǎng)景,比如在學(xué)校里同一個(gè)班級(jí)的學(xué)生大家互相都認(rèn)識(shí),互相交流就不需要借助學(xué)號(hào)(這里抽象成 ip 地址),直接喊名字即可?!拔梗莻€(gè)誰,把你作業(yè)讓我抄一下”。

“這個(gè)過程可對(duì)應(yīng)網(wǎng)絡(luò)中同一個(gè)交換機(jī)或集線器連接的局域網(wǎng)通信。在局域網(wǎng)中通信需要通過 MAC 地址進(jìn)行通信。將數(shù)據(jù)封裝成幀時(shí)會(huì)插入源 mac 地址和目的 mac 地址(如果不知到對(duì)方 mac 地址會(huì)發(fā)送 arp 廣播報(bào)文獲取對(duì)方 mac 地址)。以太網(wǎng)幀結(jié)構(gòu):

而后,幀結(jié)構(gòu)再次添加 IP 頭部信息。

雖然這里有 ip 地址,但是它在局域網(wǎng)中不起作用,因?yàn)?arp 是用于網(wǎng)絡(luò)中尋址的,而在局域網(wǎng)中所有主機(jī)互相可見。(除此之外,局域網(wǎng)中 ip 地址最多是在 arp 廣播時(shí),作為收到包的主機(jī)解包時(shí)判定的依據(jù),判定自己是否為目的主機(jī),從而選擇是否回應(yīng) arp 應(yīng)答)。

“而 IP 地址的使用條件,是在跨網(wǎng)絡(luò)之后。兩個(gè)網(wǎng)絡(luò)之間想要進(jìn)行通信需要通過一個(gè)媒介,因?yàn)樵诰W(wǎng)絡(luò)內(nèi)部的主機(jī)定位不到網(wǎng)絡(luò)外的某個(gè)主機(jī),即使他們只隔了一個(gè)網(wǎng)段也是一樣。而跨網(wǎng)段的媒介就是路由器,只要把 ip 地址告訴它,他就能找到對(duì)方所在的網(wǎng)絡(luò)。
“這就像是我是 2020 屆計(jì)算機(jī)科學(xué)專業(yè) 1 班學(xué)生 xx(學(xué)號(hào) 202015162,15 代指專業(yè)計(jì)算機(jī)科學(xué)專業(yè),62 代指 “我” 在本班的學(xué)號(hào)),我現(xiàn)在想找 2022 屆學(xué)弟 yy(學(xué)號(hào) 2022…)。我們之間不認(rèn)識(shí),但是我可以找一個(gè)中間人,幫我送信。

“這個(gè)中間人是局域網(wǎng)網(wǎng)關(guān),是路由器。他們的功能是,轉(zhuǎn)述我的消息,并且按照目的 ip 地址將它發(fā)給下一個(gè) “中間人”,最后送到“yy” 手中。
以下是關(guān)于 mac 地址與 ip 地址的愛恨糾纏… 以下內(nèi)容有借鑒到文章:《閃客 sun(低并發(fā)編程):如果讓你來設(shè)計(jì)網(wǎng)絡(luò)》
“首先我們需要明確的是,MAC 地址的誕生早于 IP 地址。在計(jì)算機(jī)設(shè)計(jì)之初,設(shè)備之間使用 MAC 地址互相確認(rèn)身份,因?yàn)楫?dāng)時(shí)的網(wǎng)絡(luò)拓?fù)洳⒉淮?,我們完全可以讓兩臺(tái)計(jì)算機(jī)之間兩兩互相發(fā)送數(shù)據(jù)。如果有 5 個(gè)主機(jī)需要互通的話,那么它的拓?fù)浣Y(jié)構(gòu)可能是這樣:

“如果是這樣的話,我們其實(shí)無需 MAC 地址,因?yàn)槊總€(gè)網(wǎng)卡明確對(duì)應(yīng)一臺(tái)主機(jī)。而實(shí)際是,一臺(tái)計(jì)算機(jī)要配置這么多網(wǎng)卡的需要耗費(fèi)更多的 money,你也不想買一臺(tái)計(jì)算機(jī)后還需要額外再買十幾個(gè)網(wǎng)卡把。
因此我們可以采用集線器的方式將所有計(jì)算機(jī)通過網(wǎng)線聚集在一起會(huì)更加方便。

“每臺(tái)主機(jī)發(fā)送數(shù)據(jù)前需要攜帶自己和對(duì)方的目的 MAC 地址,因?yàn)?hub 集線器只是將所有數(shù)據(jù)從其他接口發(fā)送出去,它將數(shù)據(jù)的是否接收留給了主機(jī)自己判斷。

集線器只是無腦的做數(shù)據(jù)發(fā)送,因此我們認(rèn)為它是數(shù)據(jù)鏈路層的設(shè)備。
“集線器太笨了,它將每一通信都發(fā)給所有主機(jī),在各主機(jī)之間交流頻繁時(shí)會(huì)造成網(wǎng)絡(luò)的擁堵乃至癱瘓,因此我們進(jìn)行了升級(jí),使用交換機(jī)設(shè)備。
“交換機(jī)內(nèi)部維護(hù)一張 MAC 地址表,記錄 MAC 地址與交換機(jī)各端口之間的關(guān)系,這樣就無需將所有數(shù)據(jù)發(fā)送的局域網(wǎng)中。通過思科的 Cisco packet tracer 仿真軟件可以看到交換機(jī)的 MAC 地址表。

“這樣,當(dāng) pc0(192.168.1)ping pc3(192.168.4)時(shí),交換機(jī)查自己的 mac 表,發(fā)現(xiàn)自己的以太網(wǎng) fa0/4 接口的出口對(duì)應(yīng)的就是目的主機(jī) mac 地址,則交換機(jī)將自己該數(shù)據(jù)報(bào)文轉(zhuǎn)發(fā)從 fa0/4 接口轉(zhuǎn)發(fā)出去。同時(shí) pc3 收到了來自 pc0 的數(shù)據(jù)報(bào)文。
“交換機(jī)相對(duì)集線器,擁有決定數(shù)據(jù)從交換機(jī)的哪個(gè)端口轉(zhuǎn)發(fā)出去的功能,因此我們認(rèn)為交換機(jī)在數(shù)據(jù)鏈路層(決定數(shù)據(jù)轉(zhuǎn)發(fā)至哪一條鏈路上)。
以上集線器和交換機(jī)都是局域網(wǎng)的通行,無需 IP 地址參與。而隨著網(wǎng)絡(luò)的擴(kuò)大,局域網(wǎng)規(guī)則已經(jīng)不再適合了。
許多個(gè)類似上述的局域網(wǎng)組成一個(gè)大的互聯(lián)網(wǎng)。它們彼此相連互相通信。

“如果在學(xué)校網(wǎng)絡(luò)內(nèi)部向訪問某個(gè)研究機(jī)構(gòu)共享的資料,這就是跨網(wǎng)絡(luò)訪問了。此時(shí) IP 地址才派上用場(chǎng)。ip 地址給出一段段具備層級(jí)關(guān)系的數(shù)字地址,它就像思維導(dǎo)圖一樣可以通過給定地址高效的找出我們想要的那一項(xiàng)。
“當(dāng)有網(wǎng)絡(luò)連接上互聯(lián)網(wǎng)時(shí),給它分配一個(gè) ip 地址,這樣就能通過這些 ip 地址確定對(duì)方網(wǎng)絡(luò)(或設(shè)備)在互聯(lián)網(wǎng)絡(luò)中的位置,從而進(jìn)行訪問。

“連接在互聯(lián)網(wǎng)上的具有 ip 的可以是一個(gè)單個(gè)的設(shè)備,比如某個(gè)服務(wù)器、某個(gè)網(wǎng)絡(luò)攝像頭等,也可以是某個(gè)局域網(wǎng),如學(xué)校的校園網(wǎng),公司內(nèi)部網(wǎng)絡(luò)等(局域網(wǎng)與公網(wǎng)通信使用 NAT、PAT 等方式,或內(nèi)網(wǎng)穿透等技術(shù))。
“為了實(shí)現(xiàn)在網(wǎng)絡(luò)中,跨網(wǎng)段的訪問,因此誕生出新的設(shè)備叫路由器。它可以根據(jù)內(nèi)置的路由條目決定將數(shù)據(jù)包轉(zhuǎn)發(fā)到哪個(gè)網(wǎng)絡(luò)中,最終可以到達(dá)目的網(wǎng)絡(luò)。

“需要注意的是,路由器是多個(gè)網(wǎng)絡(luò)的中間人,它有很多端口分別處于不同的網(wǎng)絡(luò)中(路由器的每一個(gè)端口,都有獨(dú)立的 MAC 地址和 IP 地址),這樣它就可以把 “來自 A 網(wǎng)絡(luò)的信息轉(zhuǎn)發(fā)至 B 網(wǎng)絡(luò),因?yàn)槁酚善鞯慕涌谕瑫r(shí)連接這這幾個(gè)網(wǎng)絡(luò)”。

“路由器可以讓數(shù)據(jù)在網(wǎng)絡(luò)中跨網(wǎng)絡(luò)的通信,因此我們認(rèn)為路由器是網(wǎng)絡(luò)層的設(shè)備。
終于,我們理清楚了整個(gè) IP 與 MAC 的關(guān)系??偨Y(jié)一下:
各個(gè)設(shè)備之間傳遞數(shù)據(jù)時(shí),需要使用到 MAC 地址以確定對(duì)方的身份(場(chǎng)景:兩個(gè)路由器之間跳轉(zhuǎn),局域網(wǎng)內(nèi)主機(jī)通信)。
各個(gè)網(wǎng)路之間通行需要使用到 IP 地址,主要是為了定位目的地址所在的位置,通過 IP 的分段機(jī)制推演出從源 IP 到目的 IP 的一條路徑,而后數(shù)據(jù)包通過這條路徑將數(shù)據(jù)送達(dá)。