以太网帧结构以及CRC校验

MAC帧报文结构

在以太网链路上的数据包称作以太帧。以太帧起始部分由前导码和帧开始符组成。后面紧跟着一个以太网报头,以MAC地址说明目的地址源地址。帧的中部是该帧负载的包含其他协议报头的数据包(例如IP协议)。以太帧由一个32位冗余校验码结尾。它用于检验数据传输是否出现损坏。

帧结构图:

frame

说一下各个字段的作用:

  • 前同步码:第一个字段是7个字节的前同步码,1和0交替,作用是用来使接收端的适配器在接收MAC帧时能够迅速调整时钟频率,使它和发送端的频率相同。
  • 帧开始定界符:第二个字段是1个字节的帧开始定界符,前六位1和0交替,最后的两个连续1表示告诉接收端适配器:“帧信息要来了,你准备接收把。
  • MAC 目的地址:第三个字段是6字节(MAC地址占48位,如:FF,FF,FF,FF,FF),发送方的网卡(MAC)地址,用处是当网卡接收到一个数据帧时,首先会检查该帧的目的地址,是否与当前适配器的物理地址相同,如果相同则会进一步处理,不同则直接丢弃。
  • 源MAC地址:发送端的MAC地址同样占6个字节
  • 类型:该字段在网络协议栈分解中及其重要,考虑当PDU(协议数据单元)来到某一层时,它需要将PDU交付给上层,而上层协议众多,所以在处理数据的时候,必须要一个字段标识我这个交付给谁。如,该字段为0x0800时,表示将有效载荷交付给IP协议,为0x0806交付给ARP,0X8035交付给RARP。
  • 数据:数据也叫有效载荷,除过当前层协议需要使用的字段外,即需要交付给上层的数据,以太网帧数据长度规定最小为46字节,最大为1500字节,如果有不到46字节时,会用填充字节填充到最小长度。最大值也叫最大传输单元(MTU),我们可以再 Linux输入 ifconfig 可以看到有一项MTU:1500。
  • 帧检验序列FCS(使用CRC校验法):检测该帧是否出现差错。

无效的MAC帧

当出现下列情况之一即为无效的MAC帧:

  1. 帧的长度不是8的倍数。
  2. 检验序列检验出差错。
  3. 帧长度数据字段不在46-1500之间。

CRC校验步骤

(1)、在发送端先把数组按照一定划分大小划分为组,假设每组K个比特,要传输的数据记位M,发送方要做的就是在数据M后面添加用于差错检测的 n 位冗余码,然后构成一个帧发送出去,也就是说此时发送的数据在原来基础上曾家了n位冗余码。

(2)、n 位冗余码怎么来的?
首先在原数据M后面添加n个0相当于左移n位,此时数据长度变为原来的每组K个比特加n即(k+n)位。然后用该序列除以在计算之前规定的一个长度为(n+1)位的除数P,根据二进制的模2 运算,计算出余数R。这个余数R就会作为冗余码拼接在原数据后面发送出去。

模 2 运算:加法不进位,减法和加法一样,比如:
1111+1010 = 0101;
cal

(3)、接收方把收到的每一个帧都处于同样的余数,然后检查得到的余数R:
- 若余数R = 0,则判定这个帧没有错,接受。
- 若余数R != 0,则判定这个帧有差错。(只能检测出该帧出现错误,无法定位出错位置)。

注意:该检测只能保证无比特差错,而不能保证可靠传输。

©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页