ImageVerifierCode 换一换
格式:DOCX , 页数:17 ,大小:199.60KB ,
资源ID:22061355      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/22061355.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Ethernet帧结构解析汇报文档格式.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

Ethernet帧结构解析汇报文档格式.docx

1、所幸的是,后者定义的有效长度值与前者定义的有效类型值无一相同,这样就容易区分两种帧格式2程序流程图:三详细设计:1.CRC校验部分设计:为了对以太网帧的对错进行检验,需要设计CRC校验部分。采用以为相与的方式对帧的首部相继作8位CRC校验输入参数:chCurrByte 低8位数据有效,记录了上一次CRC校验的余数chNextByte 低8位数据有效,记录了本次要继续校验的一个字节 传出参数:chCurrByte 低8位数据有效,记录了本次CRC校验的余数void checkCRC(int &chCurrByte, int chNextByte)/ CRC循环:每次调用进行8次循环,处理一个字节

2、的数据。for (int nMask = 0x80; nMask 0;= 1) if (chCurrByte & 0x80) != 0) / 首位为1:移位,并进行异或运算 chCurrByte = 1; / 移一位 if ( (chNextByte & nMask) != 0) / 补一位 chCurrByte |= 1; chCurrByte = 7; / 首位已经移出,仅对低8位进行异或运算,7的二进制为0000,0111 else / 首位为0,只移位,不进行异或运算2.部分变量的声明:int nSN = 1; / 帧序号int nCheck = 0; / 校验码int nCurrDa

3、taOffset = 22; / 帧头偏移量int nCurrDataLength = 0; / 数据字段长度bool bParseCont = true; / 是否继续对输入文件进行解析int nFileEnd = 0; / 输入文件的长度3.计算数据段的长度:nCurrDataLength = bParseCont ? / 是否到达文件末尾(file.tellg() - 8 - 1 - nCurrDataOffset) : / 没到文件末尾:下一帧头位置 - 前导码和定界符长度 - CRC校验码长度 - 数据字段起始位置(file.tellg() - 1 - nCurrDataOffset

4、); / 已到达文件末尾:文件末尾位置 - CRC校验码长度 - 数据字段起始位置4.主函数的设计:void main(int argc, char* argv) / 检测命令行参数的正确性if (argc != 2) cout 请以帧封装包文件为参数重新执行程序 endl; exit(0);/ 检测输入文件是否存在,并可以按所需的权限和方式打开ifstream file(argv1, ios:in|ios:binary|ios:nocreate);if (!file.is_open()无法打开帧封装包文件,请检查文件是否存在并且未损坏/ 变量声明及初始化/ 计算输入文件的长度file.see

5、kg(0, ios:end); / 把文件指针移到文件的末尾nFileEnd = file.tellg(); / 取得输入文件的长度beg); / 文件指针位置初始化cout.fill(0); / 显示初始化cout.setf(ios:uppercase); / 以大写字母输出/ 定位到输入文件中的第一个有效帧/ 从文件头开始,找到第一个连续的“AA-AA-AA-AA-AA-AA-AA-AB”while ( true ) for (int j = 0; j = nFileEnd) / 安全性检测 cout nFileEnd)endl没有找到完整帧头,解析终止 int c; / 读入字节 int

6、 i = 0; / 循环控制变量 int EtherType = 0; / 由帧中读出的类型字段 bool bAccept = true; / 是否接受该帧 / 输出帧的序号 endl 序号:tt nSN; / 输出前导码,只输出,不校验前导码:t; for (i = 0; i i+) / 输出格式为:AA AA AA AA AA AA AA cout.width(2); hex file.get() dec / 输出帧前定界符,只输出,不校验帧前定界符: / 输出格式为:AB file.get(); / 输出目的地址,并校验目的地址: 6;xx-xx-xx-xx-xx-xx c = file

7、.get(); c (i=5 ? :- if (i = 0) / 第一个字节,作为“余数”等待下一个bit nCheck = c; else / 开始校验 checkCRC(nCheck, c); / 输出源地址,并校验源地址: / 继续校验 / 输出类型字段,并校验类型字段: / 输出类型字段的高8位 / CRC校验 EtherType = c; / 输出类型字段的低8位 c; checkCRC(nCheck,c); EtherType = 8; / 转换成主机格式 EtherType |= c; / 定位下一个帧,以确定当前帧的结束位置 while ( bParseCont ) for (

8、int i = 0; i+) /找下一个连续的7个0xaa= nFileEnd) /到文件末尾,退出循环 bParseCont = false;= 0xaa) i = -1; / 如果直到文件结束仍没找到上述比特串,将终止主控循环的标记bParseCont置为true bParseCont = bParseCont & (file.tellg() nFileEnd); / 判断7个连续的0xaa之后是否为0xab if (bParseCont & file.get() = 0xab) / 计算数据字段的长度 nCurrDataLength = bParseCont ? (file.tellg(

9、) - 8 - 1 - nCurrDataOffset) : (file.tellg() - 1 - nCurrDataOffset); / 以文本格式数据字段,并校验数据字段: unsigned char* pData = new unsigned charnCurrDataLength; / 创建缓冲区 file.seekg(bParseCont ? (-8 - 1 -nCurrDataLength) : ( -1 - nCurrDataLength), ios: file.read(pData, nCurrDataLength); / 读入数据字段 int nCount = 50; /

10、每行的基本字符数量 nCurrDataLength; i+) / 输出数据字段文本 nCount-; pDatai; / 字符输出 checkCRC(nCheck, (int)pDatai); if ( nCount 0) / 换行处理 / 将行尾的单词写完整 if ( pDatai = ) nCount = 50; / 处理过长的行尾单词:换行并使用连字符 -10) delete pData; /释放缓冲区空间 / 输出CRC校验码,如果CRC校验有误,则输出正确的CRC校验码CRC校验 / 读入CRC校验码 int nTmpCRC = nCheck; / 最后一步校验 if (nCheck

11、 & 0xff) = 0) / CRC校验无误(正确): else / CRC校验有误(错误): checkCRC(nTmpCRC, 0); / 计算正确的CRC校验码t应为: (nTmpCRC & 0xff); bAccept = false; / 将帧的接收标记置为false / 如果数据字段长度不足46字节或数据字段长度超过1500字节,则将帧的接收标记置为false if (nCurrDataLength 1500 ) / 输出帧的接收状态状态: (bAccept ?AcceptDiscard) nSN+; / 帧序号加1 nCurrDataOffset = file.tellg()

12、+ 22; / 将数据字段偏移量更新为下一帧的帧头结束位置/ 关闭输入文件file.close();四运行结果:五简明用户手册:用户需将源程序在VC+6.0下运行成功后,将实验1.EXE放在DOS下运行,运行的同时需要输入位置参数,本例用的位置参数为input,回车即可。六实验总结:这次试验,充分运用了所学的计算机网络知识,设计出了如何解析以太网帧,从而更加深刻的了解到了以太网帧的结构及其的相关问题。其实通过这些最近的实验觉得最重要一点就是:我们一定要自己动手,这样才能真正的学到东西。书本知识固然重要,但我们更要学会将书本知识应用到实际的工作中。实践中才会发现错误,也才能改进,才能达到学习的最终目的。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1