以太网帧,属于二层数据,分为2种:EthernetII帧和IEEE802.3帧。

    其中EthernetII帧格式为:

wKioL1kIPT-is_EcAACMiT9PQGA476.png

    而IEEE802.3帧格式为:

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字节。


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):为了进行差错检验而添加的冗余码。