一個主機有唯一的IP地址,給他發數據的目的地就唯一,為啥還要MAC地址?
以太網的起源
麻省理工學院大學畢業生Bob Metcalfe,前往施樂帕洛阿爾托研究中心工作,發現很多計算機孤零零躺在實驗室,決定將計算機連接起來。使用同軸電纜連接網卡設備,所有計算機連接在一根同軸電纜上,所有電腦都可以向共享的電纜扔包裹。為了克服多個網卡同時扔包裹而造成的沖突,故使用CSMA/CD算法。一邊扔包裹,一邊檢測是否有沖突。如果包裹扔完沒有檢測到沖突,那么就默認發送成功。如果檢測到沖突,停止發送,backoff隨機時間,等待線路空閑再次重傳發送。
為了在線路上識別包裹的目的地,每塊網卡都有一個獨一無二的地址,這個地址就是大名鼎鼎的MAC地址,也即網卡硬件地址。在此基礎上,很多公司加入了擴展ethernet的行列中來,其中包括IBM公司,開發出NetBIOS、NetEBUI等協議,方便了計算機之間的文件共享、消息傳輸等功能。
需要聲明的是,ethernet是一個純粹的物理層 + 數據鏈路層網絡,和上層協議棧NetBIOS協同配合,可以連接幾十臺電腦工作、且工作得還不錯。由于ethernet簡單易用,很快就流行開來。
歷史的車輪很快轉圈到90年代,隨著計算機的普及,操作系統攜帶的TCP/IP也很快壟斷了網絡層、傳輸層。但是TCP/IP再牛叉,也不過是一個軟件層面的代碼,要想讓數據報文在網絡里傳輸,必須要有硬件網絡接口設備落地。由于以太網硬件設備的普及,很自然TCP/IP就會和Ethernet狼狽為奸,形成一個 物理層、鏈路層、網絡層、傳輸層融合在一起的全棧協議鏈,一起給應用層提供標準化上網服務。
在Ethernet眼里,IP不過是自己客戶名單中的一員,理論上這種客戶名單可以有65536個(Ether-Type 2個字節),客戶名單還可以有ARP、IPv6、PPPoE、802.1Q、802.1x等等太多了,就不一一羅列了。
有鑒于此,Ethernet一直保持獨立自主狀態。這種獨立自主狀態,對于實現層級之間的隔離是最最理想的。換句話說,Ethernet壓根不關心IPv4的地址長度,也無需擔心IPv6地址長度,它們僅僅是客戶要運輸的貨物而已。如果不隔離,網卡的內部數據結構體,會隨著客戶地址的不同類型而變化,顯然不利于層級隔離開發原則。
也許不遠的將來IPv4、IPv6會被更先進的網絡層協議所取代,但是網卡依然還是原始的模樣,內部實現無需任何改變。保持獨立自主的實現,是網絡分層開發最偉大的創新與個性!