日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

协议簇: Media Access Control(MAC) Frame 解析

發布時間:2024/7/23 编程问答 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 协议簇: Media Access Control(MAC) Frame 解析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Media Access Control(MAC) Frame 解析

前言

千里之行,始于足下。 因為個人從事網絡協議開發,一直想深入的學習一下協議族,從這篇開始,我將開始記錄分享我學習到的網絡協議相關的知識

簡介

引用百度百科的描述:

數據鏈路層是OSI參考模型中的第二層,介乎于物理層和網絡層之間。數據鏈路層在物理層提供的服務的基礎上向網絡層提供服務,其最基本的服務是將源自網絡層來的數據可靠地傳輸到相鄰節點的目標機網絡層

由于 Ethernet 的歷史原因,這一層需要兼容各種不同的物理層,因此具體的協議也比較多。 但是好在他們的幀格式是統一的,這篇文章我們將就本人機器上看到的幀來學習一下。

Frame 格式

我們先用一張圖來描述一下 MAC 層幀的格式:

由圖可以看出,每個 MAC 幀是由以下幾個部分構成的:

  • Preamble
  • SFD(Start Frame Delimiter)
  • Destionation Address: 這個幀的目標機器的地址
  • Soruce Address: 這個幀的源機器的地址
  • Length/Type:用來表示此字段之后用戶數據的長度。這里的用戶數據就是上圖中 LENGTH/TYPE 字段之后的數據。 其中包含可以包含 padding, FCS(Frame Check Sequence), 和 Extension.
  • FCS(Frame Check Sequence)包含一個循環冗余檢驗值用來檢測數據的網絡鏈路中可能發生的數據錯誤
  • Extension:只有在 100M 半雙工情況下才會使用
  • 接下來,我們詳細描述一下各個字段所代表的意義

    Preamble

    它的長度為 7 byte. 是用來讓PLS電路達到其穩態同步與接收包的定時(這里附上官方英文描述: that is used to allow the PLS circuitry to reach its steady-state
    synchronization with the received packet’s timing)

    Start Frame Delimiter (SFD)

    它的長度為 1 byte,且是一個固定值 10101011。它緊隨 Preamble 字段,它之后的字節就是 MAC Frame 的內容了.

    Address

    緊跟 SFD 字段的就是該 MAC Frame 的源地址和目標地址.

    它的格式如下:

  • Address 是一個長度為 48 bit 小段編碼的 MAC 地址.
  • 第一個 bit (小端編碼):
    (1) 對于源地址,該位被保留,設置為 0
    (2) 對于目標地址,該位代表代表地址類型. 可能的值有如下兩種:
    1> 該位為 0, 代表他是一個 individual address. 目標地址是一個特定的網絡設備
    2> 該位為 1,代表他是一個 group address.這里又細分為兩類:Multicast-Group Address:目標地址代表一個特定的邏輯網絡設備的集合. Broadcast Address: 目標地址代表所有當前連接到當前 LAN 的網絡設備.
  • 第二個 bit (小段編碼):1 代表該地址是一個本地配置的地址,0 代表是全局配置的地址. 對于廣播地址,該位總是被設置為 1
  • LENGTH/TYPE

    該字段的長度為 2 byte,它的具體意義取決于它的實際值.

  • 如果該字段的值小于或等于 0x05DC, 那么該字段的意義是: 表示該字段之后緊隨其后的 MAC 用戶數據的字節長度。也就是第一張圖中 MAC CLINET DATA 字段占用的數據長度.
  • 如果該字段的值大于或等于 0x0600, 那么該字段的意義是:Ethertype of the MAC client protocol, 個人理解,這種情況下,該字段代表的是當前
  • MAC Client Data

    該字段用來承載實際上要在網絡中發送的數據(當然不是我們 socket 中發送的數據, socket 中發送的數據需要經過tcp,ip 層的包裝之后才能放在 該字段中發送)

    它有最大長度的限制. MAC 幀一共有三種,他們分別對應的最大長度如下所示:

    Frame typeMax data size
    Basic Frame1500
    Q-tagged Frame1504
    Envelop Frame1982

    規范中指出,Ethernet 至少支持上述三種幀類型中的一種

    Pad

    為了 CSMA/CD 協議能正常工作,協議對幀的最小值也進行的限制.

    如果需要 pad, 那么它應該被添加在 MAC Client Data 和 FCS 字段之間.

    Pad 的長度計算方法為 max (0, minFrameSize – (clientDatasize + 2 *addressSize + 48)) bit. 這里的 48 bit 的來歷是: 2 字節的 Length/Type 字段和 4 字節的 FCS 字段.

    FCS

    該字段包含一個長度為 4 byte 的循環冗余檢驗碼, 關于該算法這里不再贅述.

    Extension

    實踐

    在簡單的描述了 MAC 幀格式之后,我們來嘗試著分析一個本人機器上 Wireshark 抓包的結構.


    該數據包對應的字節數據為: dc a3 33 c4 1e 5a d0 ab d5 23 a5 0a 08 00

    這里我們逐一分析一下:

  • Wireshark 沒有抓到 Start Frame Delimiter 和 Preamble 字段的數據,只有 SFD 字段之后的數據被解析出來.
  • 每個 MAC Address 長度為 48 bit,也就是 6 個字節,下來我們先解析一下地址
  • dc a3 33 c4 1e 5a 便是 Destination Address 字段的數據,0xdc 小段編碼的第一位為 0,那么該地址類型是 Individual Address. 第二位為 0,那么該地址是一個全局配置的 MAC 地址.
  • dc a3 33 c4 1e 5a 對應的 MAC 地址是 dc:a3:dd:c4:1e:5a
  • d0 ab d5 23 a5 0a 便是 Source Address。 這里與 Destination Address 的前兩個 bit 相同,不再解析. MAC 地址值為 d0🆎d5:23:a5:0a. 因為這個 wireshak 包是我的機器給遠程服務器發送 TCP 數據的包,因此這個 MAC 地址便是我本機的 MAC 地址. 使用 ipconfig /all 確認一下

    果然一致
  • 08 00 對應于 Length/Type 字段。 因為該值大于 0600, 那么該字段代表上層協議的類型. RFC894 規定 IP 協議的下層 MAC 協議中的 Type 字段應該設置為 08 00。 也就意味著我們這個 MAC 幀中的 MAC Client Data 包含一個 IP 包.
  • 這里因為我們還不想涉及到 IP 協議的知識,暫且略過 MAC Client Data 字段的分析
  • 對于后續的 Pad, FCS, Extension 字段貌似無法在 Wireshark 包中看到,這里也只能暫且作罷. 如果有讀者知道如何查看這幾個字段的數據,還請告知,感謝
  • END!

    總結

    以上是生活随笔為你收集整理的协议簇: Media Access Control(MAC) Frame 解析的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。