封装Ethernet帧.doc

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
封装Ethernet帧

目 录 1 课程设计目的....................................................................1 2 课程设计要求 1 3 相关知识 1 4 课程设计分析 1——5 5 程序代码 5——7 6 运行结果与分析 7——8 7 参考文献 8 1 课程设计目的 帧是在数据链路层中进行数据传输的基本单位。熟悉帧结构对于理解网络协议的概念·网络层次 结构与协议执行过程具有重要意义。本课程设计的主要目的是通过封装Ethernet帧,了解Ethernet帧中各字段的含义及用途。 2 课程设计要求 根据后面介绍的IEEE802.3帧结构,编写程序将指定数据封装为Ethernet帧。 (1) 以命令形式运行: Encapframe input_file output_file 其中,Encapframe为程序名,input_file为输入数据文件,output_file为输出数据文件。 (2) 输入内容:Ethernet帧的各字段内容。 相关知识 1 . 帧:在发送数据的前后分别特殊的字符使它们成为帧 帧有两种结构:EthernetV2.0规范和IEEE802.3标准中的Ethernet帧。我们按802.3标准进行讨论。 a. 前导码与帧前序列:前导码由56位的10序列组成,帧前定界符可以视为前导码的延续。1B的帧前定界符 b. 目的地址和源地址:分别表示帧接受结点地址与发送结点的硬件地址。分别为6B字段长度。目的地址第一位为0表示单播地址,为1表示多播地址,为全1表示为广播地址。 c. 长度字段:帧数据最小长度为46B,最大长度为1500B d. 数据字段::帧数据字段最小长度为46B,若帧的LLC数据少于46B,则应将数据字段填充至46B。 e. 校验字段:帧校验字段采用32位CRC校验。校验范围包括目的地址字段,源地址字段,长度字段,LLC数字字段。 2 CRC校验: a. CRC编码的代数原理:在代数编码理论中,将一个码组表示为一个多项式,码组中的各码元作为多项式的系数。 b. CRC的硬件电路实现。 c. CRC的基本实现:CRC在发送端编码和接收端校验时,都可以用事先约定的多项式来得到。 d. 循环冗余校验码的特点:检错能力很强。 4 课程设计分析 1填充帧头部字段 要完成一次帧封装的过程,首先要完成的就是帧头部的装入,这个过程很简单,只要将前导码、定界符、目的地址、源地址、长度字段的相应数值按顺序写入就可以了。其中,长度字段的值即为要发送的数据的实际长度。我们可以通过以下两种方式获得长度字段的值。 a 方法一 While(! In.eof()) { In.get(a); buf[j]=a; j++; } b 方法二 infile.open(argv[1],ios::binary); Infile.seekg(0,ios::end); short length=(short)infile.tellg(); file.put(char(length/256)); file.put(char(length%256)); 上面程序的最后二行是把读到的数据长度值按逆序填到长度字段。这就涉及到网络字节序的问题。 *计算机有两种字节序: 低位字节优先序:低位字节存储在起始地址。 高位字节优先序:高位字节存储在起始地址。 Internet上的数据以高位字节优先顺序在网上传播,所以对于在机器内部以低位字节优先方式存储数据来说,在Internet上传输数据时就需要转换,否则就会出现数据不一致。 *几个字节顺序转换函数: Htonl():把32位值从主机字节序转换成网络字节序。 Htonl():把16位值从主机字节序转换成网络字节序。 ntohl():把32位值从网络字节序转换成主机字节序。 ntohl():把16位值从网络字节序转换成主机字节序。 2 填充数据字段 要注意数据字段长度。802.3标准规定帧数据字段最小长度46B,最大长度1500B,若数据不足46B,则用0来填充;若超过1500B,则将超过部分封装到下个帧进行发送。 Ethernet帧最小长度64B,最大长度1518B。 填充代码如下: if(len==1500) { ........ Len=0; } 如果数据长度小于46 if( len46) { for{i=len;i46;i++) Fr.data[i]=0x00; } data_len=len;

文档评论(0)

zhuwenmeijiale + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:7065136142000003

1亿VIP精品文档

相关文档