协议簇: Media Access Control(MAC) Frame 解析
Media Access Control(MAC) Frame 解析
前言
千里之行,始于足下。 因為個人從事網絡協議開發,一直想深入的學習一下協議族,從這篇開始,我將開始記錄分享我學習到的網絡協議相關的知識
簡介
引用百度百科的描述:
數據鏈路層是OSI參考模型中的第二層,介乎于物理層和網絡層之間。數據鏈路層在物理層提供的服務的基礎上向網絡層提供服務,其最基本的服務是將源自網絡層來的數據可靠地傳輸到相鄰節點的目標機網絡層
由于 Ethernet 的歷史原因,這一層需要兼容各種不同的物理層,因此具體的協議也比較多。 但是好在他們的幀格式是統一的,這篇文章我們將就本人機器上看到的幀來學習一下。
Frame 格式
我們先用一張圖來描述一下 MAC 層幀的格式:
由圖可以看出,每個 MAC 幀是由以下幾個部分構成的:
接下來,我們詳細描述一下各個字段所代表的意義
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 的源地址和目標地址.
它的格式如下:
(1) 對于源地址,該位被保留,設置為 0
(2) 對于目標地址,該位代表代表地址類型. 可能的值有如下兩種:
1> 該位為 0, 代表他是一個 individual address. 目標地址是一個特定的網絡設備
2> 該位為 1,代表他是一個 group address.這里又細分為兩類:Multicast-Group Address:目標地址代表一個特定的邏輯網絡設備的集合. Broadcast Address: 目標地址代表所有當前連接到當前 LAN 的網絡設備.
LENGTH/TYPE
該字段的長度為 2 byte,它的具體意義取決于它的實際值.
MAC Client Data
該字段用來承載實際上要在網絡中發送的數據(當然不是我們 socket 中發送的數據, socket 中發送的數據需要經過tcp,ip 層的包裝之后才能放在 該字段中發送)
它有最大長度的限制. MAC 幀一共有三種,他們分別對應的最大長度如下所示:
| Basic Frame | 1500 |
| Q-tagged Frame | 1504 |
| Envelop Frame | 1982 |
規范中指出,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
這里我們逐一分析一下:
果然一致
END!
總結
以上是生活随笔為你收集整理的协议簇: Media Access Control(MAC) Frame 解析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VS2015上配置opencv2.4.1
- 下一篇: sync.Map 源码学习