模拟总线型以太网数据帧发送过程_第1页
模拟总线型以太网数据帧发送过程_第2页
模拟总线型以太网数据帧发送过程_第3页
模拟总线型以太网数据帧发送过程_第4页
模拟总线型以太网数据帧发送过程_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

1、题目:模拟总线型以太网数据帧发送过程姓名: 学号: 班号: 时间:2016/10/03计算机学院时间:目 录摘 要1 目的12 要求13相关知识14实现原理及流程图错误!未定义书签。5程序代码46运行结果与分析57参考文献15题目:模拟总线型以太网数据帧发送过程1、 目的 模拟总线型以太网数据帧发送过程,熟悉Ethernet的基本工作原理,特别是CSMA/CD介质访问控制方法。2、 要求在一台计算机上模拟总线-台网发送过程,总线上连接的计算机个数两个,支持CSMA/CA协议(二进制指数退避算法)已经实现了a计算机模拟发送过程,请完成b计算机模拟发送过程。3、 相关知识Ethernet的核心技术

2、是随机争用型介质访问方法,即带有冲突检测的载波监听多路访问(CSMA/CD)方法。1. Ethernet的帧的发送流程1) 载波监听过程。Ethernet中每个结点利用总线发送数据,总线是每个结点共享的公共传输介质,所以结点在发送一个帧前,必须侦听总线是否空闲。由于Ethernet的数据采用曼彻斯特编码方式,所以可以通过判断总线电平是否跳变来确定总线是否空闲。若总线空闲,就可启动发送,否则继续侦听。2) 冲突检测。在数据发送过程中,可能会产生冲突(冲突是指总线上同时出现两个或两个以上的发送信号,它们叠加后的信号与波形与任何发送结点输出的信号波形不相同。因为可能有多个主机都在侦听总线,当他们侦听

3、到总线空闲时,就会往总线上发送数据)。所以在发送数据的过程中,也应该进行冲突检测,只要发现冲突就应该停止发送数据。3) 随机延迟后重发。在检测到冲突,停止发送后,结点进行随机延迟后重发。若重发16次后还没成功,则宣告发送失败,取消该帧的发送。延迟计算的方法一般采用截止二进制指数后退算法.该算法可表示为:r=2k*R*a.其中r为结点重新发送需要后退的延迟时间,a为冲突窗口值(冲突窗口为总线最大长度和电磁波在介质中的传播速度比值的二倍),R为随机数,k的取值为k=min(n,10),n为该帧已被发送的次数。2. Ethernet帧接收流程帧接收流程大致可以分为以下三个步骤:1) 检查是否发生冲突

4、,若发生冲突,则丢弃该帧;若没有冲突,进入下一步2) 检查该帧的目的地址是否可以接收该帧,若可以接收,则进入下一步。3) 检查CRC校验和LLC数据长度。若都正确,接收该帧,否则丢弃。4、 实现原理及流程图实现原理重难点:1)模拟冲突的过程,在这个程序中不要使用任何线程同步机制 2)若程序不能模拟出冲突,可以在某些地方加入延时。核心代码:UINT aThread(LPVOID pParam) /初始化成功次数,冲突计数器,冲突窗口与随机数 int i=0; int CollisionCounter=16; double CollisionWindow=0.005; int randNum=ra

5、nd()%3;Loop: /总线空闲 if(Bus=0) /模拟发送Ethernet帧 Bus=Bus|ID1; Sleep(12); /发送过程无冲突 if(Bus=ID1) printf("%d Send Successn",ID1); Bus=0; CollisionCounter=16; Sleep(rand()%10); i+; printf("主机a发送成功次数= %dn",i); /发送次数不够3次,开始下一次发送 if(i<5) goto Loop; /发送过程有冲突 else printf("%d Send Collis

6、ionn",ID1); Bus=0; CollisionCounter-; if(CollisionCounter>0) /随机延迟重发,延迟算法用截止二进制指数后退算法 Sleep(randNum*(int)pow(2,(CollisionCounter>10)?10:CollisionCounter)*CollisionWindow); goto Loop; else printf("%ld Send Failuren",ID1); /总线忙 else goto Loop; return 0; 流程图5、程序代码(以附件形式,编程环境:visual

7、 c+6.0)见附件SendFrame文件夹 5、 运行结果与分析运行结果截图:在visual studio中建立支持MFC的win32 console application时,会自动生成与项目同名的cpp文件,因为对MFC编程不太了解,所以一开始我是在项目中再新建一个cpp文件添加上述代码,导致的结果是编译能够通过,但是运行的时候只是黑框,没有任何结果。 在vc+6.0中重新尝试,编译能够通过,但是链接的时候提示项目中定义了两个_main函数,尝试将代码复制进自动生成的与项目同名的cpp文件中,运行通过。 检索到的关于MFC编程的概述如下: MFC (Microsoft Foundatio

8、n Class Library)中的各种类结合起来构成了一个应用程序框架,它的目的就是让程序员在此基础上来建立Windows下的应用程序,这是一种相对SDK来说更为简单的方法。因为总体上,MFC框架定义了应用程序的轮廓,并提供了用户接口的标准实现方法,程序员所要做的就是通过预定义的接口把具体应用程序特有的东西填入这个轮廓。Microsoft Visual C+提供了相应的工具来完成这个工作:AppWizard可以用来生成初步的框架文件(代码和资源等);资源编辑器用于帮助直观地设计用户接口;ClassWizard用来协助添加代码到框架文件;最后,编译,则通过类库实现了应用程序特定的逻辑。如前所述,MFC实现了对应用程序概念的封装,把类、类的继承、动态约束、类的关系和相互作用等封装起来。这样封装的结果对程序员来说,是一套开发模板(或者说模式)。MFC提供了一个Windows应用程序开发模式,对程序的控制主要是由MFC框架完成的,而且MFC也完成了大部分的功能,预定义或实现了许多事件和消息处理,等等。框架或者由其本身处理事件,不依赖程序员的代码;或者调用程序员的代码来处理应用程序特定的事件。MFC是C+类库,

温馨提示

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

评论

0/150

提交评论