計算機網路 (5) 資料鏈路層-MAC地址、IP地址及ARP協議

語言: CN / TW / HK

theme: scrolls-light

本文引用圖片均來自 高軍: 計算機網路

MAC地址

作用

兩臺主機之間最簡單的通訊方式是使用通道直接相連,彼此之間直接傳送資料。但是當主機數量增多,這種兩兩相連的方式會導致每臺主機都連線數不清的通道,這樣的網路是無法使用的,因此就出現了匯流排型、星型等網路。

匯流排型、星型等網路中的主機共享通道,那麼主機如何知道從通道中收到的資料是傳送給自己的呢?為了區分不同的主機,這裡就產生了地址的概念。主機發送資料時要帶上目的主機的地址,主機從通道上收到資料後先檢視資料的目的地址是否和自身地址相同,相同則處理資料否則丟棄

由於這類地址用於媒體接入控制MAC(Media Access Control),因此這類地址被稱為MAC地址

共享通道要考慮的一個問題是如何協調多個傳送和接收站點對一個共享傳輸媒體的佔用,即媒體接入控制

image.png

MAC地址一般固化在網絡卡裡面,因此MAC地址也稱為硬體地址,有時也被稱為實體地址(注意MAC屬於鏈路層不是物理層)。由於主機可能具有多張網絡卡(有線和無線)因此主機會具有多個MAC地址,所以MAC地址是對網路中各網路介面的唯一標識而不是裝置的唯一標識

image.png

格式

本節討論IEEE 802區域網的MAC地址格式,MAC地址一共6個位元組

  1. 前三位元組:組織唯一識別符號,由IEEE的註冊管理機構分配
  2. 後三位元組:網路介面識別符號,由廠商自行分配

下圖為華為獲得的組織唯一識別符號,會被用在華為製造的網絡卡裝置MAC地址的前6個字元上,反過來我們通過MAC地址的前6個字元也可以確定網絡卡的製造商

image.png

MAC地址第一個位元組的最低兩位有特殊用途:

  1. 最低位:0表示全球管理(全球唯一),1表示本地管理(本地唯一)
  2. 次低位:0表示單播(單一源到單一地址),1表示多播(單一源到多地址)

image.png

image.png

MAC地址各位元組在網路上的傳輸順序遵循以下規則:

  1. 位元組:傳送順序為第一到第六位元組
  2. 位元組內位元:傳送順序為${b_{0}}$到${b_{1}}$

例項

單播

image.png

廣播,網路中的主機接收到幀後檢查目的地址,發現目的地址是廣播地址,於是所有主機都接受該幀

image.png

組播,主機A傳送幀到多播地址07-E0-12-F6-2A-D8,網路中的主機接收到幀後檢查自身多播組列表,如果多播地址位於列表內則接受該幀,否則丟棄

image.png

至此,MAC地址的介紹就告一段落了。但是,目前為止描述的只是資料在一個網路內的流動,如果資料要跨網路流動呢?這就需要MAC地址的兩個搭檔出場了,它們是網路層IP地址ARP協議。因為三者關係密切,所以這裡也做一下簡單介紹

IP地址

由來

最早的時候為了避免同網路中的主機兩兩連線,主機都連線到一個叫聯結器的裝置中,聯結器只是簡單的將收到的資料轉發給其他所有主機,其他主機根據資料的MAC地址決定是否接受該資料包。聯結器位於物理層

聯結器將資料轉發給所有主機是低效且不安全的,於是出現了交換機。交換機內部有MAC表,記錄哪個主機接在哪個,這樣交換機在轉發資料的時候只要根據目的MAC地址查表就可以做到精準轉發。交換機位於資料鏈路層

交換機MAC表最初是空的,當收到資料包時會記錄它的源MAC地址對映關係,如果目的MAC地址和埠的對映關係沒有記錄就會先轉發給所有主機,然後看哪臺主機迴應資料包就能記錄目的MAC地址和埠的對映關係。隨著主機間的通訊MAC表會逐漸完整(記錄網路中所有MAC地址的對映關係)

假設一個網路中有一臺交換機,那麼不同網路想要通訊只需將兩個網路的交換機連線起來,這時候只需使用MAC地址即可實現跨網路通訊。但是,此時交換機會將所有其他網路的主機MAC地址也記錄進表中,當網路數量或網路中的主機數量過多表就會太大導致交換機無法工作

上述問題的原因是人們不知道所連線到的交換機代表的網路中有多少主機,於是人們提出了轉發的方案——當資料需要跨交換機(網路)時,當前網路的交換機直接將資料轉發到相應網路的交換機中由其進行網路內的資料傳遞。為了解決交換機之間轉發資料的問題人們提出了路由器的概念,交換機連線在路由器上,當交換機發現目的MAC地址不在本網路中時就將資料轉發給路由器,由路由器轉發到相應的交換機中。路由器位於網路層

路由器需要決定什麼樣的資料轉發給哪個交換機,如果仍然使用MAC地址,那麼它需要建表記錄MAC地址(交換機接在路由器埠)的對映關係,這會導致和交換機之間直接相連一樣的問題,另外由於MAC地址格式問題,想要做到通配也不容易,所以人們提出了IP地址

IP地址標識兩部分資訊:

  1. 網路編號:用於標識不同的網路
  2. 主機編號:用於標識同一網路中的不同主機

路由器會建立路由表,使用子網掩碼確定IP地址網路號,據網路號查表找到對應的埠(交換機)進行轉發。子網掩碼的存在使得路由器可以對IP地址進行通配,這樣就不用為每一個IP地址記錄埠對映關係,而是為一批IP地址記錄對映關係

圖片來源: 閃客sun image.png

每個交換機都會記錄預設閘道器(路由器)的地址,只要通過子網掩碼發現數據包目的地址不在本網路就轉發給路由器由其進行轉發

當然,網路與網路之間會存在多個路由器,各個路由器如何相互發現以及路由表如何建立就是另一個複雜的問題了,這裡不再展開

協作

下圖展示MAC地址IP地址協作的例子,主機H1H2位於不同的網路,網路間通過路由器相連,主機和路由器分別有自己的IP地址MAC地址

image.png

1. 主機H1傳送的資料分組包含自身的IP地址(IP1)和主機H2的IP地址(IP2),包含自身的MAC地址(MAC1)和路由器 R1的MAC地址(MAC3) 2. 路由器R1收到資料分組後根據目的IP地址(IP2)查錶轉發,同時將源MAC地址設定為自身埠的MAC地址(MAC4), 將目的MAC地址設定為R2的MAC地址(MAC5) 3. 路由器R2收到資料分組後根據目的IP地址(IP2)查錶轉發,同時將源MAC地址設定為自身埠的MAC地址(MAC6), 將目的MAC地址設定為H2的MAC地址(MAC2)

可以發現其實跨網路通訊就是一次次的網路內通訊組成的,在資料分組的轉發過程中源IP地址目的IP地址不變的,但是MAC地址隨著傳送方接收方的改變而改變(或者說隨著網路的改變而改變),這也側面驗證了IP地址用於跨網路通訊,MAC地址用於同一個網路的通訊

不知道讀者有沒有考慮過這樣一個問題——IP地址能實現跨網路通訊自然也能實現本網路間的通訊,那麼為什麼還需要MAC地址呢?本人認為這跟網路的發展歷程有關,MAC地址早於IP地址,基於MAC設計並實現了大量的演算法、協議和硬體裝置,想要取代MAC並不是容易的事。另外,IP地址的出現是為了解決跨網路通訊時路由表過大的問題並不是為了取代MAC,因此設計的時候也沒有為取代MAC做過多考慮,因此在乙太網網路層的IP和資料鏈路層的MAC就一直共存著。當然查資料的過程中發現有各種各樣的說法,但是本人還是認為這兩者才是主要原因。

ARP協議

ARP(Address Resolution Protocol)協議用於解決知道IP地址不知道MAC地址的問題,比如交換機在配置預設閘道器時知道路由器的IP地址,但是交換機給路由器轉發資料時在資料鏈路層需要將路由器的MAC地址寫進幀首部,此時交換機沒有路由器的MAC地址,那麼就需要使用ARP協議來獲取路由器的MAC地址

網路中每臺主機都有ARP快取記憶體表,在封裝幀時會查表找到目的IP地址對應的MAC地址,如果找不到則在網路中傳送廣播幀

image.png

網路中的主機收到幀後檢查請求幀中目的IP地址是否為自身IP地址,不是則丟棄幀,是則將廣播幀中的源IP地址MAC地址記錄進自身ARP表並返回單播響應幀

image.png

主機收到響應幀後將資訊記錄進自身ARP表即可

ARP表中的記錄分為動態記錄和靜態記錄,動態記錄就如前文所述是通過廣播和響應獲取的,生命週期為2分鐘,靜態記錄就是手動設定的,生命週期不定。

image.png

額外提一下,在動態獲取記錄的時候是可能被攻擊的,攻擊者只需要偽裝自己是目的主機並返回構造好的幀就能汙染受害者的ARP表,使得資料被錯誤的傳送給攻擊者,這就是ARP攻擊

參考文獻