模拟Ethernet帧的发送过程

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1目录一、课程设计目的与意义····································································2二、课程设计要求··············································································2三、帧结构分析·················································································21.帧的介绍···············································································22.CRC校验分析········································································4四、帧封装的过程··············································································71、填充帧头部字段······································································72、填充数据字段·········································································83、CRC校验··············································································9五、帧封装流程图·············································································11六、帧封装方法的相关扩展································································121、比特型算法···········································································122、字节型算法···········································································12七、程序调试分析与结果···································································13八、课程设计心得与体会···································································14附录一:参考文献·············································································15附录二:帧封装源程序······································································162一、课程设计目的与意义帧是在数据链路层数据进行传输与交换的基本单位。构造帧对于理解网络协议的概念、协议执行过程以及网络问题处理的一般方法具有重要的意义。本次课程设计的目的是应用数据链路层与介质访问控制层的知识,根据数据链路层的基本原理,通过构造一个具体的Ethernet帧,从而深入理解网络协议的基本概念与网络问题处理的一般方法。二、课程设计要求编写程序,根据给出的原始数据,组装一个IEEE802.3格式的帧,(默认的输入文件为二进制原始数据(文件名分别为li和lzy))。1)要求程序为命令行程序。比如,可执行文件各为framer.exe,则命令行形式如下:framerinputfileoutpurfile其中,inputfile为原始数据文件,outpurfile为输出结果。2)输出:对应input1和input2的结果分别为output1和output2。3)开发环境:硬件环境:PC微机软件环境:Windows2000MicrosoftVisualC++6.0三、帧结构分析1.帧的介绍术语“帧”来源于串行线路上的通信。其中,发送者在发送数据的前后各添加特殊的字符,使它们成为一个帧。Ethernet从某种程序上可以被看作是机器这间的数据链路层连接。首先我们来认识一下Ethernet帧结构,EthernetV2.0规范和IEEE802.3标准中的Ethernet帧结构有一些差别,这里我们按802.3标准的帧结构进行讨论,图一给出了Ethernet帧结构图。前导码帧前定界符目的地址源地址长度字段数据字段校验字段(7B)(1B)(2/6B)(2/6B)(2B)(长度可变)(4B)图一Ethernet帧结构3如图一所示,802.3标准的Ethernet帧结构由6部分组成。(1)前导码与帧前定界符字段前导码由56位(7B)的1010101…101010位序列组成。帧前定界符可以视为前导码的延续。1B的帧前定界符结构为10101011。如果将前导码与帧定界符一起看,那么在62位101010…1010位序列之后出现11。在11之后是Ethernet帧的目的地址字段。前导码与帧前定界符主要是保证接收同步,这8B接收后不需要保留,也不记入帧头长度中。(2)目的地址和源地址目的地址(DA)与法制地址(SA)分别表示帧的接收结点地址与发送结点的硬件地址。在Ethernet帧中,目的地址和法制地址字段长度可以是2B或6B。目前的Ethernet都使用6B(即48位)长度的地址。Ethernet帧的目的地址可以是单播地址(unicastaddress)、多播地址(multicastaddress)与广播地址(broadcastaddress),目的地址的第一位为0表示单播地址,为1表示多播地址,目的地址为全1表示广播地址。(3)长度字段802.3标准中的帧用2B定义数据字段包含的字节数。协议规定,帧数据的最小长度为46B,最大长度为1500B。设置最小帧长度的目的是使每个接收结点能够有足够的时间检测到冲突。(4)数据字段帧数据字段的最小长度为46B。如果帧的LLC数据少于46B,则应将数据字段填充至46B。填充字符是任意的,不计入长度字段值中。(5)检验字段帧校验字段(FCS)采用32位的CRC校验。校验的范围包括目的地址字段、源地址字段、长度字段、LLC数据字段。此处,为了简便起见,采用8位的CRC校验。CRC校验的生成多项式为:G(x)=x8+x2+x+1某些帧结构中还会包括帧类型字段,用来识别些帖所承载的数据的类型。当一个帧到达指定的计算机时,操作系统根据帧类型决定用哪个协议软件模块对它4进行处理。自识别帧的主要优点是,可以在同一物理网络中使用多个协议而互不干扰。2.CRC校验分析我们已经知道了差错控制在通信中的重要意义,以及简单的差错校验码计算过程。在这里我们进一步来了解循环冗余编码(CRC)的编码方式。它是一种重要的线性分组码、编码和解码方法,具有简单、检错和纠错能力强等特点,在通信领域广泛的用于实现差错控制。实际上,除数据通信外,CRC在很多领域也是大有用武之地的。利用CRC进行检错的过程可简单描述如下:在发送端根据要传送的k位二进制码序列,以一定的规则产生一个校验用的r位监督码(CRC码),附在原始信息的后边,构成一个新的二进制码序列(共k+r位),然后发送出去。在接收端,根据信息码和CRC码之间所遵循的规则进行检验,以确定传送中是否出错。这个规则在差错控制理论中称为“生成多项式”。(1)CRC编码的代数学原理在代数编码理论中,将一个码组表示为一个多项式,码组中的各码元作为多项式的系数。例如,1100101表示为1·x6+1·x5+0·x4+0·x3+1·x2+0·x+1,即x6+x5+x2+1。设编码前的原始信息多项式为P(x),P(x)的最高幂次加1等于k;生成多项式为G(x),G(x)的最高幂次等于r;CRC多项式为R(x);编码后的带CRC的信息多项式为T(x)。发送编码的方法是:将P(x)乘以x^r(即对应的二进制码序列左移r位),再除以G(x),得余式即为R(x)。用公式可以表示为T(x)=xrP(x)+R(x)接收方解码的方法是:将T(x)除以G(x),如果余数为0,则说明传输中无错误发生,否则说明传输有误。举例来说,设信息码为1100,生成多项式为1011,即P(x)=x³+x²,G(x)=x³+x+1,则可以用以下方法计算CRC。5xrP(x)x3(x3+x2)x6+x5x--------=----------=--------=(x3+x2+x)+--------G(x)x3+x+1x3+x+1x3+x+1即R(x)=x。注意到G(x)最高幂次r=3,得出CRC为010。如果用竖式除法,计算过程为:11101011/1100000(1100左移3位)1011111010111010101100100000010因此,T(x)=(x6+x5)+(x)=x6+x5+x,即1100000+010=1100010。如果传输无误,则T(x)x6+x5+xG(x)x³+x+1无余式。看一下上面的竖式除法,如果被除数是1100010,显然在商第3个1时,就能除尽。上述推算过程有助于我们理解CRC的概念。但如果直接编程来实现上面的算法,不仅繁琐,而且效率也不高。实际上在工程中不会直接这样去计算和验证CRC。表一标准的CRC名称生成多项式简记式*应用举例CRC-4x4+x+1ITUG.704CRC-12x12+x11+x3+x+1CRC-16x16+x12+x2+11005IBMSDLCCRC-ITU**x16+x12+x5+11021ISOHDLC,ITUX.25,V.34/V.41/V.42,PPP-FCSx³+²+x6CRC-32x32+x26+x23+...+x2+x+104C11DB7ZIP,RAR,IEEE802LAN/FDDI,IEEE1394,PPP-FCSCRC-32cx32+x28+x27+...+x8+x6+11EDC6F41SCTP该表中列出了一些标准CRC资料。①生成多项式的最高幂次项系数是固定的1,故在简记式中,将最高的1统一去掉了,如04C11DB7实际上是104C11DB7。②前称CRC-CCITT。ITU的前身是CCITT。(2)CRC的硬件电路实现图2给出了CRC运算通用电路的方框图。g1g2gn-2gnLSBMSBb0b1b2bn-2bn-1图二CRC运算通用电路方框图CRC计算生成多项式G(x)通常用n次多项式定义:G(x)=Xn+gn-1Xn-1+…giXi+…+g2X2+g1X+1,其中gi为0或1,i=1,2,…,n-1。通常CRC计算可以用有n个存储器级的移位寄存器实现,如图二所示。如果多项式的相应项的系数为1,那么相应的存储器级输入端的模2加法器是有分支的。根据应用的不同,在系统开始工作前将所有的移位寄存器全部置“0”或“1”。在图二中输入端送入的是原始数据序列,移位寄存器各级的输出b0、b1、…、bn-2、bn-1便是CRC码字。其中b0和bn-1分别代表最低有效位(LSB)和最高有效位(MSB)。(3)CRC的基本实现以CRC-8(X8+X2+X1+1)为例(如图三所示),它由多个移位寄存器和加法器组成。编码、解码前将个寄存器初始化为0,输入位作为最右边异或操作的输入之一。+++++++++数据输入7三个寄存器上的移位操作同时进行,均为左移一位,左边寄存器的最左一位作为三个异或操作的输入之一。每次移位时,最右边的寄存器内容作为中间异或操作的输入之一,中间的寄存器的内容

1 / 17
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功