欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

    计算机网络课程设计报告 CSMACD协议仿真.doc

    • 资源ID:2401483       资源大小:139.50KB        全文页数:12页
    • 资源格式: DOC        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    计算机网络课程设计报告 CSMACD协议仿真.doc

    计算机网络课程设计实验报告- CSMA/CD协议仿真学院:计算机科学与通信工程 一、CSMA/CD协议工作原理(查资料)及性能分析(指标与影响因素)   CSMA/CD是carrier sense multiple access/collision detected 的缩写,可译为“载波侦察听多路访问/冲突检测”,或“带有冲突检测的载波侦听多路访问”。所谓载波侦听(carrier sense),意思是网络上各个工作站在发送数据前都要总线上有没有数据传输。若干数据传输 (称总线为忙),则不发送数据;若无数据传输(称总线为空),立即发送准备好的数据。所谓多路访问(multiple access)意思是网络上所有工作站收发数据共同使用同一条总线,且发送数据是广播式的。所谓冲突(collision),意思是,若网上有两个或两个以上工作站同时发送数据,在总线上就会产生信号的混合,哪个工作站都同时发送数据,在总线上就会产生信号的混合,哪个工作站都辨别不出真正的数据是什么。这种情况称数据冲突又称碰撞。为了减少冲突发生后又的影响。工作站在发送数据过程中还要不停地检测自己发送的数据,有没有在传输过程中与其它工作站的数据发生冲突,这就是冲突检测(collision detected)。  CSMA/CD媒体访问控制方法的工作原理,可以概括如下: 先听后说,边听边说;       一旦冲突,立即停说;       等待时机,然后再说;  注:“听”,即监听、检测之意;“说”,即发送数据之意。  上面几句话意思是在发送数据前,先监听总线是否空闲。若总线忙,则不发送。若总线空闲,则把准备好的数据发送到总线上。在发送数据的过程中,工作站边发送检测总线,是否自己发送的数据有冲突。若无冲突则继续发送直到发完全部数据;若有冲突,则立即停止发送数据,但是要发送一个加强冲突的JAM信号,以便使网络上所有工作站都知道网上发生了冲突,然后,等待一个预定的随机时间,且在总线为空闲时,再重新发送未发完的数据。   CSMA/CD控制方式的优点是:原理比较简单,技术上易实现,网络中各工作站处于平等地位 ,不需集中控制,不提供优先级控制。但在网络负载增大时,发送时间增长,发送效率急剧下降。性能指标:信道利用率、吞吐量、介质利用率CSMACD的主要影响因素:传播时延、工作站数。CSMACD对站点个数不是很敏感,对实际的输入负载比较敏感。CSMACD对传播时延a比较敏感。CSMACD冲突不可避免。CSMACD的介质利用率随a的上升下降较快。CSMACD适合通信量不大,交互频繁的场合对于CSMACD帧越长,吞吐量越太,要求帧具有最小长度,当有许多短消息时,带宽浪费严重。CSMACD在轻负载时提供最短延迟,但对重负载敏感。主要参数:时间片 512比特时间 帧问间隔 96微秒 尝试极限16 退避极限 10 人为干扰长 32比特 最大帧长 1518字节 最小帧长 512字节 地址字段长 48比特 二、CSMA/CD协议基本工作流程 1.以太帧的发送流程1) 载波侦听过程。结点在发送一个帧前,必须侦听总线是否空闲。由于以太的数据采用曼彻斯特编码方式,所以可以通过判断总线电平是否跳变来确定总线是否空闲。若总线空闲,就可启动发送,否则继续侦听。2) 冲突检测。在数据发送过程中,可能会产生冲突。所以在发送数据的过程中,也应该进行冲突检测,只要发现冲突就应该停止发送数据。3) 随机延迟后重发。在检测到冲突、停止发送后,结点进行随机延迟后重发。若重发16次后还没成功,则宣告发送失败,取消该帧的发送。随机延迟的计算方法一般采用截止二进制指数后退算法。该算法可表示为:T=2*R*a。其中T为结点重新发送需要的后退延迟时间,a为冲突窗口值,R为随机数,从0到2k1中取值,k的取值为min(n,10),n为该帧已被发送的次数,下图为以太帧的发送流程。发送帧装配帧总线忙?启动发送冲突?发送完成?冲突加强冲突次数加1冲突多于16?发送失败败计算后退延迟等待后退延迟时间发送成功NNNN2.以太帧接收流程帧接收流程大致可以分为以下三个步骤:1) 检查是否发生冲突,若发生冲突,则丢弃该帧,若没有冲突,进入下一步。2) 检查该帧的目的地址看是否可以接收该帧,若可以接收,则进入下一步。3) 检查CRC校验和LLC数据长度。若都正确,接收该帧,否则丢弃。三、分析、理解所给的仿真程序(对照流程图说明是如何仿真的、每个sleep函数的作用)#include "stdafx.h"#include "csmacd.h"#include <cstdio>#include <iostream>#include <cmath>#include <windows.h>#ifdef _DEBUG #define new1 DEBUG_NEW #undef THIS_FILE HIS_FILE=_FILE_; #endif /static char T CWinThread *thread1,*thread2; /定义变量 DWORD ID1,ID2,Bus=0; /初始化共享 UINT aThread(LPVOID pParam); /线程a,代表主机a UINT bThread(LPVOID pParam); /线程b,代表主机b using namespace std; int _tmain(int argc,TCHAR* argv,TCHAR*envp) int nRetCode=0; if(!AfxWinInit(:GetModuleHandle(NULL),NULL, :GetCommandLine(),0) cout<<_T("Fata1 Error:MFC initialization failed")<< endl; nRetCode=1; else thread1=AfxBeginThread(aThread,NULL); /启动线程a ID1=thread1->m_nThreadID; /获取线程ID号 thread2=AfxBeginThread(bThread,NULL); /启动线程b ID2=thread2->m_nThreadID; /获取线程ID号 getchar(); return nRetCode; UINT aThread(LPVOID pParam) /线程a(主机a) int i=0; /发送成功次数 int CollisionCounter=16; /冲突计数器初始值为16 double Collisionwindow=0.05; /冲突窗口值取0.05 int randNum=rand()%3; /随机数 可用Srand函数改变随机函数的种子,改善随机性Loop:if (Bus=0) /总线空闲 Bus=Bus|ID1; /模拟发包 Sleep(12); / 单位是毫秒,分析:本实验模拟模a发送时延为12ms试验时可以更改时延观察不同发送时延对碰撞的影响。试验延if(Bus=ID1) /无冲突,由发送方负责检测 printf("%d Send Successnn",ID1); /发送成功 Bus=0; /内存清零 CollisionCounter=16; /复原冲如计数器 Sleep(rand()%10); 分析: 本次试验选用随机的帧长度相当于重新配置,两个线程同时进行监听。 / 模拟帧间隙i+; printf("主机a发送成功次数=%dnn",i); if(i<10) goto Loop; /发送次数不够10次,开始下一次发送 else printf("%d Send Collisionnn",ID1); /发生冲突 Bus=0; CollisionCounter-; /冲突计数器减1 if(CollisionCounter>0) Sleep(randNum*(int)pow(2.0,(CollisionCounter>10)?10:CollisionCounter)*Collisionwindow); 分析:使用截至二进制退避算法,在发生碰撞时,等待随机时间,进行监听和发送。goto Loop; /下一次尝试发送 else printf("%ld Send Failurenn",ID1);/重发次数超过16次,宣布发送失败 else /总线忙 goto Loop; /继续载波侦听 return 0; UINT bThread(LPVOID pParam)/线程b int j=0; /发送成功次数 int CollisionCounter=16;/冲突计数器初始值为16 double CollisionWindow=0.05;/为争用期(51.2us),以时间为单位的冲突窗口 int randNum=rand()%3;/随机数 Loop: if(Bus=0)/总线空闲 Sleep(2); / 可用随机函数模拟其他用户随机接入。分析: b检测到总线空闲时,延时2ms进行发送。 Bus=Bus|ID2;/模拟发包 Sleep(3); 发送时延为3ms如果将b发现空闲时延为0发送,而且发送时延相同,即a,b线程完全相同,会出现两线程交替发送,不会出现碰撞,结果见下面分析。 if(Bus=ID2)/无冲突 printf("%d Send Successnn",ID2); /发送成功 Bus=0; /总线清零 CollisionCounter=16; /复原冲突计数器 Sleep(rand()%10); j+; printf("主机b发送成功次数=%dnn",j); if(j!=10) /不够10次开始下一次发送 goto Loop ; else printf("%d Send Collisionnn",ID2); Bus=0; CollisionCounter-; /冲突计数器减1 if(CollisionCounter>0) /随机延迟重发,延迟算法用截止二进制指数后退算法 Sleep(randNum*(int)pow(2.0,(CollisionCounter>10)?10:CollisionCounter)*CollisionWindow); 等待随机时间截止二进制指数后退算法goto Loop; else printf("%d Send Failurenn",ID2); else /总线忙 goto Loop; /继续装载波侦听 return 0; 四、运行结果分析(改变sleep函数参数大小、抓图说明结果)源程序运行结果:由图可知,线程a和b发送数据时都有碰撞产生,经过二进制退避算法,随着时间的增加,碰撞的次数逐渐减少,后面没有冲突。改变sleep()函数参量的值,理想情况下,传输时延为零时(即sleep(0)),结果如下图所示:由图可知,没有传输时延情况下,还是有发送碰撞产生,主要原因是线程b程序中的第一个sleep()语句需要运行时间,后面数据全部发送成功还是因为运行了退避二进制算法,当去掉线程b的第一个sleep()时,即两个线程相等时,运行结果如下:由上图可知,数据发送过程中没有冲突。源程序的帧间隙是程序随即产生的(Sleep(rand()%10)),现将间隙时间改为0,观察运行结果如下图所示:当两个线程相同时,帧间隙为0的情况下,主机a连续发送三次数据后,主机b抢到信道,连续发送十次数据,发送完毕,接着a发送剩余的七次数据。这样不能体现发送的公平性。所以应该设置帧间隙。下面改变帧间隙,a和b帧间隙相同时(同时为5),运行结果如下:由图可知,两个线程相同,且帧间隙相同的情况下,发送数据没有碰撞,且a,b交替发送数据,一直到发送结束。同样道理,当两个线程不同时(b的反应时间为2 ms),依然会发生碰撞。运行二进制退避算法后,a,b继续交替发送数据。当两个线程相同,帧间隙不同时(a的帧间隙为2 ms ,b的帧间隙为20 ms 时),结果如图通过反复更改a,b帧间隙的值,当b帧间隙为a的帧间隙10倍时,出现上图结果,没有出现轮流发送,也没有出现碰撞(两线程相同)。当两线程帧间隙相差较小时,上述结果体现不明显。五、协议的改进(如增加用户数后采用某种监听和发送策略)对二进制退避算法进行改进,改进后的算法如下:非坚持的CSMA:线路忙,等待一段时间,再侦听;不忙时,立即发送;减少冲突,信道利用率降低:1坚持的CSMA:线路忙,继续侦听;不忙时,立即发送;提高信道利用率,增大冲突:p坚持的CSMA:线路忙,继续侦听;不忙时,根据p概率进行发送,另外的1-p概率为继续侦听(p是一个指定概率值);有效平衡,但复杂:六:心得体会每次做课程设计都是一个学习和总结的过程,在这次课程设计中发现对于书本上的知识掌握的还是不牢固,CSMA/CD协议老师在上课时讲的很详细,在课程设计中感觉自己只知道个大概。尽管老师已经该我们程序代码,把困难程度已经降到最低程度了,但是在做的过程中还是出现了很多问题,比如a,b在发送过程中改变sleep()的值发送是否是交替进行的,是否会发生碰撞以及操作平台的调试等等问题。最后在老师和同学的帮助下都得以解决,在此真心感谢老师和同学的无私帮助。这次课程设计不仅重新检测了一下自己对课程的掌握理解程度,而且培养了自己如何利用身边的资源解决自己的问题的能力,提升了和别人在学术方面的交流和沟通能力。课程设计是我们专业课程只是综合应用的实践训练,是我们迈向社会、从事职业工作前一个必不可少的过程。“千里之行,始于足下”,通过课程设计,我深深的体会到这句千古名言的真正含义。今天认真的进行课程设计,踏实地迈开这一步,就是为明天能够稳健的在社会大潮中奔跑打下基础。由于本人目前能力有限,难免会出现这样那样的错误,还望老师批评指正。

    注意事项

    本文(计算机网络课程设计报告 CSMACD协议仿真.doc)为本站会员(文库蛋蛋多)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开