以太网帧结构以及CRC校验
来源:互联网 发布:天音复制软件 编辑:程序博客网 时间:2024/06/06 11:20
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,则判定这个帧有差错。(只能检测出该帧出现错误,无法定位出错位置)。
注意:该检测只能保证无比特差错,而不能保证可靠传输。
阅读全文
1 0
- 以太网帧结构以及CRC校验
- HDLC的帧结构和CRC校验
- CRC校验,以及使用实例
- ARP协议以及CRC校验
- CRC的校验原理以及例子
- 网络基础 — CRC校验的认识以及校验原理
- CRC校验
- CRC校验
- crc校验
- CRC校验
- CRC校验
- crc校验
- CRC校验
- CRC校验
- CRC 校验
- CRC 校验
- CRC校验
- CRC校验
- java中的try-catch-finally执行顺序你真的弄清楚了吗?
- go
- pytohon 日志处理 logging模块
- 压力测试工具 wrk
- angularJs中ng-cloak指令
- 以太网帧结构以及CRC校验
- spark spark_deploy_mode配置详解
- 接口入参保护
- ajax返回json串
- 计算机为什么使用补码?(讲的很详细)
- 文本三剑客之awk
- 如何修改windows Socket端口默认5000限制
- 人工智能除了下棋还能做什么?
- Dynamics 365Online 开发基于fetchxml报表的准备工作