題記:既生亮何生瑜。
摘要:標題雖然是為了解釋有了 IP 地址,為什么還要用 MAC 地址,但是本文的重點在于理解為什么要有 IP 這樣的東西。本文對讀者的定位是知道 MAC 地址是什么,IP 地址是什么。
一開始時,網(wǎng)絡(luò)中的機器并不多。大家都連到同一個集線器就可以了,就可以實現(xiàn)互通。這時,機器 A 發(fā)消息到機器 B ,消息頭里附上機器 B 的MAC,集線器收到消息后就廣播給所有連到集線器的機器。
機器 C 收到消息,發(fā)現(xiàn)消息里的 MAC 地址和自己的不一樣,就丟棄。機器B發(fā)現(xiàn)消息里的 MAC 地址和自己一樣,就收到下并解析。

這樣機制帶來問題很明顯:首先每次廣播,給所在網(wǎng)絡(luò)帶來不必要的浪費。所以,就出現(xiàn)了交換機。它能識別消息里的目標 MAC 地址后,直接就消息丟到機器 B 所連接的端口中。另一個角度,交換機必須記住所有的 MAC 地址和端口之間的關(guān)系。
這樣的機制在網(wǎng)絡(luò)規(guī)規(guī)模小的時候是高效的。但是當網(wǎng)絡(luò)規(guī)模擴大到全球的時候,不可能讓一臺交換機記錄下全球這么多的網(wǎng)絡(luò)設(shè)備,也不可能讓全球的機器連接到一臺交換機上。
那如果是多臺交換機呢?
想像一下,你是斯坦福的學生,你的電腦 x 的網(wǎng)絡(luò)直連的是學校的交換機,而學校的交換機又連美國國家網(wǎng)絡(luò)交換機。而美國國家網(wǎng)絡(luò)交換機又直接的是中國國家網(wǎng)絡(luò)交換機,中國服務(wù)器 y 直連的是中國國家交換機。
你想訪問中國的服務(wù)器 y 中的資源。你了解到服務(wù)器 y 的 MAC 地址是00:0C:29:01:00:12,所以你在消息里附上這個 MAC 地址。
學校交換機收到消息后,拿到 MAC 地址后就愣了,這是要發(fā)給誰???因為中國服務(wù)器 y 并不是直連學校交換機的。這時,學校交換機有一個選擇,就是收到不明的 MAC 地址時,一律轉(zhuǎn)發(fā)給默認端口。斯坦福交換機就將消息轉(zhuǎn)給美國國家交換機。
美國國家交換機同樣發(fā)愣了,因為沒有這條 MAC 地址對應(yīng)的端口。它又直接向默認端口:中國國家網(wǎng)絡(luò)交換機。
中國國家網(wǎng)絡(luò)交換機收到消息,發(fā)現(xiàn)自己記錄了 MAC 地址 對應(yīng)的是服務(wù)器 y。就直接將你這位斯坦福學生的消息轉(zhuǎn)發(fā)到服務(wù)器 y 所連接的端口。
最終,我們的服務(wù)器 y 終于收到來自美國斯坦福學生的資源訪問請求。

那么,我們的服務(wù)器 y 如何將相應(yīng)的資源返回給學生呢?將消息中的源MAC 地址作為響應(yīng)消息的目標 MAC 地址發(fā)送給中國國家交換機不就可以了?同樣的機制,只不過是把源地址和目標地址反一下。
這下,我們是不是完美實現(xiàn)使用交換機組建美國網(wǎng)絡(luò)和中國網(wǎng)絡(luò)的互通?
但是美國和中國并不能代表全世界。其他國家也需要加入這個大網(wǎng)絡(luò)。當日本國家交換機也接入美國國家交換機后,斯坦福學生的消息從學校到達美國國家交換機后就需要進行廣播所有直連自己的端口了,因為這時,它沒有對外的所謂默認端口了。這里有點燒腦,容各位同學一點時間思考。
也就是說,當兩個網(wǎng)絡(luò)互接時,MAC 地址 + 交換機還能解決問題廣播問題,但是兩個以上的網(wǎng)絡(luò)互連時,MAC 地址 + 交換機就沒有辦法解決廣播問題了。
這時,我們面臨的問題就是無法使用現(xiàn)有的技術(shù)—— MAC 地址 + 交換機——解決多網(wǎng)絡(luò)互連的問題了。所以,需要發(fā)明一種新的技術(shù)。
而 IP 協(xié)議就是就是解決此問題的一項技術(shù)。
事實上,IP協(xié)議的產(chǎn)生并不只是為解決上述的“廣播問題”。還解決了很多其他網(wǎng)絡(luò)傳輸過程會遇到的問題,比如一次傳輸?shù)南⑦^大時,如何對消息進行分組等問題。
小結(jié)
由于歷史原因,MAC 地址及相關(guān)技術(shù)先出現(xiàn),但是后來發(fā)現(xiàn)它并不能解決所有(已知)的問題,所以,先驅(qū)們發(fā)明了 IP 地址及相關(guān)技術(shù)來解決。
另一個角度,個人認為,由于 MAC 地址沒有辦法表達網(wǎng)絡(luò)中的子網(wǎng)的概念,而 IP 地址可以。如果網(wǎng)絡(luò)互換設(shè)備(比如路由器)能從目標 MAC 地址中分析出目標網(wǎng)絡(luò),而不是只是目標主機,IP 地址還會出現(xiàn)嗎?
有另一個有趣的問題:如果歷史反過來,一開始就使用的是 IP 地址,而不是 MAC 地址,我們現(xiàn)在的網(wǎng)絡(luò)世界會怎么樣?
[未完]