什么是MAC地址?
MAC地址也叫物理地址、硬件地址,由網(wǎng)絡(luò)設(shè)備制造商生產(chǎn)時(shí)燒錄在網(wǎng)卡(NetworklnterfaceCard)的EPROM(一種閃存芯片,通??梢酝ㄟ^程序擦寫)。IP地址與MAC地址在電腦里都是以二進(jìn)制表示的,IP地址是32位的,而MAC地址則是48位的。
MAC地址的長(zhǎng)度為48位(6個(gè)字節(jié)),通常表示為12個(gè)16進(jìn)制數(shù),如:00-16-EA-AE-3C-40就是一個(gè)MAC地址,其中前3個(gè)字節(jié),16進(jìn)制數(shù)00-16-EA代表網(wǎng)絡(luò)硬件制造商的編號(hào),它由IEEE(電氣與電子工程師協(xié)會(huì))分配,而后3個(gè)字節(jié),16進(jìn)制數(shù)AE-3C-40代表該制造商所制造的某個(gè)網(wǎng)絡(luò)產(chǎn)品(如網(wǎng)卡)的系列號(hào)。只要不更改自己的MAC地址,MAC地址在世界是唯一的。形象地說,MAC地址就如同身份證上的身份證號(hào)碼,具有唯一性。(以上來源度娘)
什么是IP地址?
IP地址和MAC地址可以類比生活中寄快遞的過程。
在整個(gè)網(wǎng)絡(luò)中數(shù)據(jù)被封裝成數(shù)據(jù)報(bào)文進(jìn)行發(fā)送,就像我們生活中寄快遞時(shí)將物品放進(jìn)包裹中。而數(shù)據(jù)在路由器之間的跳轉(zhuǎn)也可以看作是不同地區(qū)快遞小哥對(duì)物流的交接。
IP地址等價(jià)于快遞包裹上的收件人地址。
快遞員通過收件人地址將包裹在出發(fā)地到目的地之間連出一條線,然后通過不同地區(qū)之間的物流中轉(zhuǎn)最后將包裹送到收件人的手中。
從上圖的粗箭頭所描述的路徑便可達(dá)到目的地址,陜西省-西安市-xx縣-xx街道-…。
同理,ip地址也具備此功能,通過IP地址的網(wǎng)絡(luò)位可以確定某個(gè)主機(jī)所在網(wǎng)絡(luò)的位置,從而明確一條數(shù)據(jù)傳送的路徑。例如目的地址為192.168.10.110/26,則該地址所在的網(wǎng)絡(luò)為192.168.10.64
用之前圖示地址的尋址方式,我們可以模擬這一過程
那么,還是那個(gè)問題,為什么還要MAC地址呢?
什么是MAC地址?
MAC地址等價(jià)于快遞包裹上的收件人姓名。
MAC地址更多是用于確認(rèn)對(duì)方信息而存在的。就如同快遞跨越幾個(gè)城市來到你面前,快遞員需要和你確認(rèn)以下收件人是否正確,才會(huì)把包裹交給你一樣。
這里我們模擬一個(gè)場(chǎng)景,比如在學(xué)校里同一個(gè)班級(jí)的學(xué)生大家互相都認(rèn)識(shí),互相交流就不需要借助學(xué)號(hào)(這里抽象成IP地址),直接喊名字即可?!拔?,那個(gè)XXX,把你作業(yè)讓我抄一下”。
這個(gè)過程可對(duì)應(yīng)網(wǎng)絡(luò)中同一個(gè)交換機(jī)或集線器連接的局域網(wǎng)通信。在局域網(wǎng)中通信需要通過MAC地址進(jìn)行通信。將數(shù)據(jù)封裝成幀時(shí)會(huì)插入源MAC地址和目的MAC地址(如果不知到對(duì)方MAC地址會(huì)發(fā)送ARP廣播報(bào)文獲取對(duì)方MAC地址)。以太網(wǎng)幀結(jié)構(gòu):
(此圖片來自網(wǎng)絡(luò),侵刪)
而后,幀結(jié)構(gòu)再次添加IP頭部信息。
雖然這里有IP地址,但是它在局域網(wǎng)中不起作用,因?yàn)锳RP是用于網(wǎng)絡(luò)中尋址的,而在局域網(wǎng)中所有主機(jī)互相可見。(除此之外,局域網(wǎng)中IP地址最多是在ARP廣播時(shí),作為收到包的主機(jī)解包時(shí)判定的依據(jù),判定自己是否為目的主機(jī),從而選擇是否回應(yīng)ARP應(yīng)答)。
而IP地址的使用條件,是在跨網(wǎng)絡(luò)之后。兩個(gè)網(wǎng)絡(luò)之間想要進(jìn)行通信需要通過一個(gè)媒介,因?yàn)樵诰W(wǎng)絡(luò)內(nèi)部的主機(jī)定位不到網(wǎng)絡(luò)外的某個(gè)主機(jī),即使他們只隔了一個(gè)網(wǎng)段也是一樣。(歡迎關(guān)注公眾號(hào):網(wǎng)絡(luò)工程師阿龍)而跨網(wǎng)段的媒介就是路由器,只要把ip地址告訴它,他就能找到對(duì)方所在的網(wǎng)絡(luò)。
這就像是我是XXXX屆電腦科學(xué)專業(yè)1班學(xué)生XX(學(xué)號(hào)202015162,15代指專業(yè)電腦科學(xué)專業(yè),62代指“我”在本班的學(xué)號(hào)),我現(xiàn)在想找2022屆學(xué)弟YY(學(xué)號(hào)2022…)。我們之間不認(rèn)識(shí),但是我可以找一個(gè)中間人,幫我送信。
這個(gè)中間人是局域網(wǎng)網(wǎng)關(guān),是路由器。他們的功能是,轉(zhuǎn)述我的消息,并且按照目的ip地址將它發(fā)給下一個(gè)“中間人”,最后送到“YY”手中。
以下內(nèi)容有部分借鑒到文章:《閃客sun(低并發(fā)編程):如果讓你來設(shè)計(jì)網(wǎng)絡(luò)》
首先我們需要明確的是,MAC地址的誕生早于IP地址。在電腦設(shè)計(jì)之初,設(shè)備之間使用MAC地址互相確認(rèn)身份,因?yàn)楫?dāng)時(shí)的網(wǎng)絡(luò)拓?fù)洳⒉淮?,我們完全可以讓兩臺(tái)電腦之間兩兩互相發(fā)送數(shù)據(jù)。如果有5個(gè)主機(jī)需要互通的話,那么它的拓?fù)浣Y(jié)構(gòu)可能是這樣:
如果是這樣的話,我們其實(shí)無需MAC地址,因?yàn)槊總€(gè)網(wǎng)卡明確對(duì)應(yīng)一臺(tái)主機(jī)。而實(shí)際是,一臺(tái)電腦要配置這么多網(wǎng)卡的需要耗費(fèi)更多的費(fèi)用,你也不想買一臺(tái)電腦后還需要額外再買十幾個(gè)網(wǎng)卡把。
因此我們可以采用集線器的方式將所有電腦通過網(wǎng)線聚集在一起會(huì)更加方便。
每臺(tái)主機(jī)發(fā)送數(shù)據(jù)前需要攜帶自己和對(duì)方的目的MAC地址,因?yàn)閔ub集線器只是將所有數(shù)據(jù)從其他接口發(fā)送出去,它將數(shù)據(jù)的是否接收留給了主機(jī)自己判斷。
集線器只是無腦的做數(shù)據(jù)發(fā)送,因此我們認(rèn)為它是數(shù)據(jù)鏈路層的設(shè)備。
集線器只會(huì)傻瓜式的將每一通信都發(fā)給所有主機(jī),在各主機(jī)之間交流頻繁時(shí)會(huì)造成網(wǎng)絡(luò)的擁堵乃至癱瘓,因此我們進(jìn)行了升級(jí),使用交換機(jī)設(shè)備。
交換機(jī)內(nèi)部維護(hù)一張 MAC 地址表,記錄MAC地址與交換機(jī)各端口之間的關(guān)系,這樣就無需將所有數(shù)據(jù)發(fā)送的局域網(wǎng)中。通過思科的仿真軟件可以看到交換機(jī)的MAC地址表。
這樣,當(dāng)PC0(192.168.1.1)PING PC3(192.168.1.4)時(shí),交換機(jī)查自己的MAC表,發(fā)現(xiàn)自己的以太網(wǎng)fa0/4接口的出口對(duì)應(yīng)的就是目的主機(jī)MAC地址,則交換機(jī)將自己該數(shù)據(jù)報(bào)文轉(zhuǎn)發(fā)從fa0/4接口轉(zhuǎn)發(fā)出去。同時(shí)PC3收到了來自PC0的數(shù)據(jù)報(bào)文。
交換機(jī)相對(duì)集線器,擁有決定數(shù)據(jù)從交換機(jī)的哪個(gè)端口轉(zhuǎn)發(fā)出去的功能,因此我們認(rèn)為交換機(jī)在數(shù)據(jù)鏈路層(決定數(shù)據(jù)轉(zhuǎn)發(fā)至哪一條鏈路上)。
以上集線器和交換機(jī)都是局域網(wǎng)的通行,無需IP地址參與。而隨著網(wǎng)絡(luò)的擴(kuò)大,局域網(wǎng)規(guī)則已經(jīng)不再適合了。
許多個(gè)類似上述的局域網(wǎng)組成一個(gè)大的互聯(lián)網(wǎng)。它們彼此相連互相通信。
如果在學(xué)校網(wǎng)絡(luò)內(nèi)部向訪問某個(gè)研究機(jī)構(gòu)共享的資料,這就是跨網(wǎng)絡(luò)訪問了。此時(shí)IP地址才派上用場(chǎng)。IP地址給出一段段具備層級(jí)關(guān)系的數(shù)字地址,它就像思維導(dǎo)圖一樣可以通過給定地址高效的找出我們想要的那一項(xiàng)。
當(dāng)有設(shè)備連接上互聯(lián)網(wǎng)時(shí),給它分配一個(gè)IP地址,這樣就能通過這些IP地址確定對(duì)方設(shè)備在互聯(lián)網(wǎng)絡(luò)中的位置,從而進(jìn)行訪問。
連接在互聯(lián)網(wǎng)上的具有IP的可以是一個(gè)單個(gè)的設(shè)備,比如某個(gè)服務(wù)器、某個(gè)網(wǎng)絡(luò)攝像頭等,也可以是某個(gè)局域網(wǎng),如學(xué)校的校園網(wǎng),公司內(nèi)部網(wǎng)絡(luò)等(局域網(wǎng)與公網(wǎng)通信使用NAT、PAT等方式,或內(nèi)網(wǎng)穿透等技術(shù))。
為了實(shí)現(xiàn)在網(wǎng)絡(luò)中,跨網(wǎng)段的訪問,因此誕生出新的設(shè)備叫路由器。它可以根據(jù)內(nèi)置的路由條目決定將數(shù)據(jù)包轉(zhuǎn)發(fā)到哪個(gè)網(wǎng)絡(luò)中,最終可以到達(dá)目的網(wǎng)絡(luò)。
需要注意的是,路由器是多個(gè)網(wǎng)絡(luò)的中間人,它有很多端口分別處于不同的網(wǎng)絡(luò)中(路由器的每一個(gè)端口,都有獨(dú)立的 MAC 地址和IP地址),這樣它就可以把“來自A網(wǎng)絡(luò)的信息轉(zhuǎn)發(fā)至B網(wǎng)絡(luò),因?yàn)槁酚善鞯慕涌谕瑫r(shí)連接這這幾個(gè)網(wǎng)絡(luò)”。
路由器可以讓數(shù)據(jù)在網(wǎng)絡(luò)中跨網(wǎng)絡(luò)的通信,因此我們認(rèn)為路由器是網(wǎng)絡(luò)層的設(shè)備。
現(xiàn)在我們理清楚了整個(gè)IP與MAC的關(guān)系。
下面總結(jié)一下:
各個(gè)設(shè)備之間傳遞數(shù)據(jù)時(shí),需要使用到MAC地址以確定對(duì)方的身份(場(chǎng)景:兩個(gè)路由器之間跳轉(zhuǎn),局域網(wǎng)內(nèi)主機(jī)通信)。
各個(gè)網(wǎng)路之間通行需要使用到IP地址,主要是為了定位目的地址所在的位置,通過IP的分段機(jī)制推演出從源IP到目的IP的一條路徑,而后數(shù)據(jù)包通過這條路徑將數(shù)據(jù)送達(dá)。