




免费预览已结束,剩余14页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目录1 概述31.1设计题目31.2课设目的31.3开发环境与工具31.4具体要求32 总体设计42.1 Ethernet帧的发送过程42.2 Ethernet帧接收流程42.3 总体设计思想42.3.1 总线争用42.3.2算法描述52.3.3算法流程图63详细设计73.1Main()函数及流程图73.2截断二进制退避算法及流程图93.3发送流程函数及流程图114运行结果135源程序166总结167参考文献161 概述1.1设计题目模拟Ethernet帧的发送过程1.2课设目的明确课程设计的目的和重要性,认真领会课程设计的题目,读懂课程设计指导书的要求,学会设计的基本方法与步骤,学会如何运用前修知识与收集、归纳相关资料解决具体问题的方法。严格要求自己,要独立思考,按时、独立完成能力拓展训练任务。设计报告:要求层次清楚,整洁,规范,不得相互抄袭。1.3开发环境与工具设计语言:C语言开发平台:Ubuntu开发工具:Vi + GCC1.4具体要求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 send conllision”,发送失败(即冲突计数值为0)后报告“ID send failure”。随着主机发送成功次数增加,报告其已发送成功的次数,如“主机A发送成功数3”。2 总体设计2.1 Ethernet帧的发送过程Ethernet的核心技术是随机争用型介质访问方法,即带有冲突检测的载波侦听多路访问(CSMA/CD)方法。1)载波侦听过程。Ethernet中每个结点利用总线发送数据,总线是每个结点共享的公共传输介质。所以结点在发送一个帧前,必须侦听总线是否空闲。由于Ethernet的数据采用曼彻斯特编码方式,所以可以通过判断总线电平是否跳变来确定总线是否空闲。若总线空闲,就可启动发送,否则继续侦听。2)冲突检测。在数据发送过程中,可能会产生冲突(冲突是指总线上同时出现两个或两个以上的发送信号,它们叠加后的信号波形与任何发送结点输出的信号波形不相同。因为可能有多个主机都在侦听总线,当它们侦听到总线空闲时,都会往总线上发送数据)。所以在发送数据的过程中,也应该进行冲突检测,只要发现冲突就应该停止发送数据。3)随机延迟后重发。在检测到冲突、停止发送后,结点进行随机延迟后重发。若发16次后还没成功,则宣告发送失败,取消该帧的发送。随机延迟的计算方法一般采用截止二进制指数退避算法。2.2 Ethernet帧接收流程帧接收流程可以分为三个步骤:1) 检查是否发生冲突,若发生冲突,则丢弃该帧,若没有冲突,进入2)。2) 检测该帧的目的地址看是否可以接收该帧,若可以接收,进入3)。3) 检查CRC检测和LLC数据长度。若都正确,接收该帧,否则丢弃。2.3 总体设计思想 用两个线程模拟主机,因此可以定义线程分别为A 和B来共享bus.设碰撞窗口为2*,当线程A发现bus=0 :表示当前信道空闲,紧接着线程A sleep()表示数据正在信道上传播,B尚未收到此数据,正当此时 若B说发送数据,也可检测到信道空闲;经过时间段后,bus|=ID 表示数据传送到B,接着线程A阻塞时间,然后检测是否发生碰撞。同理B也是如此。2.3.1 总线争用总线初值Bus=0,表示总线空闲,当线程准备发送时,首先监听获得总线状态。如果总线被占用,就一直监听,直到总线为空闲。如果总线空闲则发送数据。当线程A监听到总线空闲就发送数据,在A发送数据的过程中B也监听总线,如果B检测到总线空闲时B线程也发送数据,这种情况就可能产生碰撞。碰到碰撞只能停止发送,然后用截止二进制指数后退算法达到延时,延时过后继续监听。2.3.2算法描述1) 创建两个线程A和B模拟两个主机。2) 设置初始值。如成功次数,冲突计数器和冲突窗口值等。3) 监听总线,如果忙转至 10)。4) 模拟发送包为总线状态和线程A的线程号的或运算结果。5) 检测是否有冲突,如果没有,则输出发送成功和发送成功次数。6) 将冲突计数器复原为16,同时内存清零。7) 如有冲突,则输出“有冲突”。8) 随机延迟重发,延迟算法用截止二进制指数后退算法。9) 跳转至 3)。10) 总线忙,循环监听,跳转至 3)2.3.3算法流程图3详细设计3.1Main()函数及流程图int main() pid_t pid=0; int bus=0; /*共享内存的ID,用来模拟总线*/ void *addr=0; /*指向模拟总线的首地址*/ bus=shmget(IPC_PRIVATE, sizeof(pid_t), SHM_R|SHM_W);/获取共享内存 if(bus=-1) /*如果申请内存失败*/ perror(shmget error.); return ERROR_SHMGET; if(pid=fork()0) if(pid=fork()0) if(wait(NULL)=-1) perror(wait error.); return ERROR_WAIT; else return 0; return 0;3.2截断二进制退避算法及流程图/*截止二进制指数退避算法的实现该算法可以表示为:t=2*r为结点重新发送需要的后退延迟时间;2*为冲突窗口值;r为随机数,r的取值范围为0,2k-1,k=Min重传次数,10;当重传16次仍不成功时,则丢弃该帧.*/staticstatic unsigned long get_backoff(const int n)/计算重传推迟时间 int k=n; k=16-k; if(k10)/如果重传次数大于10时,重传次数置为10 k=10; return (random()%(1k)*SLOT_TIME;/返回重传推迟时间3.3发送流程函数及流程图/*发送数据流程*/static void send_msg(const void *addr, const pid_t pid,char ch) pid_t *bus=(pid_t *)addr; int collision; /冲突计数器 int k=0;/发送成功的次数 for(int i=0;i0) printf(%d send collision.n, pid); usleep(get_backoff(collision); /随机延时 else printf(%d send failure.n, pid); /发送失败 break; else *bus=0; break; while(1); if(collision0) k+; printf(%d send success.n, pid); printf(%c send success=%d.n,ch,k); usleep(random()%1024); 4运行结果qinchaoqinchao-Lenovo-G450:$ gcc -o qin comnet.cqinchaoqinchao-Lenovo-G450:$ ./qin2565 send success.A send success=1.2566 send success.B send success=1.2565 send success.A send success=2.2566 send success.B send success=2.2565 send success.A send success=3.2566 send success.B send success=3.2565 send collision.2566 send collision.2565 send collision.2566 send collision.2565 send collision.2566 send collision.2565 send collision.2566 send collision.2565 send collision.2566 send collision.2565 send collision.2566 send collision.2565 send collision.2566 send collision.2565 send collision.2566 send collision.2565 send collision.2566 send collision.2565 send collision.2566 send collision.2565 send collision.2566 send collision.2565 send collision.2566 send collision.2565 send collision.2566 send collision.2565 send collision.2566 send collision.2565 send collision.2566 send collision.2565 send failure.2566 send failure.2566 send collision.2565 send collision.2566 send collision.2565 send collision.2566 send collision.2565 send collision.2566 send collision.2565 send collision.2566 send collision.2565 send collision.2566 send collision.2565 send collision.2566 send collision.2565 send collision.2566 send collision.2565 send collision.2566 send collision.2565 send collision.2566 send collision.2565 send collision.2566 send collision.2565 send collision.2566 send collision.2565 send collision.2566 send collision.2565 send collision.2566 send collision.2565 send collision.2566 send collision.2565 send collision.2565 send failure.2566 send failure.2565 send collision.2566 send collision.2566 send collision.2565 send collision.2565 send collision.2566 send collision.2566 send collision.2565 send collision.2565 send collision.2566 send collision.2566 send collision.2565 send collision.2565 send collision.2566 send collision.2566 send collision.2565 send collision.2565 send collision.2566 send collision.2565 send collision.2566 send collision.2566 send collision.2565 send collision.2565 send collision.2566 send collision.2565 send success.A send success=4.2566 send success.B send success=4.2565 send success.A send success=5.2566 send success.B send success=5.2565 send success.A send success=6.2566 send success.B send success=6.2565 send success.A send success=7.2566 send success.B send success=7.2565 send success.A send success=8.2566 send success.B send success=8.qinchaoqinchao-Lenovo-G4505源程序见附录6总结通过本次课程设计,首先认识到了自己的不足。在编码的过程中认识到了自己细节方面的不足,在以后计算机网络的学习过程中在理解的同时还要做到对细节的注重;当然在本次课设中最终还是实现了题目要求。同时,觉得本次课设是十分有意义的,使自己所学的只是有了实践的地方。7参考文献【1】谢希仁,计算机网络,电子工业出版社【2】Stephen A.Rago,UINX环境高级编程,人民邮电出版社附录:源码及注释#include #include #include #include #include #include #include #include#include#define ERROR_SHMGET -1#define ERROR_SHMAT -2#define ERROR_WAIT -3#define ERROR_FORK -4#define SLOT_TIME 0.005/*截止二进制指数退避算法的实现该算法可以表示为:t=2*r为结点重新发送需要的后退延迟时间;2*为冲突窗口值;r为随机数,r的取值范围为0,2k-1,k=Min重传次数,10;当重传16次仍不成功时,则丢弃该帧.*/static unsigned long get_backoff(const int n)/计算重传推迟时间int k=n;k=16-k;if(k10)/如果重传次数大于10时,重传次数置为10k=10;return (random()%(1k)*SLOT_TIME;/返回重传推迟时间/*发送数据流程*/static void send_msg(c
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年益阳桃江县卫健系统选调事业编制工作人员考试真题
- 2024年德州市临邑县招聘城乡公益性岗位人员考试真题
- 甘肃省2022年普通高中学业水平合格性考试英语题目及答案
- 2025年电气工程与自动化试题与答案解析
- 2025年安全生产风险辨识与安全技能培训试题(附答案+解析)
- 合作投资协议范本有哪些
- 2024年安徽和襄高速公路有限公司招聘真题
- 2025公务员(国考)考试题库及满分答案
- 基孔肯雅热防控技术指南2025年版考核试卷(附答案)
- 2025年门座式起重机司机Q2证考试练习题附答案
- 口腔科国庆节活动方案
- 2025四川成都广播影视集团有限责任公司招聘22人笔试参考题库附带答案详解
- 弹性工作制激励机制设计-洞察及研究
- 骨软骨瘤恶变信号:识别、诊断与临床管理
- 安全生产盲区
- 社区居民健康档案建立
- 非公企业党建培训课件
- 2025发展对象考试试题库及参考答案(完整版)
- (2025)社区网格员笔试考试题库及答案
- 国家安全生产法2025
- 妇产科开展宫腔镜手术的可行性报告
评论
0/150
提交评论