有了 IP 地址,爲什麼還要用 MAC 地址?

作者:嚮往美 鏈接:https://www.zhihu.com/question/21546408/answer/53576595
來源:知乎 著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。

我來說說我的理解吧。 舉例說明: 我們知道,出於歷史的原因,世界上出現了很多的國家和民族,他們都使用不同的語言。 比如,要和法國人通信就要學會法語,和日本人通信就要學會日語,同理,要學會德語、意大利語、西班牙語。。。 如果每和一個國家通信就要學會對方的語言,那可要累死了。 所以,最好的辦法,就是大家都用1種語言通信。這樣只要學會一門外語就可以跟所有的國家通信了。 這種「世界通用語言」可以通過2種途徑得到:現成的,和新發明的 工業革命以後,日不落帝國是世界的中心,其直接繼承者美國也是世界的中心,它們都使用英語,於是英語藉助其強勢地位成爲世界通用語言。 同時,「世界語」也是一種世界通用語言,與英語不同,世界語是「新發明」的語言(當然也借鑑了其它語言的規則),也就是說,沒有哪個民族是」世界語民族「,也不可能在某處發現一塊1000前的石碑,上刻世界語。。。 因爲沒有一個國家的母語是世界語,所以在用世界語交流的時候必須要經過一個「翻譯」的過程:把本國語言,翻譯成世界語。 所以我們可以說,世界語是一種"無根"的語言,是一種「不完備」的語言,它必須依賴於其它的語言才能使用,或者說:運行於其它語言之上。 出於歷史的原因,「電腦網絡」是從無到有、從小到大發展起來的。 有很多的網絡被髮明出來。有些網絡只應用於小面積,比如一個家庭,一棟樓房,線路長度按米、百米計算。這類網絡叫做「局域網」 有些網絡應用於很大的面積,比如我辦理了寬帶,這樣我和電信公司之間就有一條長達N公里線路,或者電信公司和電信公司之間有長達幾十公里的線路。這類網絡叫做「廣域網」。這些網絡各自使用自己的協議(語言),互不兼容(不同的語言相互不能理解), 爲了實現網絡世界的大一統,讓這些互不兼容的網絡能夠相互通信,從而建立起一個「國際互聯網」,就需要大家都用同一種協議通信。 時勢造英雄,這種協議出現了,名叫「因特網協議」(也叫TCP/IP協議)。 因特網協議就是「網絡世界語」,不管你這個網絡的私有協議是多麼的千奇百怪,對外通信一律都用TCP/IP。因爲因特網協議不是這些網絡的原生協議,所以各種網絡都要有個「翻譯」的過程:把本網協議,翻譯成因特網協議。 正如上文所言,世界語不是任何一個民族的「原生語言」,所以大家使用世界語都需要一個翻譯的過程。而這個翻譯過程,正是MAC地址之所以存在的理由,下文詳述。 在因特網出現之前就已經有很多的網絡出現了,而且因特網並不是第一個全球大網(很明顯,歷史悠久的有線電話網絡就是全球大網) 然後,因特網出現了。 需要注意的是,因特網誕生之初並沒有想到自己會成爲一個全球性的大網,所以沒有針對全球網絡的特點進行設計,這就留下了一些短板(比如IP地址不夠,協議有漏洞,想想大名鼎鼎的ARP協議漏洞 。因特網成功以後,這些漏洞被IPV6彌補)。 設計因特網的初衷,是爲了應付對蘇聯的核戰爭(當時還存在蘇聯)。 你可能聽說過「恐怖平衡」這個概念,說的是美蘇任何一方如果先發制人的向對方發動核戰爭,對方的核報復也會讓自己身處火海,所以誰也不敢首先使用核武器,從而避免了核大戰。 但很明顯,只有「棋逢對手」纔會出現「平衡」,如果我方「棋高一着」,有能力取得核戰爭的勝利,那就可以把這可笑的「平衡」扔進太平洋。 美國國防部(DoD)在思考: 我往蘇聯扔一顆核彈,蘇聯的軍事指揮通信系統就垮掉了,沒有了指揮,再強大的軍隊也成了無頭蒼蠅,沒有了戰鬥力。 可蘇聯往美國扔核彈,美國也會有同樣的結局。 可是。。。如果我設計一種通信網絡結構,這種結構」容災性「很好、很」健壯「、很」高可用「 ,蘇聯的1顆核彈滅不了,2顆核彈滅不了,3顆核彈纔可以滅。而我1顆核彈就可以滅了它。這樣我就有了喘息的餘地,我就可能成爲核戰爭的勝利者。 因特網就是在這種思考之下誕生了。 因特網能抵抗核爆炸?真有這麼神奇麼?看看圖就知道了。 先說說傳統的電話網拓撲: 電話網是一個典型的星形網絡,用戶A要給用戶F打電話,其路徑就是A-K-F 同理,用戶C要給用戶G打電話,路徑就是C-K-G 也就是說,任何用戶之間要打電話,都必不可免的要經過中央交換機K 所以你知道爲何在打仗的時候,電信局是首要攻擊目標了,因爲電信局裏面放着電話交換機。如果要破壞這個城市的電話網絡,我不用派兵挨家挨戶砸電話,只要用導彈炸掉電信局的電話交換機,就萬事OK了! 那麼該怎樣防止這種情況的發生呢?傳統的戰爭理論是這樣思考的: 方案A,我隱藏交換機的位置所在,讓敵方找不到它在哪。 但現代戰場,天上有衛星,地下有監聽,在嚴密的監視網絡面前,想要將自己隱匿起來,已經不容易了。 那就方案B,我在交換機周圍佈置重兵,建設防禦工事,就算你發現了也攻不進來。 但現代化的武器威力巨大,再加上核武器,再多的人、再堅固的工事也難以抵擋。 可見由於現代化武器的出現,戰爭理論也要跟着現代化了。 於是思想家們開動腦筋,另闢蹊徑,在網絡的拓撲結構上做文章,改「集中式」爲」分佈式「,造就出了因特網。 因特網採取了什麼方法避免核心設備被攻擊,從而讓網絡能夠在戰爭中存活更長的時間呢? 方法就是:沒有核心設備! 詳見下圖: 可以看到,網絡拓撲由星形網絡,變成了網狀網絡。 這裏的每個用戶(或稱節點)都是一個電話交換機(對於因特網,就是路由器) 此時,如果A和H打電話,那路徑可多了: 最短距離當然是A-H,所以優先走A-H。 但如果A-H斷掉了,還可以走A-D-H、A-E-H、A-E-F-B-D-H。。。。 所以,A-H斷了沒事、B-C斷了沒事,C-D斷了沒事、F-G斷了沒事。。。 由此可見,網狀網絡的是一種非常「高可用」的網絡,容災性很好。 這些節點的地位(功能)都是相同的,不存在某個節點比另外的節點更重要的情況。所以一個節點出了問題,另外的節點就可以取而代之。 而星形網絡就不是這樣,很明顯中央節點比其它節點更重要,中央節點失效,其它節點無法替代,整網就失效了。 隨着節點數的增加,節點之間的可用線路的數量呈指數方式增加,函數是N*(N-1)/2。 這個簡單的函數可是有很大的威力的,借用網上的一張圖: 相比於星型網絡,如果要破壞這樣的一張網狀網絡,又該如何下手呢? 因特網最初是國防通信網絡(APRA-阿帕網),後演變成連接各大學、政府部門和科研機構的教學科研網,最後演變爲燒錢的商業化網絡。 以上所說的知識面叫做「因特網的體系結構」。 再說說因特網協議:TCP/IP協議族 從一開始,因特網就沒有想過成爲世界性大網,所以因特網的協議從制定之初就是」不完備「的。 也就是說,因特網必須要基於其它網絡之上,依靠其它的網絡才能完成自身的功能。 就像是世界語是不完備的,必須要基於其它語言之上,才能實現其自身的功能。 如果世界語運行於漢語之上,那就寫作: 世界語 over 漢語 比如,已經存在一種局域網技術,叫做」以太網「,那麼好,因特網就運行於以太網之上,英文寫作: TCP/IP over Ethernet 注:TCP/IP是專爲因特網開發的一系列協議當中的2個協議,因這2個協議最重要(同時也最出名),就用這2個協議代言因特網了。 還有一種城域網技術叫做「令牌環網 」,那麼好,因特網就運行在令牌環網之上 ,英文寫作: TCP/IP over Token-ring 還有一種廣域網技術叫做"ATM",那麼好,因特網就運行於ATM之上,英文寫作: TCP/IP over ATM 如果你想要因特網運行於USB呢?自然就是: TCP/IP over USB 。。。。。。。。。。。 你肯定知道OSI 7層模型,IP、TCP分別對應第三層和四層,因特網協議族並沒有覆蓋完整的7層 ,很明顯,因特網沒有定義水晶頭的形狀、網線裏有幾根銅線、銅線裏面傳輸的電壓是多少等等參數,這些參數是諸如以太網這樣的網絡定義的。 那麼,爲什麼因特網不定義這些參數呢? 上面說了:「也許」從一開始,因特網就沒有想到自己會成爲一個世界大網,所以就沒有定義得這麼複雜。 但也有另一種可能:其實一種網絡技術,不一定要「大而全」,從1層到7層全制定,可以只制定其中幾層。 比如以太網只定義1~2層(物理層、數據鏈路層),IP和TCP分別定義了3、4層(網絡層、傳輸層),再往上既有因特網的協議(比如FTP),也有其它公司的一些高層協議(比如SQL、JPEG、HTTP) 這樣,不同的網絡、不同的協議之間相互配合就可以了。 就像是,我是一家生產火車的廠家,我當然可以生產鐵軌,制定鐵軌的寬度,生產火車車廂。 但既然已經有大量的鐵軌鋪設完畢了,那我就不用管鐵軌的事情了,火車運行於現成的鐵軌之上就可以了。 在這裏,鐵軌就是以太網(局域網)、ATM(廣域網)或者其它現存的2層網,火車就是因特網。 所以,從來不存在「純粹的因特網」,因爲因特網沒有定義底層,只存在TCP/IP over XXX。 經過以上的解釋,你就知道爲何一定需要MAC地址了:因特網並不存粹,還包括以太網。 因爲因特網是第三層協議,是沒有根基的「空中樓閣」,需要以太網這樣的2層網具體落地實施,而MAC地址又是2層概念,所以MAC地址就這樣進入了因特網的體系結構。 以太網的MAC地址格式是12個16進制數,比如0800200A8C6D 因特網IP地址格式是4個點分10進制數,比如192.168.201.160 剛纔說了,不存在「純粹的因特網」,所以因特網必須要基於以太網之上才能工作,所以就是「同時運行了2個網」 就像是世界語必須要基於中文之上才能工作,所以就是「同時說了2種語言」 所以,就必須要「翻譯」 也就是把以太網的MAC地址,翻譯成因特網的IP地址,這就是ARP的作用 假如我的中文名字叫做「劉濤」,如果要翻譯成世界語,就肯定要有個世界語的名字(假設叫LIUTAO) 同樣是名字: 劉濤→翻譯成→LIUTAO 同樣是地址: 21-35-6D-1F-83-9E→翻譯成→202.143.90.8 當然了,如果因特網從開始制定之初,就定義了從物理層到傳輸層的協議,那麼因特網就不再依賴於其它任何的網絡,這個純粹的因特網就只需要純粹的IP地址,網線所插上的也不再是以太網卡,而是「因特網卡」,既然沒有了以太網,也就不用什麼MAC地址了。 講完了。 我是不是太羅嗦了。。。。