网站大量收购独家精品文档,联系QQ:2885784924

以太帧封装与解析---感谢 网友 分享 载自 互联网.doc

以太帧封装与解析---感谢 网友 分享 载自 互联网.doc

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

计算机网络的第一次作业,得了90分。其实实际上就是字符串的处理,没有什么难的。 一、帧的封装 1、背景知识介绍 当数据在以太网通信中传输时,被封装在帧中(见下图)。帧的组成部分都是预定义的。 第1部分为前同步信号, 5 6位长。前同步信号同步帧的传输,由交替的0和1构成。下一个域是 8位的帧首定界符(Start Frame De l i m i t e r,S F D )。帧首定界符的形式为1 0 1 0 1 0 11。在帧首定界 符之后,跟随着两个包含目标地址和源地址的地址域。根据I E E E 8 0 2 . 3标准,地址域或者是1 6 位,或者是4 8位。 接下来就是指定帧长度的1 6位域。帧的数据部分在长度域之后。封装的数据的长度必须是8位的倍数,如果不是,就必须包含一个填充域。帧的最末部分是帧校验序列(Frame Check Se q u e n c e,FC S )域,3 2位长,允许使用循环冗余校验法(Cyclic Redundancy Ch e c k,C R C )进行错误检测。这个值是在封装时从帧的其他域中计算出来的,当目标结点接收到帧时会重新计算一次。如果重新计算的值与原来计算出来的值不同,就会产生错误,接收结点就要求帧重新传输。当重计算的值与原来的值完全匹配时, C R C比较算法产生结果0,不发出重新计算的要求。现在C R C算法已经被指定为I E E E标准。 Ethernet II是一种以太网数据格式化方法,用于I n t e r n e t和其他现代网络中,与I E E E 8 0 2 . 3标准的差别很小,从而使得网络传输更有效。在EthernetII中,前同步信号为6 4位长,包含有起始分界符和帧开始定界符( S O F )。Ethernet II中的目标和源地址都是严格的4 8位(图2 - 1 2 )。Ethernet II使用1 6位类型域而不是长度域,该域用于高水平的网络通信。数据域无须p a d域来封装,长度界于5 7 6位和12 208位之间。域尺寸的最小值和最大值有利于提高改善包的冲突检测,并确保一个大型的包不会太长时间地占据网络。Ethernet II帧中的最后一个域是3 2位长的帧校验序列( F C S )域,按照8 0 2 . 3标准中的方法执行C R C.为避免网络通信问题,切勿于同一网络上在相同的通信结点中同时使用Ethernet II和8 0 2 . 3标准的帧。8 0 2 . 3标准和Ethernet II在长度(或类型域)与I E E E 8 0 2 . 2的数据链路层的L L C子层通信标准中指定的数据域之间有3个可选的域: 目标地址服务访问点( D S A P )、源服务访问点( S S A P )和控制。 这些域使得数据链路层可以管理帧并与O S I模型中的高层进行通信。D S A P和S S A P均为8位长。服务访问点( S A P )可使网络层确定目标结点的哪一个网络进程可以接收帧。而且它们也代表着诸如O S I、N o v e l l、N e t B I O S、T C P / I P、B PD U和I B M网络管理、X N S等通信进程。下面来举例说明。E 0是Novell SAP的1 6进制值,0 6是T C P / I P的S A P的1 6进制码。D S A P指定了接收帧的接收结点的服务访问点, S S A P则标识发送帧的发送结点的服务访问点。控制域的长度为8位或1 6位,用来识别帧的功能,比如它是否带有数据或报错信息。 图1几种常见的局域网数据链路帧类型 2、封装的实现 2.1编程风格的约定 变量的命名的约定:变量名的第一个字母都用该变量的类型的第一个字母,比如char 类型的变量定义为cName,int类型的变量命名为iName。对于指针类型的变量,则在上述的基础上加上“pointer”的第一个字母“p”,比如char * pcName。对于数组变量则变量名以“a”开头,比如int aiName[],这样就可以不看定义知道是整型的数组变量。方便代码的阅读和理解。 变量名都是与变量意义相关的单词组成,不写无意义的变量名和容易产生歧义的变量名。 代码的缩进以4个空格为基本单位,这样可以使多层的嵌套容易理解,而且嵌套不超过3层,以减少代码的出错和整体的理解。 2.2主要常量的定义 #define DATA_MAX 1500 /*数据的最长长度*/ #define DATA_MIN 46 /*数据的最短长度*/ #define PREAMBLE_LEN 8 /*前导码长度*/ #define DEST_LEN 6 /*目的地址长度*/ #define SOURCE_LEN 6 /*源地址长度*/ #define DATA_AREA_LE

文档评论(0)

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

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

1亿VIP精品文档

相关文档