802.3以太网数据帧的解析报告.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
前导码和帧开始符:一个帧以7个字节的前导码和1个字节的帧开始符作为帧的开始。 目的/源地址:48位(6B),是物理地址,又称MAC地址,如00-13-d3-a2-42-a8 单播地址:目的地址第一位为0,只被该地址节点接收 多播地址:目的地址第一位为1,被一组节点接收 播送地址:目的地址为全1,被所有节点接收 类型字段:16位(2B),表示网络层协议类型,0x0800,表示网络层为IP协议 0x8137,表示网络层为NetWare的IXP协议 CRC循环冗余校验 在数据后面添加上的冗余码称为帧检验序列 FCS (Frame Check Sequence)。循环冗余检验 CRC 和帧检验序列 FCS并不等同。 〔2〕 CRC检错的原理: 根本思想就是先在要发送的帧后面附加一个数〔这个就是用来校验的校验码,这里的数也是二进制序列的〕,生成一个新帧发送给接收端。这个附加的数不是随意的,它要使所生成的新帧能与发送端和接收端共同选定的某个特定数整除〔采用一种称之为“模2除法〞〕。到达接收端后,再把接收到的新帧除以〔同样采用“模2除法〞〕这个选定的除数。因为在发送端发送数据帧之前就已通过附加一个数,做了“去余〞处理,所以结果应该是没有余数。如果有余数,那么说明该帧在传输过程中出现了过失。 “模2除法〞与“算术除法〞类似,但它既不向上位借位,也不比拟除数和被除数的相同位数值的大小,只要以相同位数进行相除即可。模2加法运算为:1+1=0,0+1=1,0+0=0,无进位,也无借位;模2减法运算为:1-1=0,0-1=1,1-0=1,0-0=0,也无进位,无借位。相当于二进制中的逻辑异或运算。也就是比拟后,两者对应位相同那么结果为“0〞,不同那么结果为“1〞。 ? 具体来说,CRC校验原理就是以下几个步骤: ?〔2〕看所选定的除数二进制位数〔假设为k位〕,然后在要发送的数据帧〔假设为m位〕后面加上k-1位“0〞,然后以这个加了k-1个“0“的新帧〔一共是m+k-1位〕以“模2除法〞方式除以上面这个除数,所得到的余数〔也是二进制的比特串〕就是该帧的CRC校验码,也称之为FCS〔帧校验序列〕。余数的位数一定要是比除数位数只能少一位。 ?〔3〕再把这个校验码附加在原数据帧〔就是m位的帧,注意不是在后面形成的m+k-1位的帧〕后面,构建一个新帧发送到接收端;最后在接收端再把这个新帧以“模2除法〞方式除以前面选择的除数,如果没有余数,那么说明该帧在传输过程中没出错,否那么出现了过失。 CRC校验中有两个关键点:一是要预先确定一个发送端和接收端都用来作为除数的二进制比特串〔或多项式〕;二是把原始帧与上面选定的除进行二进制除法运算,计算出FCS。前者可以随机选择,也可按国际上通行的标准选择,但最高位和最低位必须均为“1〞。 三:仿真过程: 首先读取ch03_mac_frame_dataargv[1]=H:\\研一上课\\数据网络技术\\ch03_mac_frame_data; char* filePath= argv[1]; ifstream file(filePath,ios::binary); CRC8处理流程图: 图2. CRC8的流程图 CRC8检验的代码实现如下: void checkCRC(int chCurrByte, int chNextByte) { // CRC循环:每次调用进行8次循环,处理一个字节的数据。 for (int nMask = 0x80; nMask 0; nMask = 1) { if ((chCurrByte 0x80) != 0) // 首位为1:移位,并进行异或运算 { chCurrByte = 1; // 移一位 if ( (chNextByte nMask) != 0) // 补一位 { chCurrByte |= 1; } chCurrByte ^= 7; // 首位已经移出,仅对低8位进行异或运算,7的二进制为0000,0111 } else // 首位为0,只移位,不进行异或运算 { chCurrByte = 1; // 移一位 if ( (chNextByte nMask) != 0) // 补一位 { chCurrByte |= 1; } } } } 四:实验结果及分析 如图分别显示了解析出的四个帧,并将每个帧的帧结构内容显示出来,如图3显示的解析出的前两个帧,图4显示的解析出的后两个帧。其中分别输出了前同步码,帧定界符,目的地址,源地址,类型

文档评论(0)

zc123456hh + 关注
实名认证
文档贡献者

做好每一个文档。

1亿VIP精品文档

相关文档