计算机网络课程设计(模拟Ethernet结点的数据发送流程).doc_第1页
计算机网络课程设计(模拟Ethernet结点的数据发送流程).doc_第2页
计算机网络课程设计(模拟Ethernet结点的数据发送流程).doc_第3页
计算机网络课程设计(模拟Ethernet结点的数据发送流程).doc_第4页
计算机网络课程设计(模拟Ethernet结点的数据发送流程).doc_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

计算机网络课程设计报告系 别: 信息科学与技术系 专业班级: 学生姓名: 指导教师: (课程设计时间:2009年6月22日2009年6月26日)前言局域网技术的发展非常迅速,在企业、机关、学校的信息管理与服务领域得到广泛的应用。在早期,人们将局域网归为一种数据通信网络。随着局域网体系结构和协议标准研究的进展、操作系统的发展以及光纤技术的引入,局域网技术得到了快速发展。目前,应用最广泛的局域网是总线型局域网,即以太网(Ethernet)。总线型局域网的核心技术是随机争用型介质访问控制方法,即带有冲突检测的载波侦听多路访问(CSMA/CD,Carrier Sense Multiple Access with Collision Detection)方法。CSMA/CD方法用来解决多个结点共享公用总线的问题。在Ethernet中,任何结点都没有可预约的发送时间,这种介质访问控制属于随机争用型方法。学习Ethernet技术对深入掌握局域网知识是非常重要的。本课程设计的目的是模拟Ethernet帧的发送过程,熟悉Ethernet帧的数据发送流程,即CSMA/CD工作流程。 目 录一、课程设计目的和意义4二、课程设计题目描述和要求4三、实验报告内容5(一)相关知识5(二)课程设计分析61.设计中的重点及难点62.核心代码63.程序流程7四、总结12一、课程设计目的和意义局域网技术发展十分迅速,目前已在企业、机关、学校的信息管理与信息服务领域中得到了广泛的应用。在早期,人们将局域网归为一种数据通信网络。随着局域网体系结构和协议标准研究的进展、操作系统的发展以及光纤技术的引入,局域网技术得到了快速发展。目前Ethernet是应用最广泛的局域网。因此,学习Ethernet技术对深入掌握局域网知识是非常重要的。本课程设计的目的是模拟Ethernet帧的发送过程,熟悉Ethernet帧的数据发送流程,即CSMA/CD工作流程。二、课程设计题目描述和要求题目:编写程序模拟Ethernet结点的数据发送流程设计要求:(1)用两个线程a,b来模拟Ethernet上的两台主机。(2)用一个双字类型变量Bus来模拟总线(将其初始化为“/0”,并且总线等于“/0”时表示总线空闲)。(3)两个子线程向总线发送自己的数据。数据用该线程的线程信号进行模拟,发送数据用线程号和Bus的“或”操作进行模拟(即Bus=Bus|ID,ID为该线程的线程号)。(4)每台主机须向总线成功发送10次数据,如果其中某次数据发送失败,则该线程结束。(5)发送流程须遵循CSMA/CD。随机延迟算法中的冲突窗口取0.005。在数据发送成功(即Bus=ID)后,报告“ID send success”,产生冲突(即Bus!=ID)后,报告“ID send collision”,发送失败(即冲突计数器值为0)后报告“ID send failure”。随着主机发送成功次数的增加,报告其已发送成功的次数,如“主机A发送成功次数=3”。 三、实验报告内容(一)相关知识Ethernet的核心技术是随机争用型介质访问方法,即带有冲突检测的载波侦听多路访问(CSMA/CD)方法。1. Ethernet帧的发送流程1)载波侦听过程。Ethernet中每个结点利用总线发送数据,总线是每个结点共享的公共传输介质。所以结点在发送一个帧前,必须侦听总线是否空闲。由于Ethernet的数据采用曼彻斯特编码方式,所以可以通过判断总线电平是否跳变来确定总线是否空闲。若总线空闲,就可以启动发送,否则继续侦听。2)冲突检测。在数据发送过程中,可能会产生冲突(冲突是指总线上同时出现两个或两个以上的发送信号,他们叠加后的信号波形与任何发送结点的输出波形都不相同)。因为可能有多个主机都在侦听总线,当它们侦听到总线空闲时,就会往总线上发送数据。所以在发送数据的过程中,也应该进行冲突检测,只要发现冲突就应该立即停止发送数据。3)随即延迟后重发。在检测到冲突、停止发送后,结点进行随机延迟后重发。若发16次后还没成功,则宣告发送失败,取消该帧的发送。随机延迟的算法一般采用截断的二进制指数退避算法。当出现线路冲突时,如果冲突的各站点都采用同样的退避间隔时间,则很容易产生二次、三次的碰撞。因此,要求各个站点的退避间隔时间具有差异性。这要求通过退避算法来实现。当一个站点发现线路忙时,要等待一个延时时间M,然后再进行侦听工作。延时时间M由以下算法决定:M=2k*R*a。其中a为冲突窗口值(冲突窗口为总线最大长度和电磁波在介质中传播速度比值的2倍),R为随机数,k的取值为k=min(n,16),n为该帧已被发送的次数。图1给出了Ethernet帧的发送流程。2 Ethernet帧的接收流程帧的接收流程大致可以分为以下三个步骤:1)检查是否发生冲突,若发生冲突,则丢弃该帧;若没有冲突,进入下一步。2)检查该帧的目的地址看是否可以接收该帧,若可以接收,则进入下一步。3)检查CRC检验和LLC数据长度。若都正确,接受该帧,否则丢弃。 图1 Ethernet帧的发送流程YNYY发送帧装配帧总线忙启动发送冲突?发送完成?发送成功冲突加强冲突次数加1等待后退延迟时间计算后退延迟发送失败冲突次数16?YNNN(二)课程设计分析1.设计中的重点及难点1)模拟冲突过程,在这个程序中不要使用任何线程同步机制。2)若程序中不能模拟出冲突,可以在某些地方加入延时。2.核心代码int i=0; /发送成功次数int CollisionCounter=16; /冲突计数器初始值为16double CollisionWindow=0.005; /冲突窗口值取值0.005int randNum=rand()%3; /随机数loop: if(Bus=0) /总线空闲 Bus=Bus|ID1; /模拟发送包 Sleep(12); if (Bus=ID1) /无冲突 printf(%d Send Successnn,ID1); /发送成功 Bus=0; /内存清零 CollisionCounter=16; /复原冲突计数器 Sleep(rand()%10); /随即延时 i+; printf(主机a发送成功次数=%dnn,i); if(i0) /随即延迟重发,延迟算法用截断的二进制指数退避算法 Sleep(randNum*(int)pow(2,(CollisionCounter10)?10: CollisionCounter)*CollisionWindow); goto loop; /下一次尝试发送 else printf(%d Send Failurenn, ID1 ); else /总线忙 goto loop; /继续载波侦听 return 0;3.程序流程图2 主程序流程图开始启动线程A启动线程B结束(三)完整程序/注意:编译时需设置工程属性(菜单中工程设置使用MFC作为静态链接库)#include cmath /#include afxwin.h /#include /#include /CWinThread * 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 * envp)int nRetCode = 0;thread1 = :AfxBeginThread(aThread, NULL); /启动线程aID1 = thread1-m_nThreadID;thread2 = :AfxBeginThread(bThread, NULL); /启动线程bID2 = thread2-m_nThreadID;getch(); /主线程等待,按任意键退出程序return nRetCode;UINT aThread(LPVOID pParam)int i=0; /发送成功次数int CollisionCounter=2; /冲突计数器初始值为16double CollisionWindow=0.000001; /冲突窗口值取值0.005int randNum=rand()%3; /随机数while(1)if(Bus=0) /总线空闲Bus=Bus|ID1; /模拟发送包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-; /冲突次数加1 Bus=0; /冲突加强 停止发送数据 等待下面延时if(CollisionCounter0) /随即延迟重发,延迟算法用截断的二进制指数退避算法Sleep(randNum*(int)pow(2,(CollisionCounter10)?10: CollisionCounter)*CollisionWindow); continue; /下一次尝试发送elseprintf(%d Send Failurenn,ID1); Return 0;UINT bThread(LPVOID pParam)int i=0; /发送成功次数int CollisionCounter=16; /冲突计数器初始值为16double CollisionWindow=0.005; /冲突窗口值取值0.005int randNum=rand()%3; /随机数while(1)if(Bus=0) /总线空闲 Bus=Bus|ID2; /模拟发送包Sleep(12); if (Bus=ID2) /无冲突Sleep(rand()%10); printf(%d Send Successnn,ID2); /发送成功 Bus=0; /内存清零 CollisionCounter=16; /复原冲突计数器 Sleep(rand()%10); /随即延时 i+; printf(主机b发送成功次数=%dnn,i); if(i=10) break;/发送次数不够10次,开始下一次发送 elseprintf(%d Send Collisionnn,ID2); /发生冲突 CollisionCounter-; /冲突次数加1 Bus=0; /冲突加强 停止发送数据 等待下面延时if(CollisionCounter0) /随即延迟重发,延迟算法用截断的二进制指数退避算法Sleep(randNum*(int)pow(2,(CollisionCounter10)?10: CollisionCounter)*CollisionWindow); continue; /下一次尝试发送elseprintf

温馨提示

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

评论

0/150

提交评论