链路层帧常用的帧格式有两种:Ethernet II 与 IEEE802.3
Ethernet II 格式多用于终端设备的通信
IEEE802.3 格式多用于网络设备的通信
如何区分这两种报文:
Lenth/Type >= 1536(0x0600) 则为Ethernet_II
Lenth/Type <=1500(0x05DC) 则为IEEE802.3
Type字段表示协议类型:如0x0800(IP) 0x0806(ARP) 0x8100(VLAN)
Length字段表示数据data的长度:最小是46 (0x002E)最大是1500(0x05DC)
如果Type/Length的值超过了0X0600,那么他一定是EthernetII的帧 ,否则为IEEE802.3的帧
下面是帧的格式
先来看看以太网2的帧格式:
这是一个ARP广播包,主要看帧那块(红色花圈地方)
可以看搭配目的mac地址和源mac地址
以及类型Type :0x8100属于VLAN
剩下的便是Data 和 检验以及填充了
802.3帧与以太网2真的区别主要在于多了一个LLC字段
LLC (Logical Link Control)逻辑链路控制字段,和EthernetII的Type字段功能类似,表示封装的数据协议类型。
数据协议类型分为两种:
SAP (通用协议)如ARP STP等
SNAP(私有协议)如思科的CDP VTP等
光说无用,抓几个包看看就明白了
这个包是802.3的帧,帧的大小是60个字节
在LLC这个字段当中:有DSAP SSAP Control filed
DSAP 表示目的服务访问点,值是0X42表示STP协议的服务
SSAP 表示源服务访问点,值是0x42也是STP协议的服务
Control field字段可以先不用管,他的值一般都为0x03
因为该包属于通用协议,而不是私有协议,所以SNAP字段的内容就不存在了。下面抓个思科的CDP协议的数据包看看:
抓个包比较大有400个字节,封装的是cisco的CDP协议,仍是802.3帧
在LLC字段当中略有不同:DSAP SSAP CONTROL OrgCode PID
DSAP 目的服务访问点值是0xaa表示私有协议
SSAP 源服务访问点值是0xaa表示私有协议
Control 字段依然是0x03
Orgcode 产商代码:如cisco的是0x00000c
PID 协议ID:CDP协议
所以私有协议当中才会使用到帧格式当中的SNAP字段。
帧中还有一个前导码和帧首定界符
其主要用于同步时钟以及标识帧的开始位置,没必要深究