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

IP 地址和 MAC 地址可以類比生活中寄快遞的過程。

在整個網絡中數據被封裝成數據報文進行發送,就像我們生活中寄快遞時將物品放進包裹中。而數據在路由器之間的跳轉也可以看作是不同地區快遞小哥對物流的交接。

IP 地址

ip 地址等價於快遞包裹上的收件人地址。

快遞員通過收件人地址將包裹在出發地到目的地之間連出一條線,然後通過不同地區之間的物流中轉最後將包裹送到收件人的手中。

從上圖的粗箭頭所描述的路徑便可達到目的地址,陝西省 - 西安市 - xx 縣 - xx 街道 -…。

同理,ip 地址也具備此功能,通過 IP 地址的網絡位可以確定某個主機所在網絡的位置,從而明確一條數據傳送的路徑。例如目的地址爲 192.168.10.110/26,則該地址所在的網絡爲 192.168.10.64

用之前圖示地址的尋址方式,我們可以模擬這一過程

那麼,還是那個問題,爲什麼還要 MAC 地址呢?

MAC 地址

MAC 地址等價於快遞包裹上的收件人姓名。

MAC 地址更多是用於確認對方信息而存在的。就如同快遞跨越幾個城市來到你面前,快遞員需要和你確認以下收件人是否正確,纔會把包裹交給你一樣。

這裏我們模擬一個場景,比如在學校裏同一個班級的學生大家互相都認識,互相交流就不需要藉助學號(這裏抽象成 ip 地址),直接喊名字即可。“喂,那個誰,把你作業讓我抄一下”。

這個過程可對應網絡中同一個交換機或集線器連接的局域網通信。在局域網中通信需要通過 MAC 地址進行通信。將數據封裝成幀時會插入源 mac 地址和目的 mac 地址(如果不知到對方 mac 地址會發送 arp 廣播報文獲取對方 mac 地址)。以太網幀結構:

而後,幀結構再次添加 IP 頭部信息。

雖然這裏有 ip 地址,但是它在局域網中不起作用,因爲 arp 是用於網絡中尋址的,而在局域網中所有主機互相可見。(除此之外,局域網中 ip 地址最多是在 arp 廣播時,作爲收到包的主機解包時判定的依據,判定自己是否爲目的主機,從而選擇是否迴應 arp 應答)。

而 IP 地址的使用條件,是在跨網絡之後。兩個網絡之間想要進行通信需要通過一個媒介,因爲在網絡內部的主機定位不到網絡外的某個主機,即使他們只隔了一個網段也是一樣。而跨網段的媒介就是路由器,只要把 ip 地址告訴它,他就能找到對方所在的網絡。

這就像是我是 2020 屆計算機科學專業 1 班學生 xx(學號 202015162,15 代指專業計算機科學專業,62 代指 “我” 在本班的學號),我現在想找 2022 屆學弟 yy(學號 2022…)。我們之間不認識,但是我可以找一箇中間人,幫我送信。

這個中間人是局域網網關,是路由器。他們的功能是,轉述我的消息,並且按照目的 ip 地址將它發給下一個 “中間人”,最後送到“yy” 手中。

以下是關於 mac 地址與 ip 地址的愛恨糾纏… 以下內容有借鑑到文章:《閃客 sun(低併發編程):如果讓你來設計網絡》

首先我們需要明確的是,MAC 地址的誕生早於 IP 地址。在計算機設計之初,設備之間使用 MAC 地址互相確認身份,因爲當時的網絡拓撲並不大,我們完全可以讓兩臺計算機之間兩兩互相發送數據。如果有 5 個主機需要互通的話,那麼它的拓撲結構可能是這樣:

如果是這樣的話,我們其實無需 MAC 地址,因爲每個網卡明確對應一臺主機。而實際是,一臺計算機要配置這麼多網卡的需要耗費更多的 money,你也不想買一臺計算機後還需要額外再買十幾個網卡把。

因此我們可以採用集線器的方式將所有計算機通過網線聚集在一起會更加方便。

每臺主機發送數據前需要攜帶自己和對方的目的 MAC 地址,因爲 hub 集線器只是將所有數據從其他接口發送出去,它將數據的是否接收留給了主機自己判斷。

集線器只是無腦的做數據發送,因此我們認爲它是數據鏈路層的設備。

集線器太笨了,它將每一通信都發給所有主機,在各主機之間交流頻繁時會造成網絡的擁堵乃至癱瘓,因此我們進行了升級,使用交換機設備。

交換機內部維護一張 MAC 地址表,記錄 MAC 地址與交換機各端口之間的關係,這樣就無需將所有數據發送的局域網中。通過思科的 Cisco packet tracer 仿真軟件可以看到交換機的 MAC 地址表。

這樣,當 pc0(192.168.1)ping pc3(192.168.4)時,交換機查自己的 mac 表,發現自己的以太網 fa0/4 接口的出口對應的就是目的主機 mac 地址,則交換機將自己該數據報文轉發從 fa0/4 接口轉發出去。同時 pc3 收到了來自 pc0 的數據報文。

交換機相對集線器,擁有決定數據從交換機的哪個端口轉發出去的功能,因此我們認爲交換機在數據鏈路層(決定數據轉發至哪一條鏈路上)。

以上集線器和交換機都是局域網的通行,無需 IP 地址參與。而隨着網絡的擴大,局域網規則已經不再適合了。

許多個類似上述的局域網組成一個大的互聯網。它們彼此相連互相通信。

如果在學校網絡內部向訪問某個研究機構共享的資料,這就是跨網絡訪問了。此時 IP 地址纔派上用場。ip 地址給出一段段具備層級關係的數字地址,它就像思維導圖一樣可以通過給定地址高效的找出我們想要的那一項。

當有網絡連接上互聯網時,給它分配一個 ip 地址,這樣就能通過這些 ip 地址確定對方網絡(或設備)在互聯網絡中的位置,從而進行訪問。

連接在互聯網上的具有 ip 的可以是一個單個的設備,比如某個服務器、某個網絡攝像頭等,也可以是某個局域網,如學校的校園網,公司內部網絡等(局域網與公網通信使用 NAT、PAT 等方式,或內網穿透等技術)。

爲了實現在網絡中,跨網段的訪問,因此誕生出新的設備叫路由器。它可以根據內置的路由條目決定將數據包轉發到哪個網絡中,最終可以到達目的網絡。

需要注意的是,路由器是多個網絡的中間人,它有很多端口分別處於不同的網絡中(路由器的每一個端口,都有獨立的 MAC 地址和 IP 地址),這樣它就可以把 “來自 A 網絡的信息轉發至 B 網絡,因爲路由器的接口同時連接這這幾個網絡”。

路由器可以讓數據在網絡中跨網絡的通信,因此我們認爲路由器是網絡層的設備。

終於,我們理清楚了整個 IP 與 MAC 的關係。總結一下:

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/NpYMfxVwrKzqXMHXiWQPug