帧封装实验1.docVIP

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
帧封装实验1

实验三 帧封装实验 实验目的 通过了解帧的结构,编写一个程序封装数据,将数据封装到帧中。 实验要求 熟悉掌握帧的结构,掌握帧的结构以及帧的每一部分所代表的意义。 预备知识 “帧”是数据链路层的数据单位,由发送者在所传输数据的首尾添加特殊字符组成。尽管以太网可以在不同的速率和多种传输媒体下工作,但所有类型的以太网都有一个统一的帧格式。最早的以太网所采用的帧结构称为DIX帧格式,如图1所示: 图1 DIX帧结构 而下图则是IEEE 802.3委员会的帧结构: 图2 IEEE 802.3帧结构 可以看出这两种帧结构基本上是一致的,除了DIX帧格式的帧中的16位的类型字段对应IEEE 802.3帧中的16位的长度字段。但是,在实际使用过程中,由于规定DIX帧的类型字段必须大于0x0600,所以,两种目的主机会正确区分是DIX帧还是802.3帧结构。 以太网帧以64位的前导开始,其中前导字段的前面7B中每个字节是由一组1和0交替的位串组成,取值该字段用于“唤醒”接收者,对于差分曼彻斯特编码,前导字段的前7B正好是一个方波,接受者利用它与发送方的时钟进行同步。前导字段的最后一个字节取值最后两个取值11的位“提醒”接收者帧的开始,接下来的6B位目的地址。而帧的结尾则可以通过检测到链路的空闲来表示。 前导字段之后是帧的目的地址和源地址。以太网上的所有主机都有一个唯一的以太网地址。从技术角度来看,以太网地址应该是指主机上安装的网卡的地址,一般烧到网卡的ROM中。以太网的目的地址可以是单播地址,也可以是组播地址,还可以是广播地址。目的地址的第一位位0表示单播地址,为1表示组播地址,目的地址为全1则表示广播地址,目的地址位广播地址的帧将被网上的所有站点接收。 802.3标准中的帧用2B表示数据字段所包含的字节数。每个帧所能携带的用户数据最长为1500B,1500B的限制是为了防止结点长时间独占传输媒体;同时以太网限制每个帧中从源地址字段结束到校验和字段开始的长度最小为46B,如果用户数据不够,则通过填充来满足限制,这是为了保证站点能够在传输完数据帧之前检测到冲突。 帧校验字段FCS采用32位的CRC校验,用于检测帧传输过程中可能出现的错误。校验的范围包括除“前导”和“校验和”两部分外帧中的其他字段。 实验内容与步骤 首先要完成的是帧头部的装入,将前导码、定界符、目的地址、源地址、长度字段的相应数值按顺序写入。 其次是数据字段的填充。 在本次实验中,目的地址为:0x00,0x04,0xe2,0xe3,0x01,0xe6;源地址为:0x00,0x00,0x80,0x1a,0xe6,0x65。也可用其他字段代替。简单起见,校验字段采用CRC-8校验算法。设数据CRC-8的生成多项式为X8+X2+X1+1,即100000111。输入文件的内容和长度自定。 流程图如下: 图3 帧封装流程图 下图为输入/输出文件界面及运行结果界面: 图4 输入文件界面 图5 运行结果界面 图6 输出文件界面 源程序如下: #include stdio.h #include conio.h #include stdlib.h #include io.h #include fcntl.h #include string.h #include alloc.h #define BUFFER_MAX 1500 #define BUFFER_MIN 46 #define PREAMBLE_LEN 8 #define DEST_LEN 6 #define SOURCE_LEN 6 #define FLIE_LENGTH_LEN 2 #define FCS_LEN 4 char preamble[8]={0x55,0x55,0x55,0x55,0x55,0x55,0x55,0xD5};/* 前导码 */ char addr_dest[6]={0x0,0x0,0x0,0x0,0x0,0x0}; char addr_source[6]={0x0,0x0,0x0,0x0,0x0,0x0}; long *fcs; char *fill_data; char *infilename[10]; char *outfilename[10]; void fill(int x); /*填充函数 */ void framer(); void init_crc32_table(); void GenerateCRC32(char* DataBuf,unsigned long len); unsigned long crc32_table[256]; unsign

文档评论(0)

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

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

1亿VIP精品文档

相关文档