版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、计算机网络课程设计实验报告- csma/cd协议仿真学院:计算机科学与通信工程班级:通信0801 学号: 姓名: 指导老师:周莲英 2011 年 01 月一、csma/cd协议工作原理(查资料)及性能分析(指标与影响因素) csma/cd是carrier sense multiple access/collision detected 的缩写,可译为“载波侦察听多路访问/冲突检测”,或“带有冲突检测的载波侦听多路访问”。所谓载波侦听(carrier sense),意思是网络上各个工作站在发送数据前都要总线上有没
2、有数据传输。若干数据传输 (称总线为忙),则不发送数据;若无数据传输(称总线为空),立即发送准备好的数据。所谓多路访问(multiple access)意思是网络上所有工作站收发数据共同使用同一条总线,且发送数据是广播式的。所谓冲突(collision),意思是,若网上有两个或两个以上工作站同时发送数据,在总线上就会产生信号的混合,哪个工作站都同时发送数据,在总线上就会产生信号的混合,哪个工作站都辨别不出真正的数据是什么。这种情况称数据冲突又称碰撞。为了减少冲突发生后又的影响。工作站在发送数据过程中还要不停地检测自己发送的数据,有没有在传输过程中与其它工作站的数据发生冲突,
3、这就是冲突检测(collision detected)。 csma/cd媒体访问控制方法的工作原理,可以概括如下: 先听后说,边听边说; 一旦冲突,立即停说; 等待时机,然后再说; 注:“听”,即监听、检测之意;“说”,即发送数据之意。 上面几句话意思是在发送数据前,先监听总线是否空闲。若总线忙,则不发送。若总线空闲,则把准备好的数据发送到总线上。在发送数据的过程中,工作站边发送检测总线
4、,是否自己发送的数据有冲突。若无冲突则继续发送直到发完全部数据;若有冲突,则立即停止发送数据,但是要发送一个加强冲突的jam信号,以便使网络上所有工作站都知道网上发生了冲突,然后,等待一个预定的随机时间,且在总线为空闲时,再重新发送未发完的数据。 csma/cd控制方式的优点是:原理比较简单,技术上易实现,网络中各工作站处于平等地位 ,不需集中控制,不提供优先级控制。但在网络负载增大时,发送时间增长,发送效率急剧下降。性能指标:信道利用率、吞吐量、介质利用率csmacd的主要影响因素:传播时延、工作站数。csmacd对站点个数不是很敏感,对实际的输入
5、负载比较敏感。csmacd对传播时延a比较敏感。csmacd冲突不可避免。csmacd的介质利用率随a的上升下降较快。csmacd适合通信量不大,交互频繁的场合对于csmacd帧越长,吞吐量越太,要求帧具有最小长度,当有许多短消息时,带宽浪费严重。csmacd在轻负载时提供最短延迟,但对重负载敏感。主要参数:时间片 512比特时间 帧问间隔 96微秒 尝试极限16 退避极限 10 人为干扰长 32比特 最大帧长 1518字节 最小帧长 512字节 地址字段长 48比特 二、csma/cd协议基本工作流程 1.以太帧的发送流程1) 载波侦听过程。结点在发送一个帧前,必须侦听总线是否空闲
6、。由于以太的数据采用曼彻斯特编码方式,所以可以通过判断总线电平是否跳变来确定总线是否空闲。若总线空闲,就可启动发送,否则继续侦听。2) 冲突检测。在数据发送过程中,可能会产生冲突。所以在发送数据的过程中,也应该进行冲突检测,只要发现冲突就应该停止发送数据。3) 随机延迟后重发。在检测到冲突、停止发送后,结点进行随机延迟后重发。若重发16次后还没成功,则宣告发送失败,取消该帧的发送。随机延迟的计算方法一般采用截止二进制指数后退算法。该算法可表示为:t=2*r*a。其中t为结点重新发送需要的后退延迟时间,a为冲突窗口值,r为随机数,从0到2k1中取值,k的取值为min(n,10),n为该帧已被发送
7、的次数,下图为以太帧的发送流程。发送帧装配帧总线忙?启动发送冲突?发送完成?冲突加强冲突次数加1冲突多于16?发送失败败计算后退延迟等待后退延迟时间发送成功nnnn2.以太帧接收流程帧接收流程大致可以分为以下三个步骤:1) 检查是否发生冲突,若发生冲突,则丢弃该帧,若没有冲突,进入下一步。2) 检查该帧的目的地址看是否可以接收该帧,若可以接收,则进入下一步。3) 检查crc校验和llc数据长度。若都正确,接收该帧,否则丢弃。三、分析、理解所给的仿真程序(对照流程图说明是如何仿真的、每个sleep函数的作用)#include "stdafx.h"#include "
8、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
9、,代表主机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=af
10、xbeginthread(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=
11、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(
12、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
13、>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 doubl
14、e 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"
15、,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(randnu
16、m*(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()函
17、数参量的值,理想情况下,传输时延为零时(即sleep(0)),结果如下图所示:由图可知,没有传输时延情况下,还是有发送碰撞产生,主要原因是线程b程序中的第一个sleep()语句需要运行时间,后面数据全部发送成功还是因为运行了退避二进制算法,当去掉线程b的第一个sleep()时,即两个线程相等时,运行结果如下:由上图可知,数据发送过程中没有冲突。源程序的帧间隙是程序随即产生的(sleep(rand()%10)),现将间隙时间改为0,观察运行结果如下图所示:当两个线程相同时,帧间隙为0的情况下,主机a连续发送三次数据后,主机b抢到信道,连续发送十次数据,发送完毕,接着a发送剩余的七次数据。这样不能
18、体现发送的公平性。所以应该设置帧间隙。下面改变帧间隙,a和b帧间隙相同时(同时为5),运行结果如下:由图可知,两个线程相同,且帧间隙相同的情况下,发送数据没有碰撞,且a,b交替发送数据,一直到发送结束。同样道理,当两个线程不同时(b的反应时间为2 ms),依然会发生碰撞。运行二进制退避算法后,a,b继续交替发送数据。当两个线程相同,帧间隙不同时(a的帧间隙为2 ms ,b的帧间隙为20 ms 时),结果如图通过反复更改a,b帧间隙的值,当b帧间隙为a的帧间隙10倍时,出现上图结果,没有出现轮流发送,也没有出现碰撞(两线程相同)。当两线程帧间隙相差较小时,上述结果体现不明显。五、协议的改进(如增
19、加用户数后采用某种监听和发送策略)对二进制退避算法进行改进,改进后的算法如下:非坚持的csma:线路忙,等待一段时间,再侦听;不忙时,立即发送;减少冲突,信道利用率降低:1坚持的csma:线路忙,继续侦听;不忙时,立即发送;提高信道利用率,增大冲突:p坚持的csma:线路忙,继续侦听;不忙时,根据p概率进行发送,另外的1-p概率为继续侦听(p是一个指定概率值);有效平衡,但复杂:六:心得体会每次做课程设计都是一个学习和总结的过程,在这次课程设计中发现对于书本上的知识掌握的还是不牢固,csma/cd协议老师在上课时讲的很详细,在课程设计中感觉自己只知道个大概。尽管老师已经该我们程序代码,把困难程
20、度已经降到最低程度了,但是在做的过程中还是出现了很多问题,比如a,b在发送过程中改变sleep()的值发送是否是交替进行的,是否会发生碰撞以及操作平台的调试等等问题。最后在老师和同学的帮助下都得以解决,在此真心感谢老师和同学的无私帮助。这次课程设计不仅重新检测了一下自己对课程的掌握理解程度,而且培养了自己如何利用身边的资源解决自己的问题的能力,提升了和别人在学术方面的交流和沟通能力。课程设计是我们专业课程只是综合应用的实践训练,是我们迈向社会、从事职业工作前一个必不可少的过程。“千里之行,始于足下”,通过课程设计,我深深的体会到这句千古名言的真正含义。今天认真的进行课程设计,踏实地迈开这一步,
21、就是为明天能够稳健的在社会大潮中奔跑打下基础。由于本人目前能力有限,难免会出现这样那样的错误,还望老师批评指正。 膅莀袁肂芈薅螇膁莀莈蚃膀肀薃蕿螇膂莆蒅螆莄薂袄螅肄蒄螀螄膆蚀蚆螃艿蒃薂螃莁芅袁袂肁蒁螆袁膃芄蚂袀芅葿薈衿肅节薄袈膇薈袃袇艿莀蝿袇莂薆蚅袆肁荿薁羅膄薄蒇羄芆莇螆羃羆薂螂羂膈莅蚈羁芀蚁薄羁莃蒄袂羀肂芆螈罿膅蒂蚄肈芇芅薀肇羇蒀蒆肆聿芃袅肅芁蒈螁肅莃莁蚇肄肃薇薃肃膅莀袁肂芈薅螇膁莀莈蚃膀肀薃蕿螇膂莆蒅螆莄薂袄螅肄蒄螀螄膆蚀蚆螃艿蒃薂螃莁芅袁袂肁蒁螆袁膃芄蚂袀芅葿薈衿肅节薄袈膇薈袃袇艿莀蝿袇莂薆蚅袆肁荿薁羅膄薄蒇羄芆莇螆羃羆薂螂羂膈莅蚈羁芀蚁薄羁莃蒄袂羀肂芆螈罿膅蒂蚄肈芇芅薀肇羇蒀蒆肆聿芃袅
22、肅芁蒈螁肅莃莁蚇肄肃薇薃肃膅莀袁肂芈薅螇膁莀莈蚃膀肀薃蕿螇膂莆蒅螆莄薂袄螅肄蒄螀螄膆蚀蚆螃艿蒃薂螃莁芅袁袂肁蒁螆袁膃芄蚂袀芅葿薈衿肅节薄袈膇薈袃袇艿莀蝿袇莂薆蚅袆肁荿薁羅膄薄蒇羄芆莇螆羃羆薂螂羂膈莅蚈羁芀蚁薄羁莃蒄袂羀肂芆螈罿膅蒂蚄肈芇芅薀肇羇蒀蒆肆聿芃袅肅芁蒈螁肅莃莁蚇肄肃薇薃肃膅莀袁肂芈薅螇膁莀莈蚃膀肀薃蕿螇膂莆蒅螆莄薂袄螅肄蒄螀螄膆蚀蚆螃艿蒃薂螃莁芅袁袂肁蒁螆袁膃芄蚂袀芅葿薈衿肅节薄袈膇薈袃袇艿莀蝿袇莂薆蚅袆肁荿薁羅膄薄蒇羄芆莇螆羃羆薂螂羂膈莅蚈羁芀蚁薄羁莃蒄袂羀肂芆螈罿膅蒂蚄肈芇芅薀肇羇蒀蒆肆聿芃袅肅芁蒈螁肅莃莁蚇肄肃薇薃肃膅莀袁肂芈薅螇膁莀莈蚃膀肀薃蕿螇膂莆蒅螆莄薂袄螅肄蒄螀螄膆蚀蚆
23、螃艿蒃薂螃莁芅袁袂肁蒁螆袁膃芄蚂袀芅葿薈衿肅节薄袈膇薈袃袇艿莀蝿袇莂薆蚅袆肁荿薁羅膄薄蒇羄芆莇螆羃羆薂螂羂膈莅蚈羁芀蚁薄羁莃蒄袂羀肂芆螈罿膅蒂蚄肈芇芅薀肇羇蒀蒆肆聿芃袅肅芁蒈螁肅莃莁蚇肄肃薇薃肃膅莀袁肂芈薅螇膁莀莈蚃膀肀薃蕿螇膂莆蒅螆莄薂袄螅肄蒄螀螄膆蚀蚆螃艿蒃薂螃莁芅袁袂肁蒁螆袁膃芄蚂袀芅葿薈衿肅节薄袈膇薈袃袇艿莀蝿袇莂薆蚅袆肁荿薁羅膄薄蒇羄芆莇螆羃羆薂螂羂膈莅蚈羁芀蚁薄羁莃蒄袂羀肂芆螈罿膅蒂蚄肈芇芅薀肇羇蒀蒆肆聿芃袅肅芁蒈螁肅莃莁蚇肄肃薇薃肃膅莀袁肂芈薅螇膁莀莈蚃膀肀薃蕿螇膂莆蒅螆莄薂袄螅肄蒄螀螄膆蚀蚆螃艿蒃薂螃莁芅袁袂肁蒁螆袁膃芄蚂袀芅葿薈衿肅节薄袈膇薈袃袇艿莀蝿袇莂薆蚅袆肁荿薁羅膄薄蒇
24、羄芆莇螆羃羆薂螂羂膈莅蚈羁芀蚁薄羁莃蒄袂羀肂芆螈罿膅蒂蚄肈芇芅薀肇羇蒀蒆肆聿芃袅肅芁蒈螁肅莃莁蚇肄肃薇薃肃膅莀袁肂芈薅螇膁莀莈蚃膀肀薃蕿螇膂莆蒅螆莄薂袄螅肄蒄螀螄膆蚀蚆螃艿蒃薂螃莁芅袁袂肁蒁螆袁膃芄蚂袀芅葿薈衿肅节薄袈膇薈袃袇艿莀蝿袇莂薆蚅袆肁荿薁羅膄薄蒇羄芆莇螆羃羆薂螂羂膈莅蚈羁芀蚁薄羁莃蒄袂羀肂芆螈罿膅蒂蚄肈芇芅薀肇羇蒀蒆肆聿芃袅肅芁蒈螁肅莃莁蚇肄肃薇薃肃膅莀袁肂芈薅螇膁莀莈蚃膀肀薃蕿螇膂莆蒅螆莄薂袄螅肄蒄螀螄膆蚀蚆螃艿蒃薂螃莁芅袁袂肁蒁螆袁膃芄蚂袀芅葿薈衿肅节薄袈膇薈袃袇艿莀蝿袇莂薆蚅袆肁荿薁羅膄薄蒇羄芆莇螆羃羆薂螂羂膈莅蚈羁芀蚁薄羁莃蒄袂羀肂芆螈罿膅蒂蚄肈芇芅薀肇羇蒀蒆肆聿芃袅肅芁蒈螁肅莃莁蚇肄肃薇薃肃膅莀袁肂芈薅螇膁莀莈蚃膀肀薃蕿螇膂莆蒅螆莄薂袄螅肄蒄螀螄膆蚀蚆螃艿蒃薂螃莁芅袁袂肁蒁螆袁膃芄蚂袀芅葿薈衿
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- JTK-101-生命科学试剂-MCE
- 北师版2024春八下数学3.2图形的旋转 第2课时【教学课件】
- 综合组学期教研工作总结
- 深基坑开挖及支护专项施工方案
- 化工园区石子运输协议
- 医院工会管理制度
- 企业应急资金周转居间合同
- 3D试衣整体解决方案 3D试衣间解决方案
- 重点监控药品处方点评及点评结果公示制度
- 医药冷链私人运输合同范本
- 公路工程施工指导手册
- 志愿者礼仪培训内容
- 普通高中化学课程标准(2017年版)解读【完整版】
- 延髓背外侧综合征
- 污泥管理台账
- 电商组织架构图参考模板
- 塑料齿轮的工艺设计
- 安全设施设备定期检查和维护保养记录台账
- 非凡皆自“愚处”起 议论文阅读专练及答案(2021四川达州中考试题)
- 焊接结构外观质量培训ppt课件
- 学生成绩单模版(中英文合板)
评论
0/150
提交评论