010 媒體訪問控制(MAC,Media Access Control)


一,MAC

MAC是媒體訪問控制器。以太網MAC由IEEE-802.3以太網標准定義。它實現了數據鏈路層。最新的MAC同時支持10/100/1000Mbps速率。通常情況下,它實現MII/GMII/RGMII接口,來同行業標准PHY器件實現接口。

MAC由硬件控制器及MAC通信協議構成。該協議位於OSI七層協議中數據鏈路層的下半部分,它主要負責與物理層進行數據交接,如是否可以發送數據,發送的數據是否正確,對數據流進行控制等。

它自動對來自上層的數據包加上一些控制信號,交給物理層。接收方得到正常數據時,自動去除 MAC 控制信號,把該數據包交給上層。 

。MAC硬件框圖如下圖所示:

                         

在發送數據的時候,MAC協議可以事先判斷是否可以發送數據,如果可以發送將給數據加上一些控制信息,最終將數據以及控制信息以規定的格式發送到物理層;在接收數據的時候,MAC協議首先判斷輸入的信息並是否發生傳輸錯誤,如果沒有錯誤,則去掉控制信息發送至LLC(邏輯鏈路控制)層。該層協議是以太網MAC由IEEE-802. 3以太網標准定義。一般以太網MAC芯片的一端連接PCI總線,另一端連接PHY芯片上通過MII接口連接。

擴展

       以太網數據鏈路層其實包含MAC(介質訪問控制)子層和LLC(邏輯鏈路控制)子層。一塊以太網卡MAC芯片的作用不但要實現MAC子層和LLC子層的功能,還要提供符合規范的PCI界面以實現和主機的數據交換。
  MAC從PCI總線收到IP數據包(或者其他網絡層協議的數據包)后,將之拆分並重新打包成最大1518Byte、最小64Byte的幀。這個幀里面包括了目標MAC地址、自己的源MAC地址和數據包里面的協議類型(比如IP數據包的類型用80表示,最后還有一個DWORD(4Byte)的CRC碼。
  可是目標的MAC地址是哪里來的呢?這牽扯到一個ARP協議(介乎於網絡層和數據鏈路層的一個協議)。第一次傳送某個目的IP地址的數據的時候,先會發出一個ARP包,其MAC的目標地址是廣播地址,里面說到:“誰是xxx.xxx.xxx.xxx這個IP地址的主人?”因為是廣播包,所有這個局域網的主機都收到了這個ARP請求。收到請求的主機將這個IP地址和自己的相比較,如果不相同就不予理會,如果相同就發出ARP響應包。這個IP地址的主機收到這個ARP請求包后回復的ARP響應里說到:“我是這個IP地址的主人”。這個包里面就包括了他的MAC地址。以后的給這個IP地址的幀的目標MAC地址就被確定了。(其它的協議如IPX/SPX也有相應的協議完成這些操作)
  IP地址和MAC地址之間的關聯關系保存在主機系統里面,叫做ARP表。由驅動程序和操作系統完成。在Microsoft的系統里面可以用arp-a 的命令查看ARP表。收到數據幀的時候也是一樣,做完CRC校驗以后,如果沒有CRC效驗錯誤,就把幀頭去掉,把數據包拿出來通過標准的接口傳遞給驅動和上層的協議棧。最終正確的達到我們的應用程序。

這里還需要理解一個重要概念就是MAC地址,下面會詳細介紹相關知識。

二、MAC數據包

 MAC 數據包由前導字段、幀起始定界符、目標地址、源地址、數據包類型、數據域、填充域、校驗和域組成。

前導字段(7Byte),也稱報頭,這是一段方波,用於使收發節點的時鍾同步。內容為連續 7 個字節的 0x55。字段和幀起始定界符在 MAC 收到數據包后會自動過濾掉。

幀起始定界符(SFD1Byte): 用於區分前導段與數據段的,內容為 0xD5

MAC 地址(6Byte)MAC 地址由 48 位數字組成,它是網卡的物理地址,在以太網傳輸的最底層,就是根據 MAC 地址來收發數據的。部分 MAC 地址用於廣播和多播,在同一個網絡里不能有兩個相同的 MAC 地址。 PC 的網卡在出廠時已經設 置好了 MAC 地址,但也可以通過一些軟件來進行修改,在嵌入式的以太網控制器中可由程序進行配置。數據包中的 DA 是目標地址, SA 是源地址。

數據包類型(2Byte):本區域可以用來描述本 MAC 數據包是屬於 TCP/IP 協議層的IP 包、 ARP 包還是 SNMP 包,也可以用來描述本 MAC 數據包數據段的長度。如果該值被設置大於 0x0600,不用於長度描述,而是用於類型描述功能,表示與以太網幀相關的 MAC 客戶端協議的種類。

數據段(46 - 1500Byte):數據段是 MAC 包的核心內容,它包含的數據來自 MAC 上層。其長度可以從 0~1500 字節間變化。

填充域:由於協議要求整個 MAC 數據包的長度至少為 64 字節(接收到的數據包如果少於 64 字節會被認為發生沖突,數據包被自動丟棄),當數據段的字節少於 46字節時,在填充域會自動填上無效數據,以使數據包符合長度要求。

校驗和域(4Byte)MAC 數據包的尾部是校驗和域,它保存了 CRC 校驗序列,用於檢錯。

以上是標准的 MAC 數據包, IEEE 802.3 同時還規定了擴展的 MAC 數據包,它是在標准的 MAC 數據包的 SA 和數據包類型之間添加 4 個字節的 QTag 綴字段,用於獲取標志的 MAC 幀。

2 個字節固定為 0x8100,用於識別 QTag前綴的存在;后兩個字節內容分別為 3 個位的用戶優先級、 1 個位的標准格式指示符(CFI)和一個 12 位的 VLAN 標識符。

三、MAC 地址

MAC 地址用於識別數據鏈路中互連的節點(如圖 3.4),以太網或 FUDI 中,根據IEEE802.3的規范使用 MAC 地址。其他諸如無線 LAN ( IEEE802.lla/b/g/n等) 、 藍牙等設備中也是用相同規格的 MAC 地址。

圖8‑5通過MAC地址判斷目標地址

在總線型與環路型的網絡中,先暫時獲取所有目標站的幀,然后再通MAC尋址如果是發給自已的就接收,如果不是就丟棄(在令牌環的這種情況下,依次轉發給下一個站)。

MAC 地址長 48 比特,結構如圖XX所示。 在使用網卡 ( NIC ) 的情況下,MAC 地址一般會被燒人到 ROM 中。因此,任何一個網卡的 MAC 地址都是唯一。

圖8‑6 IEEE802.3 規范的 MAC地址格式

MAC 地址中 3 ~ 24 位 ( 比特位) 表示廠商識別碼, 每個 NIC 廠商都有特定唯一的識別數宇。 25 ~ 48 位是廠商內部為識別每個網卡而用。 因此. 可以保證全世界不會有相同MAC 地址的網卡。

IEEE802.3 制定 MAC 地址規范時沒有限定數據鏈路的類型,即不論哪種數據鏈路的網絡 (以太網 、 FDD1 , ATM 、 無線 LAN 、 藍牙等), 都不會有相同的 MAC地址出現。

MAC 地址是不是一定是唯一的?

在全世界,MAC 地址也並不總是唯一的。實際上,即使 MAC 地址相同,只要不是同屬一個數據鏈路就不會出現問題。

例如,人們可以在自己的網卡上自由設置自己的 MAC 地址。 再例如,一台主機上如果啟動多個虛擬機,由於沒有硬件的網卡只能由虛擬軟件自己設定 MAC 地址給多個虛擬網卡,這時就很難保證所生成的 MAC 地址是獨一無二的了。

但是,無論哪個協議成員通信設備,設計前提都是 MAC 地址的唯一性。這也可以說是網絡世界的基本准則。

四、參考資料

1、https://mp.weixin.qq.com/s/hZ4VhLKv7FTOJnzg6oAKUg

2、https://blog.csdn.net/zcshoucsdn/article/details/80090802#comments


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM