版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1.引言 局域网技术发展十分迅速,目前已在企业、机关、学习的信息管理与信息服务领域中得到了广泛的应用。在早期,人们将局域网归为一种数据通信网络。随着局域网体系结构和协议标准研究的进展、操作系统的发展以及光纤技术的引入,局域网技术得到了快速发展。目前Ethernet是应用最广泛的局域网。因此,学习Ethernet技术对深入掌握局域网知识是非常重要的,本课程设计的目的是模拟Ethernet帧的发送过程,熟悉Ethernet帧的数据发送流程,即CSMA/CD工作流程。2.设计课题2.1课程设计题目模拟Ethernet帧的发送过程2.2课程设计要求 编写程序模拟Ethernet节点的数据发送流程。具体
2、要求: 1)用两个线程a和b来模拟Ethernet上的两台主机。 2)用一个双字类型变量Bus来模拟总线(将其初始化为“0”,并且总线等于“0”时表示总线空闲)。 3)两个子线程向总线发送自己的数据。数据用该线程的线程号进行模拟,发送数据用线程号和Bus的“或”操作进行模拟(即BusBus|ID,ID为该线程的线程号)。 4)每台主机需向总线上成功发送10次数据,如果其中某次数据发送失败,则该线程结束。 5)发送流程必须遵循CSMA/CD。随即延迟算法中的冲突窗口取0.005。在数据发送成功(即BusID)后,报告“ID send success”,产生冲突(即Bus!ID)后报告“ID se
3、nd conllision”,发送失败(即冲突计数值为0)后报告“ID send failure”。随着主机发送成功次数增加,报告其已发送成功的次数,如“主机A发送成功数3”。3.系统概述3.1课程设计目的与意义帧是数据链路层的协议数据单元。理解帧的结构和发送过程对于理解网络协议的概念、协议执行过程以及网络问题处理的一般方法具有重要的意义。本课程设计的目的是模拟Ethernet帧的发送过程,熟悉Ethernet帧的数据发送流程,根据数据链路层的基本原理,通过模拟Ethernet帧的发送过程深入理解网络协议的基本概念与网络问题处理的一般方法。3.2课程设计思想由于题目要求用两个线程来模拟主机,因
4、此可以定义线程thread1和thread2来共享总线Bus。总线初值设置为Bus=0,表示总线为空闲,当线程准备发送数据时,首先侦听,也就是获取总线的状态。如果总线忙,就一直循环侦听,直到总线转为空闲;如果总线是闲状态,就表示现在可以发送数据。但还是可能发生以下情况:当线程A发现总线是空闲状态,就准备发送数据,在监听完毕到发送数据这个过程中,线程B也开始监听总线,并且也检测出总线是空闲状态,这是线程B也会占用总线而发送数据,这样就发生了碰撞Collision。遇到碰撞只能停止发送,然后用截断二进制指数退避算法来得到时延,时延过后继续侦听。3.3课程设计开发环境硬件环境:PC微机软件环境:Wi
5、ndow 7 Microsoft Visual C+ 6.04.概要设计4.1相关知识4.1.1 Ethernet帧的发送过程 载波侦听过程:Ethernet中每个结点利用总线发送数据,总线是每个结点共享的公共传输介质。所以结点在发送一个帧前,必须侦听总线是否空闲。由于Ethernet的数据采用曼彻斯特编码方式,所以可以通过判断总线电平是否跳变来确定总线是否空闲。若总线空闲,就可以启动发送,否则继续侦听。冲突检测:在数据发送过程中,可能会产生冲突(冲突是指总线上同时出现两个或两个以上的发送信号,它们叠加后的信号波形与任何发送结点输出的信号波形不相同。因为可能有多个主机都在侦听总线,当它们侦听到
6、总线空闲时,都会往总线上发送数据)。随机延迟后重发:在检测到冲突、停止发送后,结点进行随机延迟后重发。若重发16次后还不成功,则宣告发送失败,取消该帧的发送。随机延迟的计算方法一般采用截断二进制指数退避算法。当出现线路冲突时,如果冲突的各站点都采用同样的退避间隔时间,则很容易产生两次、三次的碰撞。因此,要求各个站点的退避间隔时间具有差异性,这可以通过二进制指数退避算法来实现。 4.1.2 Ethernet帧的接收流程帧接收流程大致可以分为以下三个步骤:1) 检查是否发生冲突,若发生冲突,则丢弃该帧;若没有冲突,进入下一步;2) 检查该帧的目的地址看是否可以接收该帧,若可以接收,则进入下一步;检
7、查CRC检验和LLC数据长度。若都正确,接收该帧,否则丢弃。4.1.3二进制指数退避算法在CSMA/CD协议中,一旦检测到冲突,为降低再冲突的概率,需要等待一个随机时间,然后再使用CSMA方法试图传输。为了保证这种退避维持稳定,采用了二进制指数退避算法的技术,其算法过程如下: 1. 将冲突发生后的时间划分为长度为2t的时隙;2. 发生第一次冲突后,各个站点等待0或1个时隙再开始重传; 3. 发生第二次冲突后,各个站点随机地选择等待0,1,2或3个时隙再开始重传; 4. 第i次冲突后,在0至2的i次方减一间随机地选择一个等待的时隙数,再开始重传;5. 10次冲突后,选择等待的时隙数固定在0至10
8、23(2的10次方减一)间; 6. 16次冲突后,发送失败,报告上层。 4.2 Ethernet帧的发送流程图 4.3程序算法描述1.创建两个线程A和B模拟两个主机;2.设置初始值,如成功次数,冲突计数器初始值,冲突窗口值等;3.监听总线,如果忙就跳转到10步;4.模拟发送包为总线状态和线程A的线程号的或运算的结果;5.检测是否有冲突,如果没有,就在前段屏幕上显示发送成功以及总共发送成功的次数;6.将冲突计数器复原为16,同时内存清零;7.如果有冲突,就显示有冲突;8.随机延迟重发,延迟算法用截断二进制指数退避算法;9.跳转到第3步; 10.总线忙,循环监听,跳转到第3步。5.详细设计5.1设
9、计分析5.1.1定义数据结构int i=0; /发送成功次数int CollisionCounter=16; /冲突计数器初始值为16double CollisionWindow=0.005; /冲突窗口值取值0.005int randNum=rand()%3; /随机数5.1.2主程序调用int main(int argc,char *argv,char *cnvp)int nRetCode=0;thread1=:AfxBeginThread(aThread,NULL); /启动线程aID1=thread1->m_nThreadID;thread2=:AfxBeginThread(bT
10、hread,NULL); /启动线程bID2=thread2->m_nThreadID;getch(); /主线程等待,按任意键退出程序return nRetCode;主程序流程图: 5.1.3无冲突模块if(Bus=ID1) /无冲突printf("%d Send Successnn",ID1); /发送成功Bus=0; /内存清零CollisionCounter=2; /复原冲突计算器Sleep(rand()%10); /随机延时i+;printf("主机a发送成功次数=%dnn",i);if(i>=10)break; /发送次数不够10
11、次,开始下一次发送5.1.4有冲突模块elseprintf("%d Send Collisionnn",ID2); /发生冲突CollisionCounter-; /冲突次数加1Bus=0; /冲突加强,停止发送数据,等待下面延时if(CollisionCounter>0)/随机延迟重发,延迟算法用截断的二进制指数退避算法Sleep(randNum*(int)pow(2,(CollisionCounter>10)?10:CollisionCounter)*CollisionWindow);continue; /下一次尝试发送elseprintf("%d
12、 Send Failurenn",ID2);return 0;5.1.5截断二进制指数退避算法if(CollisionCounter>0)/随机延迟重发,延迟算法用截断的二进制指数退避算法Sleep(randNum*(int)pow(2,(CollisionCounter>10)?10:CollisionCounter)*CollisionWindow);continue; /下一次尝试发送elseprintf("%d Send Failurenn",ID2);5.2运行5.2.1调试过程因程序调用了静态链接库中的函数,所以编译程序后需设置工程Micr
13、osoft基础类为使用MFC作为静态链接库,再执行.exe文件。5.2.2运行结果运行程序,得到以下结果:打开DOS界面,切换到y.exe目录下,执行y.exe得到以下结果:6.小结与体会 课程设计是培养学生综合运用所学知识,发现、提出、分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。随着科学技术发展的日新日异,当今计算机应用在生活中可以说得是无处不在,因此作为二十一世纪的大学来说掌握计算机开发技术是十分重要的。回顾起此次课程设计,我感慨颇多。它不仅巩固了我所学过的知识,而且让我学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结
14、合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能提高自己的实际动手能力和独立思考的能力。在该设计过程中我遇到了许多的问题,让我发现了自己的不足之处:对以前所学过的知识理解得不够深刻、掌握得不够牢固,实践经验的缺乏,理论联系实际的能力还急需提高。 经过一个星期对计算机网络课程设计的学习和上级实际操作,我熟悉了模拟Ethernet帧的发送过程及数据发送流程;更好的理解了冲突产生、发送失败原因及如何解决此类问题,学到了在课本上没有学到的知识和道理。在这个星期的学习实践中,有过成功的欣喜,也有过出现问题的焦虑,然而随着一个个问题的解决,我最终收获了成
15、就感。7.参考文献1 谢希仁编著,计算机网络(第五版),电子工业出版社,2008.11 吴功宜、胡晓英等,计算机网络课程设计,北京:机械工业出版社,2007.122 杨丰瑞、杨丰任,实用教程最新计算机网络,北京:中国铁道出版社,2007.73 胡晓英等,计算机网络课程设计,北京:机械工业出版社,2005.94 郭国强等著,计算机网络与Internet教程,北京:清华出版社,2006.118.源代码#include <cmath>#include <afxwin.h>#include <iostream>#include <conio.h>CWin
16、Thread *thread1,*thread2; /定义2个线程对象,分别代表a,bDWORD ID1,ID2,Bus=0; /2线程ID,总线标志UINT aThread(LPVOID pParam); /线程a,代表主机aUINT bThread(LPVOID pParam); /线程b,代表主机busing namespace std;int main(int argc,char *argv,char *cnvp)int nRetCode=0;thread1=:AfxBeginThread(aThread,NULL); /启动线程aID1=thread1->m_nThreadID
17、;thread2=:AfxBeginThread(bThread,NULL); /启动线程bID2=thread2->m_nThreadID;getch(); /主线程等待,按任意键退出程序return nRetCode;UINT aThread(LPVOID pParam)int i=0; /发送成功次数int CollisionCounter=16; /冲突计数器初始值为16double CollisionWindow=0.005; /冲突窗口值取值0.005int randNum=rand()%3; /随机数while(1)if(Bus=0) /总线空闲Bus=Bus|ID1; /
18、模拟发送包Sleep(12);if(Bus=ID1) /无冲突printf("%d Send Successnn",ID1); /发送成功Bus=0; /内存清零CollisionCounter=2; /复原冲突计算器Sleep(rand()%10); /随机延时i+;printf("主机a发送成功次数=%dnn",i);if(i>=10)break; /发送次数不够10次,开始下一次发送elseprintf("%d Send Collisionnn",ID1); /发生冲突CollisionCounter-; /冲突次数加1B
19、us=0; /冲突加强,停止发送数据,等待下面延时if(CollisionCounter>0) /随机延迟重发,延迟算法用截断的二进制指数退避算法Sleep(randNum*(int)pow(2,(CollisionCounter>10)?10:CollisionCounter)*CollisionWindow);continue; /下一次尝试发送elseprintf("%d Send Failurenn",ID1);return 0;UINT bThread(LPVOID pParam)int i=0; /发送成功次数int CollisionCounter=16; /冲突计数器初始值为16double CollisionWindow=0.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年个人从事消防劳动合作协议书版B版
- 房屋建筑修建设计合同(2024版)2篇
- 2024年国际销售代理合同样本版B版
- 2024年专利权质权设立协议
- 江南大学《读写(1)》2021-2022学年第一学期期末试卷
- 佳木斯大学《幼儿游戏与指导》2021-2022学年第一学期期末试卷
- 二零二四年度蔬菜农场与批发市场配送合同2篇
- 2024年国际贸易英文协议模板版B版
- 暨南大学《中外民族音乐赏析》2021-2022学年第一学期期末试卷
- 暨南大学《审计理论与方法》2021-2022学年第一学期期末试卷
- 2023年用电信息采集员技能考试复习题库(核心600题)
- 灭火器点检卡
- 广州国际创新城南岸起步区控制性详细规划
- GB/T 18910.61-2012液晶显示器件第6-1部分:液晶显示器件测试方法光电参数
- GA/T 1145-2014警用约束叉
- GA 1800.3-2021电力系统治安反恐防范要求第3部分:水力发电企业
- 2023年小学三年级成语知识竞赛题
- 2023-瑞幸咖啡vi手册
- 《文献阅读》课件
- 呼和浩特市玉泉区国土空间总体规划(2021-2035年)
- 【人教版】政治必修四:《百舸争流的思想》课件
评论
0/150
提交评论