IEEE 802.3协议数据帧格式总结

最近调试基于88E1116R的千兆网通信,用到了802.3协议。在这里做一下学习、使用总结。

我们使用的802.3协议,帧格式如下所示:

一个数据帧的报头由7个字节的同步字段、1个字节的起始标记、6个字节的目标MAC地址、6个字节的源MAC地址、2个字节的帧长度/类型、46到1500字节的数据和4字节的帧报尾组成。如果不算7个字节的同步字段和1个字节的起始标记字段,802.3帧报头的长度是14个字节。一个802.3帧的长度最小是64字节,最长是1518字节。

同步字段(Preamble):这是由7个连续的01010101字节组成的同步脉冲字段。这个字段在早期的10M以太网中用来进行时钟同步,在现在的快速以太网中已经不用了。但是该字段还是保留着,以便让快速以太网与早期的以太网兼容。

起始标记字段(Start Frame Delimiter):这个字段是一个固定的标志字10101011。用来表示同步字段结束,一帧数据开始。

目标MAC地址字段(Destination Address):目标主机的MAC地址。如果是广播,则放广播MAC地址11111111。

源MAC地址字段(Source Address):发送数据的主机的MAC地址。

帧长度/类型字段(Length/Type):当这个字段的数字小于等于十六进制数0x0600时,表示长度;大于0x0600,表示类型。“长度”是指从本字段以后的本数据帧的字节数。“类型”则表示接收主机上层协议是谁。例如上层协议是ARP协议,这个字段该填写0x0806;上层协议是IP协议,这个字段该填写0x0800。

数据字段(Data):这是一帧数据的数据区。数据区最小46个字节,最大1500个字节。规定一帧数据的最小字节数是为了定时的需要,如果不够这个字节数的数据,则需要填充。

帧校验字段(FCS):FCS字段包含一个4字节的CRC校验值。这个值由发送主机计算并放入CRC字段,然后由接收主机重新计算。接收主机将重新计算的结果与FCS中发送主机存放的CRC结果相比较,如果不相等,则表明此帧数据已经在传输过程中损坏。

在IEEE 802.3先前,另外有一个以太网的标准叫Ethernet,老的网络工程师都熟悉Ethernet。以太网在英语里本来就叫做Ethernet。Ethernet帧格式与802.3帧格式的主要区别就在于长度/类型字段。Ethernet帧格式里用这个字段表示上层协议的类型,而802.3则用来表示长度。后来IEEE 802.3逐渐成为以太网的主流标准,IEEE为了兼容Ethernet,边同时用这个字段表示长度和类型。区分倒底是长度还是类型,用0x0600这个值来判定。

在这里,需要注意的一点是,802.3协议中,每个字节的8bit数据,在转换成串行数据传输时,先传输低位,后传输高位,所以前导码是0x55(8’b01010101),帧起始定界符是0xd5(8’b11010101)。关于这一部分,详细的定义可以查看文档《IEEE Std 802.3-2012 》的第三章。这里摘录如下:

本文转载自: http://blog.chinaaet.com/GreatCause/p/5100053048