以太网帧结构以及CRC校验
2017-05-27 14:25
627 查看
MAC帧报文结构
在以太网链路上的数据包称作以太帧。以太帧起始部分由前导码和帧开始符组成。后面紧跟着一个以太网报头,以MAC地址说明目的地址和源地址。帧的中部是该帧负载的包含其他协议报头的数据包(例如IP协议)。以太帧由一个32位冗余校验码结尾。它用于检验数据传输是否出现损坏。帧结构图:
说一下各个字段的作用:
前同步码:第一个字段是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帧:帧的长度不是8的倍数。
检验序列检验出差错。
帧长度数据字段不在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;
(3)、接收方把收到的每一个帧都处于同样的余数,然后检查得到的余数R:
- 若余数R = 0,则判定这个帧没有错,接受。
- 若余数R != 0,则判定这个帧有差错。(只能检测出该帧出现错误,无法定位出错位置)。
注意:该检测只能保证无比特差错,而不能保证可靠传输。
相关文章推荐
- Discovery学习之路-交换机-以太网帧结构以及为什么是64Bytes
- 以太网帧结构以及ARP RARP协议
- 任务栏窗口以及其子窗口结构
- CLASSPATH 以及包和目录结构的关系
- J2ME的概述,结构,现在与未来,以及我能用J2ME做什么?
- SharpDevelop解析与学习心得之一------概况以及物理结构
- 深入了解.net类在内存中的结构以及安全线程同步
- Data block 的物理结构介绍以及一些参数的学习
- 学习.NET (4) Inside Assembly -研究Assembly的结构,强命名Assembly的生成以及Delayed signing的过程
- C#的类与结构,以及面向对象编程思想
- 构筑无所不在计算的基础—TRON技术体系结构 以及老家
- >>CLI里面的秘密……(二)强命名、元数据以及文件结构(上半部分)
- 三层结构windows98以及2000的配置说明 适用于 SocketConnection 和 DComConnection
- .NET 指南:类、结构,以及接口的名称
- 结构和类中字段的初始化以及用new来操作他们的构造函数
- 深入了解.net类在内存中的结构以及安全线程同步
- >>CLI里面的秘密……(二)强命名、元数据以及文件结构(下半部分)
- Symbian入门指南第二章:Symbian开发环境的建立以及目录结构的说明
- [转]mssql中得到库里所有的表名,以及表的结构(列名和数据类型)
- 深入分析ADO.NET中的DataSet对象的结构以及操作方法