Login
升级VIP 登录 注册 安全退出
当前位置: 首页 > word文档 > 其他文档 > 计算机网络课设-模拟Ethernet帧的发送过程

计算机网络课设-模拟Ethernet帧的发送过程

收藏

本作品内容为计算机网络课设-模拟Ethernet帧的发送过程,格式为 doc ,大小 699432 KB ,页数为 15页

计算机网络课设-模拟Ethernet帧的发送过程


('学号:课程设计课程名称计算机网络学院计算机科学与技术学院专业软件工程专业班级姓名指导教师2014——2015学年第2学期课程实践设计任务书学生姓名:专业班级:指导教师:刘东飞工作单位:计算机学院题目二:模拟Ethernet帧的发送过程初始条件:(1)学习相关知识(2)C/C++/VC/VB/JAVA语言(3)PC机一台要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)编写程序模拟Ethernet节点的数据发送流程。具体要求:1)用两个线程a和b来模拟Ethernet上的两台主机。2)用一个双字类型变量Bus来模拟总线(将其初始化为“\\0”,并且总线等于“\\0”时表示总线空闲)。3)两个子线程向总线发送自己的数据。数据用该线程的线程号进行模拟,发送数据用线程号和Bus的“或”操作进行模拟(即Bus=BusID,ID为该线程的线程号)。4)每台主机需向总线上成功发送10次数据,如果其中某次数据发送失败,则该线程结束。5)发送流程必须遵循CSMA/CD。随即延迟算法中的冲突窗口取0.005。在数据发送成功(即Bus==ID)后,报告“IDsendsuccess”,产生冲突(即Bus!=ID)后报告“IDsendconllision”,发送失败(即冲突计数值为0)后报告“IDsendfailure”。随着主机发送成功次数增加,报告其已发送成功的次数,如“主机A发送成功数=3”。时间安排:第一、二天:查阅资料,学习算法第三、四天:编程调试第五天:书写报告指导教师签名:年月日系主任(或责任教师)签名:年月日目录一、知识背景..........................................................................................................................51.网络协议..........................................................................................................................52.以太网..............................................................................................................................53.CSMA/CD协议................................................................................................................54.截断二进制指数退避算法...............................................................................................6二、程序设计分析..................................................................................................................71.程序框架..........................................................................................................................82.环境介绍..........................................................................................................................83.数据结构..........................................................................................................................94.子线程..............................................................................................................................95.获得子线程ID.................................................................................................................96.发送数据........................................................................................................................10三、实验截图.........................................................................................................................11四、课设总结........................................................................................................................13五、程序清单........................................................................................................................13一、知识背景1.网络协议开放系统互连参考模型(OpenSystemInterconnect简称OSI)是国际标准化组织(ISO)和国际电报电话咨询委员会(CCITT)联合制定的开放系统互连参考模型,为开放式互连信息系统提供了一种功能结构的框架。它从低到高分别是:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层TCP/IP协议定义了一个在因特网上传输的包,称为IP数据报(IPDatagram)。这是一个与硬件无关的虚拟包,由首部和数据两部分组成,其格式如图所示。首部的前一部分是固定长度,共20字节,是所有IP数据报必须具有的。在首部的固定部分的后面是一些可选字段,其长度是可变的。首部中的源地址和目的地址都是IP协议地址。2.以太网以太网(Ethernet)指的是由Xerox公司创建并由Xerox、Intel和DEC公司联合开发的基带局域网规范,是当今现有局域网采用的最通用的通信协议标准。以太网络使用CSMA/CD(载波监听多路访问及冲突检测)技术,并以10M/S的速率运行在多种类型的电缆上。以太网与IEEE802.3系列标准相类似。包括标准的以太网(10Mbit/s)、快速以太网(100Mbit/s)和10G(10Gbit/s)以太网。它们都符合IEEE802.33.CSMA/CD协议CSMA/CD(CarrierSenseMultipleAccesswithCollisionDetection)即带冲突检测的载波监听多路访问技术。在传统的共享以太网中,所有的节点共享传输介质。如何保证传输介质有序、高效地为许多节点提供传输服务,就是以太网的介质访问控制协议要解决的问题CSMA/CD是一种争用型的介质访问控制协议。它起源于美国夏威夷大学开发的ALOHA网所采用的争用型协议,并进行了改进,使之具有比ALOHA协议更高的介质利用率。主要应用于现场总线Ethernet中。另一个改进是,对于每一个站而言,一旦它检测到有冲突,它就放弃它当前的传送任务。换句话说,如果两个站都检测到信道是空闲的,并且同时开始传送数据,则它们几乎立刻就会检测到有冲突发生。它们不应该再继续传送它们的帧,因为这样只会产生垃圾而已;相反一旦检测到冲突之后,它们应该立即停止传送数据。快速地终止被损坏的帧可以节省时间和带宽。CSMA/CD控制方式的优点是:原理比较简单,技术上易实现,网络中各工作站处于平等地位,不需集中控制,不提供优先级控制。但在网络负载增大时,发送时间增长,发送效率急剧下降。CSMA/CD应用在OSI的第二层数据链路层它的工作原理是:发送数据前先侦听信道是否空闲,若空闲,则立即发送数据。若信道忙碌,则等待一段时间至信道中的信息传输结束后再发送数据;若在上一段信息发送结束后,同时有两个或两个以上的节点都提出发送请求,则判定为冲突。若侦听到冲突,则立即停止发送数据,等待一段随机时间,再重新尝试。其原理简单总结为:先听后发,边发边听,冲突停发,随机延迟后重发4.截断二进制指数退避算法截断二指数指数退避算法并不复杂。具体的退避算法如下:1.确定基本退避时间,它就是争用期。以太网把争用期定为51.2us。对于10Mb/s以太网,在争用期内可发送512bit,即64字节。也可以说争用期是512比特时间。1比特时间就是发送1比特所需要的时间。所以这种时间单位与数据率密切相关。2.从离散的整数集合[0,1,…,]中随机取出一个数,记为r。重传应推后的时间就是r倍的争用期。上面的参数k按下面的公式计算:k=Min[重传次数,10]可见当重传次数不超过10时,参数k等于重传次数;但当重传次数超过10时,k就不在增大而一直等于10。3.当重传达16次仍不能成功时(这表明同时打算发送的数据站太多,以致连续发生冲突),则丢弃该,并向高层报告。例如,在第1次重传时,k=1,随机数r从整数{0,1}中选一个数。因此重传推迟的时间是0或争用期,在这两个时间中随机选择一个。若再发生碰撞,则重传时,k=2,随机数r就从整数{0,1,2,3}中选一个数。因此重传推迟的时间是在0,2,4和6这4个时间中随机抽取一个。同样,若在发生碰撞,则重传时k=3,随机数r就从整数{0,1,2,3,4,5,6,7}中选一个数。以此类推。若连续多次发生冲突,就表明可能有较多的站参与争用信道。但使用退避算法可使重传需要推迟的平均时间随重传次数而增大(这也称为动态退避),因而减小发生碰撞的概率,有利于整个系统的稳定。我们还注意到,适配器每发送一个新的帧,就要执行一次CMSA/CD算法。适配器对过去发生过的碰撞并无记忆功能。因此,当好几个适配器正在执行指数退避算法时,很可能有某一个适配器发送的新帧能够碰巧立即成功插入到信道中,得到了发送权。我们可以看出,以太网在发送数据时,如果帧的前64字节之内没有发生冲突,那么后续的数据就不会发生冲突。换句话说,如果发生冲突就立即中止发送,这时已经发送出去的数据一定小于64字节,因此以太网规定了最短有效的帧长为64字节,凡长度小于64字节的帧都是由于冲突而异常中止的无效帧。收到了这种无效帧就应当立即丢弃。二、程序设计分析1.程序框架2.环境介绍操作系统Ubuntu14.04G++4.4.33.数据结构使用wchar_t来表示双字节。而在C++中推荐使用const来代替define4.子线程C++11开始支持多线程编程,之前多线程编程都需要系统的支持,在不同的系统下创建线程需要不同的API如pthread_create(),Createthread(),beginthread()等,使用起来都比较复杂,C++11提供了新头文件等用于支持多线程。在主函数中使用thread的构造函数可以调用子线程并且传参数。主线程调用thread对象t1、t2的join函数等待线程执行结束。5.获得子线程IDwchar_tBUS=\'\\0\';//双字类型变量Bus来模拟总线constintconflictmax=16;constintconflictwindow=0.005;std::threadt1(call_thread,\'A\');std::threadt2(call_thread,\'B\');t2.join();t1.join();std::stringstreamss;ss<10)return;}else{RepeatCounter++;//重发次数加一if(RepeatCounter>=16){printf("ID%ssendfailed\\n",ss.str().c_str());return;}else{//使用截断二进制退避算法uniform_int_distributionrandnum(0,pow(2,min(RepeatCounter,10)-1));default_random_enginee;printf("ID%ssendconllision\\n",ss.str().c_str());autosleeptime=randnum(e);sleep(sleeptime);continue;}}}}在此函数中如果BuS=0的时候才能执行,否则一直循环。使用位运算BUS=Pid模拟线路上的电压变化。使用uniform_int_distribution需要引入头文件,这个是C++11中新的随机数方式,在之前都是使用C语言中的方式。而是用这种方式,出现的rand数是“真随机数”,而非C语言中的假随机数。使用randnum(0,pow(2,min(RepeatCounter,10)-1))来实现截断二进制指数退避算法。如果RepeatCounter>=16,则放弃发送此包。注意,此处使用printf而非cout,因为cout不是线程安全的,易出现字符串打断现象。而printf是线程安全的。可以直接使用。在编译这个程序的时候,需要使用其中std=c++0x是指使用的是C++11的标准。–pthread是指需要引入pthread头文件。然后在同文件夹下会生成a.out的程序。使用./a.out即可运行程序。三、实验截图g++-std=c++0x–pthreadmain.cpp四、课设总结这个课设的题目我非常喜欢,看似简单的题目实际包含了很多东西:多线程、CSMA/CD协议、以及对截断二进制指数退避算法的理解。在我做这个的时候,实际上之前很少使用多线程技术,尤其是C++11这种网上资料还比较少的多线程库。在做这个的时候,我分别参考了《C++标准库-自学教程与参考手册》中对thread库的说明,以及《深入理解计算机系统》中并发编程部分对pthread的讲解。感觉收获很大。在做这个课设的时候,我专门把开发环境搬到了Linux上面去做。之前一直很少使用Ubuntu,但这次却从搭建环境,编译程序各部分,对Linux有了一个初步的认识。以后也会将开发环境越来越多的向Linux下迁移。在学习理论知识的时候,虽然对这部分很熟悉。但总感觉缺少了些什么,做了这个题目之后才有了更深的体会和理解。明白了这些协议的重要性。受益匪浅!五、程序清单#include#include#include#include#include#include#includeusingnamespacestd;wchar_tBUS=\'\\0\';//双字类型变量Bus来模拟总线constintconflictmax=16;constintconflictwindow=0.005;voidcall_thread(charname){//autoPid=this_thread::get_id();intRepeatCounter=1;//记录目前是第几次发送intSuccessCounter=1;//记录成功发送的个数,最大为1//cout<10)return;}else{RepeatCounter++;//重发次数加一if(RepeatCounter>=16){printf("ID%ssendfailed\\n",ss.str().c_str());return;}else{//使用截断二进制退避算法uniform_int_distributionrandnum(0,pow(2,min(RepeatCounter,10)-1));default_random_enginee;printf("ID%ssendconllision\\n",ss.str().c_str());autosleeptime=randnum(e);sleep(sleeptime);continue;}}}}}intmain(){std::threadt1(call_thread,\'A\');std::threadt2(call_thread,\'B\');t2.join();t1.join();return0;}',)


  • 编号:1700774721
  • 分类:其他文档
  • 软件: wps,office word
  • 大小:15页
  • 格式:docx
  • 风格:商务
  • PPT页数:699432 KB
  • 标签:

广告位推荐

相关其他文档更多>