IP地址和MAC地址的區別和聯繫是什麼?

之前看了知乎有一個問題IP地址和MAC地址的區別。以前覺得挺清晰的,結果看完之後很多東西沒看懂。網路中每個電腦有一個IP地址,MAC地址表中儲存IP地址。路由器根據MAC地址來選擇路由進行數據發送。這個用路由器不就是對於不同的IP地址進行甄別仔發送到相應的路徑。那麼這兩者還有什麼其他的區別和聯繫?


看了題主的描述,首先糾正一下幾個比較模糊的概念:「MAC地址表儲存IP地址」,MAC地址表是二層設備中存儲「MAC地址」和「轉發埠」映射關係的表,並不直接存儲IP地址。「路由器根據MAC地址來選擇路由進行數據發送」,對於三層設備的三層埠來說,通常是基於報文目的IP地址,對照自身的路由表來選擇轉發路徑,只有二層設備基於「MAC地址」進行數據幀的轉發。
這個問題展開了說比較複雜,但是只考慮基本原理在下覺得似乎也沒有那麼麻煩,一句話概括就是「二層基於MAC地址轉發數據幀,三層基於IP地址轉發報文
MAC地址是燒錄在網卡或者介面上的物理地址,具有二層意義和全球唯一性,一般不能被改變。IP地址是網路中的主機或者三層介面在網路中的邏輯地址,在同一個網路內具有唯一性
IP地址和MAC地址的關♂系要分在二層通信和在三層通信兩個部分來說明(其實本質上是一樣的)
二層以下數據幀的交換一般通過交換機或其他二層設備,需要用到主機間的MAC地址,但是通常主機網卡配置的是IP地址,此時就需要藉助「ARP協議」將目標主機的IP地址轉換為對應主機的MAC地址才能進行通信,完整過程就是主機依靠IP-MAC的對應關係封裝數據幀,二層設備在收到含有目標MAC地址的數據幀後,查看自己的「MAC地址表」,便知道這個MAC地址該從自己的哪個埠發送出去。在windows下可以使用arp -a查看這種對應關係,可以在模擬器上輕鬆展現整個過程。

當PC0和PC1能正常通信時,在PC0上查看ARP表如下:

可以看出,到目標主機的IP地址映射為對應的MAC地址了,此時PC0就可以將目標主機的IP地址轉換為對應的MAC地址封裝在數據幀中發給交換機。
交換機有那麼多埠,它怎麼就知道你發送的這個數據幀的目的地址該從自己的哪個埠轉發出去呢?因此,交換機自己還要維護一張「MAC地址表」,用來記錄目的MAC地址-埠的映射關係,如下圖

現在交換機看到0004.9a2e,3ad1的MAC,就知道要從F0/2把數據幀發送出去啦O(∩_∩)O二層數據幀的通信基本原理就是這些,當然這兩張表是如何生成的就不是這個話題的討論範圍了,具體可以參考ARP協議的工作過程和交換機的轉發原理。
二層討論的都是同一個網路內(IP地址在同一網段)數據的交換,「IP地址和MAC地址的關係很明確」:雖然主機都配置了IP,但從上面的例子可以看出,IP地址實際並不起作用,在生成數據幀的時候就轉化為MAC地址了,並不參與實際的通信過程。但是如果要通信的主機不在一個網路內,這時IP地址才真正發揮它的作用。
IP數據包在三層網路中的定址通過路由器和各種路由協議來完成,在這個過程中,IP地址和MAC地址又有什麼關係呢?
看下面的拓撲

現在路由器的兩端分別為兩個網路。數據想要從PC0到PC1,實際上經歷了兩個過程,先從主機到路由器的F0/0,再從F1/0口到PC1,單獨看每個過程,由於在同一個網段內,所以就和上一種情況是一致的,唯一不同的是此時我們必須配置網關。我們仿照剛才的過程看看PC0的ARP表是什麼樣的

可以看出,數據想從PC0到路由器,依然必須經歷從IP地址到MAC地址的轉換過程,而這個網關的MAC恰好就是F0/0口的MAC,再看交換機1的MAC地址表:

恰好也有對應的埠,此時交換機就知道要把數據從F0/24發送出去,到這裡起作用的還是MAC地址,那IP地址到底到哪才發揮真正的作用呢?我們繼續往下看,現在查看路由器的路由表:

路由器收到數據包後會查看數據包的目的IP欄位,我們是發送到192.168.1.1這台主機,看路由表發現正好有這個條目,到192.168.1.0/24要從F1/0這個埠發送出去。
後面的過程就不再敘述了和前面基本一致了。
也就是說,雖然數據包發送時包含了完整的TCP/IP四層信息,但是IP地址只在網路間定址才起作用,在同一個網路內,IP地址在發送端被轉化為MAC地址進行定址,而這種轉化和交換的對應關係,依賴於ARP協議和MAC地址表。
對於上面的例子來說,在PC0到路由器的F0/0之間的網路和F1/0到PC1之間網路,都是MAC地址負責定址,IP地址只在負責連接兩個不同網段的路由器上才發揮指導作用。


網路層協議是IP,底層協議是乙太網,在區域網的範圍內,通過ARP來將IP和MAC地址對應起來。在主機中,並不是"MAC地址表中儲存IP地址",而是「ARP表中存儲區域網內IP地址和MAC地址的對應關係」

傳統交換機只處理乙太網報文,完全不看IP層的內容。每次主機發送乙太網幀,源地址填寫自己的MAC地址,目的地址填寫對端的MAC地址或者廣播地址。交換機每次收到乙太網幀,就在MAC地址表中記錄這個幀的源MAC地址和收到這個幀的埠,這叫做MAC地址學習,然後再看這個幀的目的MAC地址,如果在MAC地址表中找到,就發給對應的埠,否則廣播。

路由器則不同,它通過收到包的IP地址,查找路由表來決定轉發到哪個埠。

IP地址是地域相關的,多個IP地址可以匯聚表示,而MAC地址是地域無關的難以匯聚,所以大規模網路只能使用三層路由組網。

當然,還有VLAN等細節,還有三層交換機,有的路由器還有二層板卡,還有路由轉發分離等等,但這些基礎知識都一樣。


補充一點個人看法。

網路分層的原則:每一層獨立於其他層完成自己的工作,而不需要相互依賴,上下層之間通過標準介面來互相通信,簡單易用又具有擴展性。

乙太網位於數據鏈路層,它是一種多路訪問網路,換句話說:一個廣播幀發出去,這個廣播域里任何一台主機都可以接收。如果乙太網沒有屬於自己的地址,難道都靠廣播的方式傳播出去?比如有兩台主機A與B,互相知道對方IP,如果沒有MAC地址,它們之間的通信幀到達交換機(交換機屬於二層設備),由於乙太網頭部沒有MAC地址信息,交換機也只有從各個介面flooding 出去,結果就是這個廣播域里的每台主機都會接收,由於網卡沒有MAC地址,這些包會一直到達IP層,只有AB會接收,其它主機統統丟棄,這是對通信資源最大的浪費。

所以乙太網必須有自己的MAC地址,以方便在數據鏈路層來標示自己的唯一存在。

一般乙太網通信有這麼幾種方式:

1)unicast
A與B通信,A(10.1.1.1)知道B的IP為 10.1.1.2 ,需要通過ARP Request 廣播的方式發送出去,B是廣播域里的一員,所以也會接收到ARP,於是以ARP Reply的方式告訴A自己的MAC地址,於是A就知道B的MAC地址,並緩存在 ARP table 里。於是A與B就可以互相通信了。

2)multicast
既然IP層有組播地址,比如 239.1.1.1,那二層也要有對應的MAC地址。這個MAC地址需要ARP嗎?不需要!只需要計算就可以得到,計算方法如下:
01:00:5e + 組播IP低23位 = 01:00:5e:01:01:01

細心的童鞋一定會發現 224.1.1.1,225.1.1.1 …239.1.1.1 所對應的MAC 都為01:00:5e:01:01:01,這是歷史原因造成的,因為申請組播MAC地址時,IANA只給了23位。

3)broadcast
IP層的廣播地址為:255.255.255.255
乙太網對應的MAC: FF:FF:FF:FF:FF:FF


一般鏈路層是多路訪問的網路一定會有自己的標識符ID 或MAC地址,比如Frame Relay、ATM、Ethernet;而點對點通信,PPP、HDLC則不需要地址標識符。

另外第二層的 MAC地址,第三層的IP地址,第四層的Port Number提供了三次篩子(filter )的機會。

第一個篩子:如果不是本機的MAC地址、也沒有匹配到 組播MAC,也不是廣播地址,則網卡拒絕接收;否則進入第二個篩子

第二個篩子:依據Unicast / Multicast / Broadcast 做出判斷

A Unicast
A.1 匹配本地IP ,依據協議號提交給TCP/UDP,則進入第三個篩子
A.2 沒有匹配,查詢路由表,找到下一跳,發送出去

B Multicast
提交給已註冊加入該multicast group 的進程

C Broadcast
提交給已註冊接收broadcast 的進程

第三個篩子:依據Port Number 將數據提交給特定的進程


不太懂,瞎答一個
快遞員要來找到張三給他送包裹,mac地址就是張三這個人,走到哪都是張三,世界上獨一無二
ip地址就是他家地址某市某區某小區多少號,這地方任何人都可以住,可以是張三也可以不是張三
哪天張三搬家了,要找張三就得換一個地址,原來的地址住的也不是張三了


對於網路來說,MAC地址是無序的,雜亂的,沒有規則的,就像人的名字一樣,想要知道某人在哪個經緯度,必須做人名和經緯度一一對應的記錄。而要記錄整個網路世界中的所有信息,這個數據量太大。


而IP是分層的,這和我們常用的通訊地址一致,類似於 中國/北京/海淀/後場村路/xx樓/xx號。負責整個中國的設備只要知道北京在哪,找到北京之後,負責北京的設備只要海淀在哪,負責海淀的設備只要知道後場村在哪,這樣逐級查找。每個設備需要存儲的信息較少。


我嘗試用一種我認為比較容易理解的方式來解釋 MAC 與 IP 的區別。

題主已經知道了『每個電腦』都有一個 MAC 地址(Media Access Control address),準確說應該是『每個可以連接到乙太網(Ethernet)的設備必須有一個 MAC 地址』,這個地址就是為了當別的設備向這個設備發數據包的時候可以指定地址(換言之,快遞員要想給某個客戶送包裹,總要有個地址對吧)。

理解了 MAC 地址,那我們看看可以怎麼用這個 MAC 地址。我們可以把兩台電腦連起來,然後這兩台電腦就可以直接使用數據鏈路層(OSI 第二層)的 PPP 協議(Point to Point Protocol) 收發數據了,這個時候每個數據包都會直接使用這兩台電腦的 MAC 地址(源地址和目標地址)。在這種場景下我們沒用到 IP 地址就實現了設備之間的數據交換。

IP 可以用於更長距離的設備之間的互聯。假設你在中國有一台電腦 A,想訪問美國的一台電腦 B,你不可能直接從中國拉一條網線連接到美國,理論上說得通,但是不具可行性。所以在中國和美國之間需要眾多的中轉路由器,電腦 A 每發一個數據包,都要經過這些路由器,才能到達電腦 B,在這種情況下,你不可能直接使用 PPP 協議,因為兩台電腦不是直連的。

現在回到我們生活中最常見用一台電腦(電腦 A)連接一台家用路由器,大多數人家裡都有一個或者多個無線路由器,當你連接上去之後,電腦 A 的網路默認設置裡面會有一個已經幫你設置好的網關地址,Windows 下叫 Gateway(網關),Mac 下叫 Router(路由器),在這裡它們只是同一個東西的不同叫法,通常會是類似 192.168.1.1 這樣一個地址,這就是路由器的 IP 地址。現在電腦 A 上發送出去的每個數據包,首先要經過這個路由器,但是它只有路由器的 IP 地址,沒有路由器的 MAC 地址,這樣是發不了數據的(數據鏈路層的數據包協議中要求定義目標 MAC 地址,這樣當路由器收到一個數據包的時候,看到數據包裡面指定的目標地址跟自己的 MAC 地址一致,才會進行下一步處理,否則,數據包會被丟棄),所以電腦 A 需要找出路由器的 MAC 地址,這時候它使用 ARP 協議(Address Resolution Protocol)向它的子網(還記得那個子網掩碼的東西嗎? 255.255.255.0 )發送一個 ARP 廣播(Broadcast),這個廣播實際上是在問一個問題:請問誰的 IP 地址是 192.168.1.1?麻煩你告訴我你的 MAC 地址。這個時候路由器收到這個 ARP 廣播,就會直接給電腦 A 發送一個 ARP 響應,在裡面包含自己的 MAC 地址。至此,電腦 A 知道了路由器的 MAC 地址,就可以直接向路由器發送它的數據包了。這個時候數據包裡面包含了電腦 A 的 MAC 地址、本地路由器的 MAC 地址、電腦 A 的 IP 地址和電腦 B 的 IP 地址。接下來的你的路由器會把數據包傳給你的 ISP,方式跟上面說的大同小異,而 ISP 與 ISP 之間則需要根據數據包中指定的目標 IP 和路由器存的路由表(Routing Table)來確定把數據包傳給接下來的哪個路由器,直到數據包被傳到跟電腦 B。

上面說了 MAC 和 IP 各自的使用場景,但是並沒有說到他們的區別。他們的核心區別是在一個子網路裡面(比如一個公司可以有自己的內部網路),MAC 地址可以在這個子網路裡面定位到不同的網路設備,IP 可以在整個 internet 中定位到不同的子網路。所以 MAC 是『設備 &<-&> 設備』,而 IP 是『網路 &<-&> 網路』。

到這裡你可能還有疑問,假設沒有 IP,只用 MAC 就不能實現這種超遠程的互聯嗎?答案是可以的,但那樣會失去很多的靈活性,因為 MAC 是全局唯一的,不存在『MAC 子網』這樣的東西,意味著只使用 MAC 沒辦法創建子網路,全人類只有唯一一個大網路。舉個不太恰當的例子,有點像域名之於 IP 地址(我指的不是可讀性問題,而是這種 indirection 帶來的創造靈活性的可能)。


MAC是身份證號碼,用來識別網路設備本身。IP地址是居住地。


樓上說的對於非計算機專業來說太難懂,我給大家舉個例子就行了!
ip就相當於你家的地址,MAC就是你的指紋,
你的指紋是唯一的,但你的地址是可以跟別人重疊的。
我去找你,先跟你說話,那我就根據你的地址一步一步找到你,再根據你的指紋,確定這個就是你。
只有地址,你只能找到他,不能確定是不是本人,只有指紋,你根本找不到人。


二層是靠mac通信的,看起來使用ip,實際上是依靠arp表進行查詢通訊的。
三層就不能這麼搞,不然arp表要有多大……笑

另:利益相關 西北某思科金牌集成商 擁有一年虛擬化與網路經驗,能夠獨立完成一個項目。同行有意交流者,請私信。


感覺你的概念全亂了…
首先,MAC是data link layer的協議,IP是network layer的協議。同一台設備上的兩者之間通過layer 2-3 interfere通信,不會相互識別對方。segment或者datagram封裝了IP後稱為packet,packet封裝了MAC後成為frame。
其次,MAC地址是NIC的地址,global unique。而IP address,對於區域網中的host,是動態分配的,對於server,是靜態分配好的。
最後,大概說下轉發過程好了。
如果在一個network里(對ISP只有一個IP address),數據走二層轉發,也就是說只需要用到二層協議,也就是MAC,每一個switch都只需要通過用DMAC+VID查MAC地址表就能找到出埠號。另外,每次經過switch frame的DMAC和SMAC都會改變。
如果是兩台host跨network通信,那麼走三層轉發。整個轉發過程中,報文中的DIP SIP都不會變,但是MAC也是每經過一個switch/router都會變。如果某一跳,router本身的ARP表中沒有對應DIP的下一跳的MAC,那麼會通過ARP協議來請求獲取對方的MAC address。
整體來說,就是IP離了MAC不能跑,MAC可以離了IP單獨跑,但是跑不遠。
以上,希望解釋清楚了~
btw,爪機碼字+國內設計交換機/路由器獲得的專業術語加上國外讀networks學到的專業術語導致中英文混雜…求不吐槽…


描述計算機網路系統可以採用分層的方法,一般分為五層(或更細分七層的),各層有各自的分工,然後有機結合成整個網路傳輸的系統。
自頂向下分別為應用層、運輸層、網路層、鏈路層和物理層。題主所說的IP地址為網路層地址,MAC地址為鏈路層地址,其實說白了MAC地址也就是物理地址。
區別:MAC地址具有扁平結構,無論到哪裡都不會變化,比如一台智能手機無論它到哪裡,它的MAC地址不會改變。而IP地址具有層次結構,當主機移動時,主機的IP地址隨著連接到的網路的改變而改變,
聯繫:當然它們之間可以進行轉換(其實也就是層與層之間的交流),這就是地址解析協議(ARP)該乾的事了。

每台主機或路由器在其內存中具有一個ARP table,這張表包含IP地址到MAC地址的映射關係。

參考文獻:Computer Networking (A Top-Down Approach) Six Edition-James F.Kurose and Keith W.Ross


MAC地址可以理解為身份證號,唯一且不會搞混,但僅有身份證號要在世界範圍找一個人還是很難的。所以就出現了IP地址相當於地址姓名,有可能兩個人同地址(同網段)、甚至還同名(IP衝突)但還是能很方便的找到要找的人。


糾正一個:路由器根據IP地址尋路,不認識mac地址


本質上ip和mac完全不在一個緯度,ip處於三層MAC處於二層,具體可以看iso的參考模型。ip轉發是建立在MAC轉發基礎上,MAC地址可以通過ip地址映射,但是本質上MAC地址跟ip地址沒毛關係。
同一子網內部,所有設備處於同一廣播域,數據基於MAC轉發表進行轉發交換,也成為二層轉發。
跨子網才需要所謂的路由功能和路由器,轉發是基於目的ip地址進行定址,稱為三層轉發。
問題裡面說的太混亂了,基本沒有理清基本的概念,建議重新學習tcp/ip基礎。


mac地址可以理解成你的身份證信息,ip地址可以理解成你的住址。他倆有關聯,但是不是永久固定關聯。住所常變,單身份證號碼和姓名沒特殊情況不會變(雖然可以變)。不知道我的回答通俗不?


交換機的二層通信的定址是基於mac - 埠 表的,所謂二層通信就是通信的終端都在同一個LAN(區域網)上

IP地址用於跨網通信,通信設備發送的數據包需要通過網關(路由)轉發,發送的數據包里封裝了設備自己的IP和對方(目的)的IP,網關(路由器)上維護了一個路由表,數據包到達網關會解析裡面的目的IP然後根據目的IP在路由表裡找到應該轉發的去向比如說埠或另外一台路由器。


路由器根據MAC地址來選擇路由進行數據發送。這個用路由器不就是對於不同的IP地址進行甄別仔發送到相應的路徑。


你的問題就在於,問的太多,看的書太少


ip地址運行在ip層,是人為分配的邏輯地址。mac地址運行在數據鏈路層,是晶元出廠時固化在內的物理地址。


IP過路由,MAC不過路由


請幫忙解答下112.74.133.149ip詳細位置


推薦閱讀:

TCP連接建立後,下行和上行經過的路由器是一樣的嗎?
B類地址第一個可分派的網路號為什麼不是128.0?
ICMP報文要使用IP頭來發送報文,為什麼ICMP依然與IP在同一層-網路層?
ipv9是什麼,是騙局還是真的有其事?
TCP網路編程,從socket到消息包,發送接收都是bit,傳輸中兩端怎麼知道哪些bit組成一個協議?

TAG:計算機網路 | IP地址 | TCPIP | 路由交換技術 |