Ethernet帧结构解析课件

上传人:我*** 文档编号:143666209 上传时间:2020-09-01 格式:PPT 页数:27 大小:495KB
返回 下载 相关 举报
Ethernet帧结构解析课件_第1页
第1页 / 共27页
Ethernet帧结构解析课件_第2页
第2页 / 共27页
Ethernet帧结构解析课件_第3页
第3页 / 共27页
Ethernet帧结构解析课件_第4页
第4页 / 共27页
Ethernet帧结构解析课件_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《Ethernet帧结构解析课件》由会员分享,可在线阅读,更多相关《Ethernet帧结构解析课件(27页珍藏版)》请在金锄头文库上搜索。

1、1,Technology of Network Programming,网络编程技术,第02章 Ethernet帧结构解析,网络编程技术,2,概述,帧是网络中基本传输单元,熟悉帧结构对于理解网络协议的概念、协议执行过程以及网络层次结构具有重要的意义,网络编程技术,3,编程训练目的 编程训练要求 相关知识介绍 程序设计分析 扩展与提高,提纲,网络编程技术,4,编程训练目的,根据局域网MAC子层的基本原理,通过解析Ethernet帧,掌握帧结构的各个字段含义以及帧的接收过程,加深对MAC子层设计思想与设计方法的理解 掌握Ethernet帧结构解析软件设计与编程实现的方法 掌握帧CRC校验算法原理与

2、编程实现方法,网络编程技术,5,编程训练目的 编程训练要求 相关知识介绍 程序设计分析 扩展与提高,提纲,网络编程技术,6,编程训练要求,编写程序, 解析Ethernet V2.0格式的帧封包文件: 程序为命令行程序,命令行格式如下: FrameParser.exe inputfile 其中,inputfile为Ethernet帧封包文件。 帧解析的结果显示在控制台上,格式为: 序号:1(表示第n帧) 前导码:xx xx xx xx xx xx xx 帧前定界符:xx 目的地址:xx-xx-xx-xx-xx-xx 源地址:xx-xx-xx-xx-xx-xx 类型字段:xx xx 数据字段: C

3、RC校验(正确):xx 或 CRC校验(错误):xx 应为:xx 状态:Accept 或 Discard,网络编程技术,7,程序运行的参考界面,网络编程技术,8,编程训练目的 编程训练要求 相关知识介绍 程序设计分析 扩展与提高,提纲,网络编程技术,9,帧结构,Ethernet V2.0的帧结构 802.3标准的帧结构,网络编程技术,10,Ethernet帧的接收流程分析,网络编程技术,11,CRC校验,CRC是一类重要的线性分组码,编码和解码方法简单,检错和纠错能力强 它是目前应用最广泛的检错编码方法之一,广泛应用于通信和测控领域,网络编程技术,12,CRC校验工作原理,在发送端用生成多项式

4、G (x)去除发送数据多项式f (x) ,求得一个余数多项式。将余数多项式附在数据多项式之后发送到接收端 在接收端用同样的生成多项式G (x)去除接收数据多项式f (x) ,得到计算余数多项式 通过计算余数多项式与接收余数多项式是否相同来判断是否在传输过程中出现差错,网络编程技术,13,CRC校验硬件电路实现,计算CRC-8(x8+x2+x1+1)的硬件电路实现,网络编程技术,14,编程训练目的 编程训练要求 相关知识介绍 程序设计分析 扩展与提高,提纲,网络编程技术,15,安全与有效性检测,if (argc != 2) cout 请以帧封装包文件为参数重新执行程序 endl; exit(0)

5、; / 检测输入文件是否存在,并可以按所需的权限和方式打开 ifstream file(argv1, ios:in|ios:binary|ios:nocreate); if (!file.is_open() cout 无法打开帧封装包文件,请检查文件是否存在并且未损坏 endl; exit(0); / 计算输入文件的长度 file.seekg(0, ios:end);/ 把文件指针移到文件的末尾 nFileEnd = file.tellg();/ 取得输入文件的长度 file.seekg(0, ios:beg);/ 文件指针位置初始化,网络编程技术,16,程序初始化,/ 定位到输入文件中的第一

6、个有效帧 / 从文件头开始,找到第一个连续的“AA-AA-AA-AA-AA-AA-AA-AB” while ( true ) for (int j = 0; j 7; j+)/ 找7个连续的0 xaa ./安全性检测 / 看当前字符是不是0 xaa,如果不是,则重新寻找7个连续的0 xaa if (file.get() != 0 xaa) j = -1; /赋值-1,然后j+,j0开始寻找下一个符合的 if (file.get() = 0 xab)/ 判断7个连续的0 xaa之后是否为0 xab break; ,网络编程技术,17,主程序,1、安全性检测 / 将数据字段偏移量定位在上述二进制串

7、之后14字节处,并准备进入解析阶段 nCurrDataOffset = file.tellg() + 14; file.seekg(-8,ios:cur); / 检测剩余文件是否可能包含完整帧头 if (file.tellg() + 14 nFileEnd) coutendl没有找到完整帧头,解析终止endl; file.close(); exit(0); 2、帧头信息解析 / 输出目的地址,并校验 cout endl 目的地址:t; for (i = 0; i 6; i+)/ 输出格式为:xx-xx-xx-xx-xx-xx c = file.get(); cout.width(2); cou

8、t hex c dec (i=5 ? : -); ,网络编程技术,18,主程序,/ 输出类型字段,并校验 coutendl类型字段:t; cout.width(2); / 输出类型字段的高8位 c = file.get(); cout hex c dec ; checkCRC(nCheck, c);/ CRC校验 EtherType = c; / 输出类型字段的低8位 c = file.get(); cout.width(2); cout hex c; checkCRC(nCheck,c);/ CRC校验 EtherType = 8;/ 转换成主机格式 EtherType |= c; 3、数据

9、字段的确定和输出 定位下一个帧的起始,同前,网络编程技术,19,主程序,不同的CPU有不同的字节序类型 这些字节序是指整数在内存中保存的顺序 这个叫做主机字节序。最常见的有两种Little endian(将低序字节存储在起始地址)和Big endian(将高序字节存储在起始地址)。 网络字节顺序是TCP/IP中规定好的一种数据表示格式,它与具体的CPU类型、操作系统等无关,从而可以保证数据在不同主机之间传输时能够被正确解释。网络字节顺序采用big endian排序方式。,网络编程技术,20,主程序,为了进行转换 bsd socket提供了转换的函数 有下面四个 htons 把unsigned

10、short类型从主机序转换到网络序 htonl 把unsigned long类型从主机序转换到网络序 ntohs 把unsigned short类型从网络序转换到主机序 ntohl 把unsigned long类型从网络序转换到主机序,网络编程技术,21,CRC-8校验算法的实现,把register8中的值置为0; / register8是一个8位的寄存器 在原始数据input后添加8个0; while(数据未处理完) if(register8首位是1) register8中的数据左移1位; if(从input中读入的新的数据为1) 将register8的最低位置1; register8 =

11、register8 XOR 00000111; else / register8首位是0 register8中的数据左移1位; if(从input中读入的新的数据为1) 将register8的最低位置1; ,网络编程技术,22,编程训练目的 编程训练要求 相关知识介绍 程序设计分析 扩展与提高,提纲,网络编程技术,23,扩展与提高,CRC-32校验查表法实现 串行方法算法简单,易于实现,对任意长度的生成多项式都适用,但是它一次只能处理一位数据,效率太低。为了提高处理效率,可以一次处理4 位、8 位、16 位或32 位 程序分两步实现: 计算参数表,计算校验码时只要从表中查找对应的值进行处理即可

12、 计算CRC校验码,网络编程技术,24,参数表生成程序,/位交换程序 unsigned long int Reflect(unsigned long int ref,char ch) unsigned long int value(0); for (int i=1;i=1; return value; unsigned long int crc32table256; unsigned long int ulrevcrc32poly = 0 x04C11DB7;,网络编程技术,25,参数表生成程序,void initcrc32table() for (int i=1;i=255;i+) temp

13、 =Reflect(i,8); crc32tablei = temp24; for (int j=0;j8;j+) unsigned long int flag = crc32tablei ,网络编程技术,26,产生CRC校验码程序,unsigned long int crc32table256; /参数表 unsigned long uloldcrc32=0 x00000000,ulcrc32,uloldcrc; unsigned int wcharcnt=0; char c,t; while (lens-) t = (uloldcrc3224) /寄存器与查出的值异或计算 ,网络编程技术,27,扩展与提高,Ethernet帧的发送流程分析,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号