Etherent帧的封装和发送过程_第1页
Etherent帧的封装和发送过程_第2页
Etherent帧的封装和发送过程_第3页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、计算机网络课程设计实验一帧封装实验目的:?编写程序,根据给出的原始数据,组装一个IEEE 802.3格式的帧(题目)默认的输入文件为二进制原始数据(文件名分别为inputl和input2)。?要求程序为命令行程序。比如,可执行文件名为framer.exe,则命令行形式如下:En cap Framer in putfile outputfile,其中,i nputfile 为原始数据文件, outputfile为输出结果。? 输出:对应input1和input2得结果分别为output1和output2。试验要求:?编写程序,根据给出的原始数据,组装一个IEEE 802.3格式的帧(题目)默认的

2、输入文件为二进制原始数据(文件名分别为input1和input2)。?要求程序为命令行程序。比如,可执行文件名为framer.exe,则命令行形式如下:En cap Framer in putfile outputfile,其中,i nputfile 为原始数据文件, outputfile为输出结果。输出:对应input1和input2得结果分别为output1和output2实验设计相关知识:帧:来源于串行线路上的通信。其中,发送者在发送数据的前后各添加特殊 的字符,使它们成为一个帧。Ethernet从某种程度上可以被看作是机器之间的 数据链路层连接。按802.3标准的帧结构如下表所示(80

3、2.3标准的Ethernet帧结构由7部 分组成)802.3标准的帧结构前导码帧前定界符目的地址源地址长度字段数据字段校验字段7B1B(2/6B)(2/6B)(2B)(长度可变)(4B)其中,帧数据字段的最小长度为46B。如果帧的LLC数据少于46B,则应将 数据字段填充至46B。填充字符是任意的,不计入长度字段值中。在校验字段中,使用的是CRC校验。校验的围包括目的地址字段、 源地址字 段、长度字段、LLC数据字段。循环冗余编码(CRC是种重要的线性分组码、编码和解码方法,具有简单、检错和纠错能力强等特点,在通信领域广泛地用于实现差错控制。CR(校验码的检错能力很强,不仅能检查出离散错误,还

4、能检查出突发错误。利用CRCt行检错的过程可简单描述如下:在发送端根据要传送的k位二进 制码序列,以一定的规则产生一个校验用的 r位监督码(CRC码),附在原始信息 的后边,构成一个新的二进制码序列(共k+r位),然后发送出去。在接收端,根 据信息码和CRC码之间所遵循的规则进行检验,以确定传送中是否出错。这个 规则在差错控制理论中称为“生成多项式”。CRC的基本实现前导码帧前定界符目的地址源地址长度字 段数据字段校验字段7B1B(2/6B)(2/6B)(2B)(长度可变)(4B)循环冗余校验码的特点:(1)CRC校验码可检测出所有单个错误。(2)CRC校验码可检测出所有奇数位错误。(3)CR

5、C校验码可检测出所有双位的错误(4)CRC校验码可检测出所有小于、等于校验位长度的突发错误。(5)CR(校验码可以1-(1/2)k-1的概率检测出长度为(K+1)位的突发错误实验分析:?填充帧头部字段要完成一次帧封装的过程,首先要完成的就是帧头部的装入,这一过程只 要将签到码、定界符、目的地址、源地址、长度字段的相应数值按顺序写入就可 以了。其中,长度字段的值即为要发送的数据的实际长度。?填充数据字段在填充数据字段的过程中要注意的主要问题是数据字段的长度。802.3标准中规定了帧数据字段的最小长度为 46B,最大长度为1500B。如果数据不足46B, 则需要通过填充0来补足;若数据长度超过15

6、00B,则的大奖超过部分封装入下 一个帧进行发送。? CRC校验帧封装的最后一步就是对数据进行校验,并将校验结果记入帧校验字 段。程序流程图:CRC计算流程图:程序源代码 :#include#include#includevoid main(int argc,char*argv)/ 如果输入命令行不正确,则输出提示后退出。if(argc!=3)coutendl 请按以下格式输入: EncapFrame inputfile outputfileendl;/ 输出符 号,程序的结束符exit(0);/ 打开指定的输出文件,以二进制方式打开并可读可写,如文件存在,则清除其容。fstream file

7、(argv2,ios:out|ios:in|ios:binary|ios:trunc,0); / 打开或创建一 个一个供写入的文件,打开供读取的文件for(int i=0;i8);file.put(char(length&0xff);/ file.write(data,length);/将文件长度值按照逆序写入到输出文件的长度字段中。将 data 容写入到输出文件中。/ 如果输入文件长度不足B,则用补足B。if(length46)for(int j=length;j46;j+) file.put(char(0x00);file.put(char(0x00);/将数据字段后添加个file.see

8、kg(8,ios:beg);/ unsigned char ch;/ch将读指针指向目的地址字段,从此处开始用来保存读入的字符。CRC计算unsigned char crc=char(0x00);/余数初始值为。while(1)进行CRC计算file.get(ch);if(ch=0xff)/ 判断是否到了文件结尾,如果是,则退出循环。 break;for(i=0;i8;i+)/对入读入的字符的位分别处理。if(0x80=(crc&(0x80)/当前余数最高位为,需要进行除法运算。crc=(crc7);/左移位,最低位补。将输入数据相应的值递补到余数末位。crc=crcA(0x07);进行除法运

9、算,即与除数的低位相异或。else/ 当前余数的最高位为,不需要进行除法运算。crc=(crc7);/将输入数据相应位的值递补到余数末位。ch=ch1;/ 读到的字符左移位,使数据下一位作为输入位。file.clear();/文件清理file.seekp(-1,ios:end);/将写指针移到输出文件的最后。file.put(crc);/ 写入 crc 码。关闭输入文件和输出文件。file.close(); in file.close();/ coutendl数据帧文件argv2圭寸装完成endl; 运行结果:运行结果如下所示:执行EncapFrame.exe文件的结果如下所示:模拟 Ethe

10、rnet 帧的发送过程题目:编写程序模拟 Ethernet 结点的数据发送流程 设计要求:(1)用两个线程 a,b 来模拟 Ethernet 上的两台主机。(2)用一个双字类型变量 Bus 来模拟总线(将其初始化为“ /0”,并且总线等于 “/0”时表示总线空闲)。(3)两个子线程向总线发送自己的数据。数据用该线程的线程信号进行模拟, 发送数据用线程号和Bus的“或”操作进行模拟(即Bus=Bus|ID, ID为该线程的线 程号)。( 4)每台主机须向总线成功发送 10 次数据,如果其中某次数据发送失败,则该 线程结束。(5)发送流程须遵循 CSMA/CD 。随机延迟算法中的冲突窗口取 0.0

11、05。在数据 发送成功(即Bus=ID)后,报告“ ID send succesS,产生冲突(即Bus! =ID)后, 报告“ID send collision”,发送失败(即冲突计数器值为 0)后报告“ ID send failure, 随着主机发送成功次数的增加, 报告其已发送成功的次数, 如“主机 A 发送成功次数 =3”。三、可行性分析1. 技术可行性 技术可行性分析包括:风险分析、资源分析和技术分析。风险分析的任务是,在给定的约束条件下,判断能否设计并实现系统所需功能和性能。资源分析 的任务是,论证是否具有系统开发所需的各类人员(管理人员和各类专业技术人 员)、软件、硬件资源和工作环

12、境等。技术分析的任务是,论证当前的科学技术 是否支持系统开发的全过程。 其中最主要的是分析技术条件是否能顺利完成开发 工作,硬、软件能否满足开发者的需要等。2. 功能分析基本功能1. 在一台计算机上实现 ,用多个程序或线程来模拟多个计算机2. 使用一个共享数据区来模拟总线3. 模拟实现载波监听的过程4. 模拟实现发生冲突的过程和冲突的处理机制四 . Ethernet 帧的发送与接收流程1 Ethernet 帧的发送流程1)载波侦听过程。Ethernet中每个结点利用总线发送数据,总线是每个结点共享 的公共传输介质。所以结点在发送一个帧前,必须侦听总线是否空闲。由于 Ethernet 的数据采用

13、曼彻斯特编码方式, 所以可以通过判断总线电平是否跳变来确定总线是否 空闲。若总线空闲,就可以启动发送,否则继续侦听。2)冲突检测。在数据发送过程中,可能会产生冲突(冲突是指总线上同时出现 两个或两个以上的发送信号, 他们叠加后的信号波形与任何发送结点的输出波形都不 相同)。因为可能有多个主机都在侦听总线,当它们侦听到总线空闲时,就会往总线 上发送数据。所以在发送数据的过程中,也应该进行冲突检测,只要发现冲突就应该 立即停止发送数据。3)随即延迟后重发。在检测到冲突、停止发送后,结点进行随机延迟后重发。 若发 16次后还没成功,则宣告发送失败,取消该帧的发送。随机延迟的算法一般采 用截断的二进制

14、指数退避算法。 当出现线路冲突时, 如果冲突的各站点都采用同样的 退避间隔时间,则很容易产生二次、三次的碰撞。因此,要求各个站点的退避间隔时 间具有差异性。这要求通过退避算法来实现。当一个站点发现线路忙时,要等待一个延时时间M,然后再进行侦听工作。延时时间 M由以下算法决定:M=2k*R*a。其中 a为冲突窗口值(冲突窗口为总线最大长度和电磁波在介质中传播速度比值的 2倍), R为随机数,k的取值为k=min(n,16) ,n为该帧已被发送的次数。图1给出了 Ethernet 帧的发送流程。2 Ethernet帧的接收流程帧的接收流程大致可以分为以下三个步骤:1 )检查是否发生冲突,若发生冲突

15、,则丢弃该帧;若没有冲突,进入下一步。2)检查该帧的目的地址看是否可以接收该帧,若可以接收,则进入下一步。3)检查CRC检验和LLC数据长度。若都正确,接受该帧,否则丢弃。图1 Ethernet帧的发送流程图2主程序流程图五.详细设计1. 设计中的重点及难点1)模拟冲突过程,在这个程序中不要使用任何线程同步机制2)若程序中不能模拟出冲突,可以在某些地方加入延时。2. 核心代码#i nclude #in elude #in elude HANDLE hTreadl, hTread2; / 线程句柄DWORD dwThreadldl, dwThreadld2; / 线程 ID 号DWORD Bus

16、 = 0;/总线DWORD WINAPI ThreadProcA ( LPVOID IpParam ) int CollisionCounter = 11;/ 冲突计数器初始值为 11double collisionWindow = 0.005;/ 冲突窗口值取 0.005int randNum = rand()%3;/ 随机数Loop: if (Bus=0)/ 总线空闲Bus = Bus|dwThreadId1;/ 模拟发送包Sleep (12);if (Bus = dwThreadId1) / 数据发送成功printf ( %d Send Successnn, dwThreadId1 );

17、/ 发送成功Bus = 0;/ 存清零CollisionCounter = 11;/ 复原冲突计数器Sleep (rand()%10);/ 随机延时i+;printf ( 主机a发送成功次数= %dnn, i);if (i0 )/ 随机延迟重发,延迟算法用截止二进制指数后退算法Sleep(unsigned long)(randNum *(int)pow(2,(CollisionCounter10)?10:CollisionCounter)collisionWindow);goto Loop;elseprintf ( %ld Send Failurenn, dwThreadId1 );/ 重 发

18、次数超过 16 次,宣布发送失败else/ 总线忙goto Loop;/ 继续载波侦听return 0;DWORD WINAPI ThreadProcB ( LPVOID IpParam )/ 返回 DW0RD(3位数据)的 API 函数int j = 0;int CoIIisionCounter = 11;doubIe coIIisionWindow = 0.005;int randNum = rand()%3;Loop: if (Bus=0)SIeep (2);Bus = Bus|dwThreadId2;SIeep (3);if (Bus = dwThreadId2)/ 数据发送成功printf ( %d Send Successnn, dwThreadId2 );Bus = 0;CollisionCounter = 11;Sleep (rand()%10);j+;printf ( 主机b发送成功次数= %dnn, j);if (j0 )Sleep(unsignedlong)(randNum*(int)pow(2,(CollisionCounter10)?10:CollisionCounter)*collisionWindow);goto Loop;elseprintf ( %ld Send Failurenn, dwThre

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论