網卡為什麼要用MAC地址而不直接復用IP地址?(有沒有IP地址標識的網卡?)

學習網路的時候,教科書在表現IP地址的偉大時,喜歡設問為什麼IP地址重要,而不能直接用計算機網卡的MAC地址進行網際互聯。其實的解釋有物理網路有很多種,而新的抽象層次能夠聯通不同類型物理網路,並向上層提供統一的IP介面。

可是,我自己上網查了查資料,看到TCP/IP協議早在在1973年左右發明阿帕網的人 提出了,當時乙太網還沒有發明或普及。乙太網是Xerox的人在1976年左右發明推廣的(
在1976年,梅特卡夫和他的助手David Boggs發表了一篇名為《乙太網:局域計算機網路的分散式包交換技術》的文章。 )。

所以這裡有幾個疑問:

1.在乙太網出現之前,阿帕網(互聯網前身)如何做互聯的?是不是僅僅用IP地址做機器的標識和定址。

2.如果是,IP地址能夠識別不同的機器和互聯,為什麼在後面又要發明一套MAC地址呢?總感覺每個報文通信,都要在IP和MAC之間做一次轉換是一件特浪費資源的事情,而且還多出來了複雜的協議和機制如DHCP、ARP等。

3.聽說現在的IPv6,因為地址空間巨大,所以在IPv6地址裡面直接賦予幾個欄位可以完全復用網卡的MAC地址,這樣做不會產生問題嗎?

4.
如書上所說,分層思想很重要, 那socket編程的時候,為什麼一個結構體要把IP地址和TCP埠都做到裡面去,而不對每個層次都設計一個抽象結構呢(TCP socket和IP socket)?分層和跨層,各自的依據到底是什麼呢?

____________

看了以前的問題,描述的有些不清楚,所以又修改了一下。對於第2個問題:IP和MAC的分開,@羅曙暉的答案說是因為要完成位置標識和個體標識兩種功能,覺得最為透徹;而對於第4個問題,@

長風說,是為了在編程時避免引入不必要的複雜性,也相當有道理。還有其他知友的很有見地的見解,我也多多受教了,謝謝大家。


謝邀,就說一點,mac地址是和位置無關的,所以是不可路由的,舉例來說,你的筆記本mac為xxx:xxxx...,原來在上海,現在出差到了北京,mac地址不變,那別人怎麼訪問你呢?一種方法是類似於gsm網路裡面使用hlr來搞定,現在的移動ip里有類似的方案,一種就是全部採用明細的路由,即整個internet上都是全掩碼的路由,這是不可能的。。。。

順便再提一句,ipv6里的地址就是前綴+mac地址構造的,但是前綴也是必須的。

再提一句:ip網路里一個很大的問題就是,ip地址僅僅代表了位置,而不代表身份,所以帶來了很多問題。


1、回答不了你的第一個問題,我也一直疑問,其實只用ip地址在區域網里定址是完全可行的,為什麼還要加MAC協議?估計是政治、歷史、商業的原因,3Com公司不就是因為這個東西強大的嗎。

2、第二個問題可以回答,很簡單,IP層和TCP層做的事情不一樣,一個是路由定址,一個是控制流量、保證數據正確等。將不同的功能按層次劃分出來,思路清晰,下層對上層透明,就是分層的好處。對於我們使用socket編程可能看不出什麼優勢,TCP以下都是一層,甚至對於使用網路框架編程的人來說,HTTP以下都是一層。但是對於其他人,比如路由器生產者,他只關心IP,如果沒有單獨的IP層,編寫路由程序那就太麻煩了。

首先在不同區域網之間發送數據包,必須要有路由定址,也就是IP地址,以及IP地址級別的劃分,既然這個功能不可缺少又相對獨立,為什麼不把他獨立成一層,對上對下都透明?然後數據包到達了目的主機,中間一個包丟了或者出錯怎麼辦?兩個包因為網路堵塞到達的順序不一致怎麼辦?等等這些問題就引出了TCP層。


兄弟, 別聽他們瞎BB, 都學傻了

你把家裡交換機改一下, 二層功能關了,報文來了就看IP, 絕對可行。

這裡面主要有歷史原因,mac層面當初還要承載不同協議,不止IP, 當年比較流行IPX...現在誰還用其它的二層協議啊。。。別拿一些必須的二層來抬杠。

除了你家,數據在大網上都根據IP路由,進了你家一樣根據IP找mac,看看mac在哪個埠, 然後才決定往哪個埠發送。。這完全是脫褲子放屁,根據IP找埠不就完了。。。交換機還快很多。

哪天咱們搞個純IP網路,每個報文節省14位元組。。。全球平均節省多少電量。。。這是對全人類的一大貢獻。。。運營商可能說:挖草,又要換設備?!

但是注意,IP傳輸的本質就是找目的IP的位置,就像送快遞一樣,你的IP必須在固定範圍內,不能帶出特定網路。就像你在家有地址, 在公司有地址。mac呢,全球唯一識別id, 不知道還能撐多久,意義不大,對某些敏感瓷國家特別有意義。沒有mac整個別的協議, 給設備拿到ip就行。

反正現在你基本用不上二層的數據,發微信看視頻都是三層的,二層信息基本上就是雞肋!


因為這兩個東西不是一撥人搞的,只是後來迫於世俗壓力而在一起了。

至於OSI七層協議模型什麼的,只是事後用來證明當初結合的合法性而已,並沒有什麼卵用。


IP地址好比你家的門牌號碼,你住在不同的地方就有不同的門牌號碼。郵局給你送信的時候根據你的門牌號碼(當然還有其他地址信息)找到你的位置。

MAC地址好比你的身份證號碼,一般不會改變。但是知道你的身份證號碼是沒法找到你的,因為身份證號碼和地理位置信息無關。


MAC和IP的區別在於前者叫做物理地址而後者叫做邏輯地址。

「物理」可以理解為「銘刻的」或者「天生的」,總之是不可變動的(當然現在網卡大部分都可以自己修改MAC,這是後來發生的事情,我就不贅述了)。類似於你的出生記錄,一輩子就這一張,沒法改。

「邏輯」可以理解為「寫上去的」或者「人為規定的」,總之是在某種情況下別人賦予你的。為什麼要賦予你新的地址?為了管理方便。比如你上學,學校不會拿你的出生記錄號碼198903161348029來代表你,代表你的是你的學號08JSJ04837,那麼別人很容易知道你是2008年入學的計算機04班的學生——這種信息是永遠不可能包含在你的出生記錄號碼上的。同樣的,工作了以後也不會拿你的出生記錄來代表你,你有你的員工號11HRDBJ3863,表示你2011年入職,供職於人力資源部,就職地點在北京的3號辦公室等等——這時候你已經不是某大學08JSJ04837了,但是你還是出生記錄編號198903161348029。

關於TCP/IP分兩層的問題,兩層的作用是不同的,不要把不同的作用混在一起處理是攻城的基本原則。OSI還分七層呢。


可以去看看網路的「七層」表述。MAC屬於第二層,IP屬於第三層。各有各的作用。


子曰:思而不學則殆

帶著問題去學IP協議吧


這事還得從OSI7層說起。

7.Application

6.Presentation

5.Session

4.Transport

3.Network

2.Data Link

1.Physical

建立7層模型主要目的是為了將服務,介面,協議區分開來。服務說明某一層為上層提供一些什麼功能,介面說明上一層如何使用下層的服務,而協議涉及如何實現本層的服務。

IP屬於第三層,MAC屬於第二層。

第三層並不僅僅有IP,還有IPX,IDP等等一系列協議構成

第二層同樣,IEEE 802,ATM,ISDN,幀中繼等等。而MAC與LLC一起工作。LLC負責向上層提供服務,MAC主要包括數據封裝定址。

下面來說你的問題。

其實你的疑惑的原因是不清楚OSI7層,每一層都是獨立工作的。比如第三層IP可以與第二次幀中繼配合使用,同樣可以傳輸數據,而且沒有MAC地址。


其實我也在糾結使用了IP,為什麼還要使用MAC,剛搜索的時候突然想到:TCT/IP通信的過程中,最底層是物理層,而IP被封裝在MAC幀中,對於物理層是不可見的,所以只能通過MAC地址就行通信。不知道對不對,但是感覺這樣解釋比較合理。


回答你第二個問題,首先我們要知道計算機網路用於完成網路上數據交互的,或者說數據包交換的一種技術。現在你也知道本身全球互聯網非常巨大,全球互聯網是一個一個子網(區域網)組成的。表示一個一個子網是通過ip地址標識的;所以ip地址有重要作用;為什麼需要在ip地址下面再次加入一個數據鏈路層地址MAC,我們先講一個故事,原來只有一台計算機,所以數據都是在這一台計算機上面,沒有數據包交換的需要,後來有了10台計算機,這個時候就有了數據包交換的需要,所以最簡單的辦法是將十台電腦連在一條線上,然後問題出現了每台電腦不知道這個數據是不是給我的,所以要一個設備標識符,那好吧每個設備給一個設備地址MAC,這個地址是用於標識是不是傳給我的,目的MAC是我的地址就取下,不是我的包就丟棄。後來計算機越來越多,每個大學,每個地方政府,每個銀行每個組織都有幾百台電腦,現在是不是還是直接用一個網線直接相連呢?理論上可以,但是這樣不現實啊。因為這樣管理網路代價太龐大了。比如你一個北京的電腦和廣州的電腦通信,你要知道廣州電腦的MAC地址,而且二層通信是通過廣播方式來通信,不是通過ip路由來通信,可想而知一定發生廣播風暴,每個人都收不到數據。所以才設計一個IP層,ip層可以說是網際層,就是連接網路和網路的,比如廣州一個公司的10台電腦和北京分公司的10台電腦,這兩個地方本身自己構成一個區域網,內網裡面通信可以使用MAC地址通信,但是現在一般都是用內網IP通信,但是廣州的區域網主機和北京的區域網中主機通信是不可能通過MAC地址通信的,後果就是廣播風暴,必須通過IP地址在網間路由通信。

總結:

IP地址是用於網路之間的通信,將所有子網設備納入一個大統一的叫互聯網的網路體系中;

MAC地址:主要用於區域網裡面二層交換機層面的通信


推薦閱讀:

寬頻連接獲取到的ip(100.64.x.x)為什麼不能被ping?
59.81.1.128/28 59.81.1.144/28 59.81.1.160/28 這三個ip地址為什麼不能直接聚合?
IP在路由表選路的過程?
如何快速判斷一個 IP 是否屬於中國大陸?
localhost是不經過網卡傳輸的,而127.0.0.1則要通過網卡傳輸的,這種說法正確嗎?

TAG:計算機 | 計算機網路 | IP地址 | TCPIP |