以太网Ethernet解码概述
生活随笔
收集整理的這篇文章主要介紹了
以太网Ethernet解码概述
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
目錄
- 1. 申明
- 2. 目的
- 3. 背景知識
- 3.1 Ethernet協(xié)議的作用和歷史
- 3.2 Ethernet承載IP的例子
- 4. 代碼demo
- 5. 專欄知識鏈接
- 6. 寫在最后
1. 申明
本文章屬于原創(chuàng),其中參考的代碼及文章在結(jié)尾處標(biāo)明,侵刪。
2. 目的
本文是為了解析Ethernet協(xié)議及其上層承載的協(xié)議所寫demo。
3. 背景知識
3.1 Ethernet協(xié)議的作用和歷史
3.2 Ethernet承載IP的例子
字段含義:
Destination/目的字段:標(biāo)識目標(biāo)通信方的MAC地址 (6bytes)
Source/源字段:標(biāo)識發(fā)送端的MAC地址 (6bytes)
Type/類型值:標(biāo)志上層協(xié)議 (2bytes)
MAC地址:
所有設(shè)備的MAC地址是全球唯一的.
MAC地址大小為6字節(jié)
MAC地址的前半部分被稱為"OUI代碼"廠商唯一標(biāo)識符, 后半部分廠商自動分配
4. 代碼demo
#include <stdint.h>/* mac 地址長度 */ #define MAC_ADDR_BTYES_LEN 6 /* ethernet頭總長度 */ #define MAC_TOTAL_BTYES_LEN 14 /* 上層承載協(xié)議類型 */ #define PROTOCOL_UNKNOW 0 #define PROTOCOL_IPV4 1 #define PROTOCOL_IPV6 2 #define PROTOCOL_MPLS 3 #define PROTOCOL_VLAN 4 #define PROTOCOL_PPPOE 5 #define PROTOCOL_8021AD 6typedef struct {uint8_t dest_addr[MAC_ADDR_BTYES_LEN];uint8_t src_addr[MAC_ADDR_BTYES_LEN];uint16_t next_protocol_type; } st_ethernet_hdr;static inline int get_eth_next_protocol(st_ethernet_hdr *dr) {switch (ntohs(dr->next_protocol_type)) {case 0x0800:return PROTOCOL_IPV4;case 0x86dd:return PROTOCOL_IPV6;case 0x8847:case 0x8848:return PROTOCOL_MPLS;case 0x8100:case 0x9100:return PROTOCOL_VLAN;case 0x8864:return PROTOCOL_PPPOE;case 0x88a8:return PROTOCOL_8021AD;default:return PROTOCOL_UNKNOW;}return PROTOCOL_UNKNOW; }/*解碼ethernet協(xié)議@param1 pdata: 原始數(shù)據(jù)pdata的指針@param2 len: 原始數(shù)據(jù)的長度@return int:PROTOCOL_UNKNOW : faildother value : succeed */ int decode_ethernet(uint8_t *pdata, uint8_t len) {if (UNLIKELY(len < MAC_TOTAL_BTYES_LEN)) {return PROTOCOL_UNKNOW;}st_ethernet_hdr *pethernet = (st_ethernet_hdr *)(pdata);return get_eth_next_protocol(pethernet); }劃重點: 為了解碼Ethernet層,需要傳入起始正確的數(shù)據(jù)和長度,在解碼返回值不為PROTOCOL_UNKNOW時,說明解析成功,此時應(yīng)該在調(diào)用函數(shù)之后,將指向數(shù)據(jù)的指針和長度分別偏移MAC_TOTAL_BTYES_LEN,即14bytes,來跳過Ethernet層。
5. 專欄知識鏈接
1. 協(xié)議知識概述
2. H264分辨率解碼概述
3. H265分辨率解碼概述
6. 寫在最后
本文引用了以下文章作者的代碼或思路, 并結(jié)合了實際項目中的代碼整理出的demo,如有問題歡迎指正。https://blog.csdn.net/qq_28110727/article/details/96581196
總結(jié)
以上是生活随笔為你收集整理的以太网Ethernet解码概述的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: H264分辨率解码概述
- 下一篇: 项目资源管理