[半小时]以太网数据帧的结构分析
2017-05-02 10:51
330 查看
以太网帧,属于二层数据,分为2种:EthernetII帧和IEEE802.3帧。
其中EthernetII帧格式为:
![](https://s5.51cto.com/wyfs02/M00/93/1C/wKioL1kIPT-is_EcAACMiT9PQGA476.png)
而IEEE802.3帧格式为:
![](https://s2.51cto.com/wyfs02/M01/93/1E/wKiom1kIPVvDfJgVAAC-DLk-f_Y244.png)
两种帧的区别----->在于Type / Length字段数值的大小。
Type/Length >=1536(0x0600) ----->EthernetII
Type/Length <=1500(0x05DC) ----->IEEE802.3
最常见的基本都是EthernetII类型的帧,STP协议的帧格式属于IEEE802.3。
下面抓取的帧为ARP请求帧,属于EthernetII型。由于data部分达不到最小的46字节,因此需要进行填充(这个动作是由网卡完成的),使data字段达到46字节。
![](https://s3.51cto.com/wyfs02/M00/93/1B/wKioL1kIODuB70ekAAAmmtTki8Y634.png)
wireshark(或其他抓包工具)进行抓包可以发现,原本最小数据帧的大小为64字节,但抓到的只有60字节甚至更少。
原因:数据帧是由网卡的driver抓取到并传送到TCP/IP协议栈,而很多网卡的driver都会把帧最后面的4个字节的FCS字段去掉,从而抓包软件无法抓取到这个字段。
另外数据段部分如果太小(不足46字节),网卡会进行自动填充(全0)。在抓取的时候,存在一个优先级的问题,有时可能数据还没有填充或者没完全填充就被抓取了,导致整个数据帧的长度不足60(去掉那4字节的FCS字段)。
CRC循环冗余校验码(Cyclic Redundancy Check),是数据通信领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意选定。CRC是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。
原理:CRC检验原理实际上就是在一个p位二进制数据序列之后附加一个r位二进制检验码(序列),从而构成一个总长为n=p+r位的二进制序列;附加在数据序列之后的这个检验码与数据序列的内容之间存在着某种特定的关系。如果因干扰等原因使数据序列中的某一位或某些位发生错误,这种特定关系就会被破坏。因此,通过检查这一关系,就可以实现对数据正确性的检验。
FCS帧检验序列(Frame Check Sequence):为了进行差错检验而添加的冗余码。
其中EthernetII帧格式为:
![](https://s5.51cto.com/wyfs02/M00/93/1C/wKioL1kIPT-is_EcAACMiT9PQGA476.png)
而IEEE802.3帧格式为:
![](https://s2.51cto.com/wyfs02/M01/93/1E/wKiom1kIPVvDfJgVAAC-DLk-f_Y244.png)
两种帧的区别----->在于Type / Length字段数值的大小。
Type/Length >=1536(0x0600) ----->EthernetII
Type/Length <=1500(0x05DC) ----->IEEE802.3
最常见的基本都是EthernetII类型的帧,STP协议的帧格式属于IEEE802.3。
下面抓取的帧为ARP请求帧,属于EthernetII型。由于data部分达不到最小的46字节,因此需要进行填充(这个动作是由网卡完成的),使data字段达到46字节。
![](https://s3.51cto.com/wyfs02/M00/93/1B/wKioL1kIODuB70ekAAAmmtTki8Y634.png)
wireshark(或其他抓包工具)进行抓包可以发现,原本最小数据帧的大小为64字节,但抓到的只有60字节甚至更少。
原因:数据帧是由网卡的driver抓取到并传送到TCP/IP协议栈,而很多网卡的driver都会把帧最后面的4个字节的FCS字段去掉,从而抓包软件无法抓取到这个字段。
另外数据段部分如果太小(不足46字节),网卡会进行自动填充(全0)。在抓取的时候,存在一个优先级的问题,有时可能数据还没有填充或者没完全填充就被抓取了,导致整个数据帧的长度不足60(去掉那4字节的FCS字段)。
CRC循环冗余校验码(Cyclic Redundancy Check),是数据通信领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意选定。CRC是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。
原理:CRC检验原理实际上就是在一个p位二进制数据序列之后附加一个r位二进制检验码(序列),从而构成一个总长为n=p+r位的二进制序列;附加在数据序列之后的这个检验码与数据序列的内容之间存在着某种特定的关系。如果因干扰等原因使数据序列中的某一位或某些位发生错误,这种特定关系就会被破坏。因此,通过检查这一关系,就可以实现对数据正确性的检验。
FCS帧检验序列(Frame Check Sequence):为了进行差错检验而添加的冗余码。
相关文章推荐
- 以太网数据帧结构分析
- 以太网数据帧协议分析
- 以太网数据帧的格式分析
- 链路层数据帧结构分析
- 以太网报文结构分析,与解析代码
- 以太网数据帧结构
- 软件体系结构分析与Smart Client的应用
- QT-EMBEDDED图形引擎体系结构源代码分析
- CRM软件系统的结构功能分析
- TAO下IDL结构定义编译文件分析
- 智能客户端相关Application Block结构功能分析(一)
- osworkflow 自带表结构分析
- MIDP图形用户界面结构分析
- Linux中数据结构的分析——原创 转载请通知
- Duwamish7分析——结构
- osworkflow的代码结构分析
- 分析rwlock的结构
- 多层结构连接方式选择的分析
- ::多层结构连接方式选择的分析::
- QQWry.dat文件结构分析(zz)