计算机网络课程设计模拟Ethernet帧的发送过程Word格式文档下载.docx
- 文档编号:14754888
- 上传时间:2022-10-24
- 格式:DOCX
- 页数:13
- 大小:109.17KB
计算机网络课程设计模拟Ethernet帧的发送过程Word格式文档下载.docx
《计算机网络课程设计模拟Ethernet帧的发送过程Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《计算机网络课程设计模拟Ethernet帧的发送过程Word格式文档下载.docx(13页珍藏版)》请在冰豆网上搜索。
(1)学习相关知识
(2)C/C++/VC/VB/JAVA语言
(3)PC机一台
要求完成的主要任务:
(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)
编写程序模拟Ethernet节点的数据发送流程。
具体要求:
1)用两个线程a和b来模拟Ethernet上的两台主机。
2)用一个双字类型变量Bus来模拟总线(将其初始化为“\0”,并且总线等于“\0”时表示总线空闲)。
3)两个子线程向总线发送自己的数据。
数据用该线程的线程号进行模拟,发送数据用线程号和Bus的“或”操作进行模拟(即Bus=Bus|ID,ID为该线程的线程号)。
4)每台主机需向总线上成功发送10次数据,如果其中某次数据发送失败,则该线程结束。
5)发送流程必须遵循CSMA/CD。
随即延迟算法中的冲突窗口取0.005。
在数据发送成功(即Bus==ID)后,报告“IDsendsuccess”,产生冲突(即Bus!
=ID)后报告“IDsendconllision”,发送失败(即冲突计数值为0)后报告“IDsendfailure”。
随着主机发送成功次数增加,报告其已发送成功的次数,如“主机A发送成功数=3”。
时间安排:
第一、二天:
查阅资料,学习算法
第三、四天:
编程调试
第五天:
书写报告
指导教师签名:
年月日
系主任(或责任教师)签名:
目录
1.课程设计概述1
2.以太网的CSMA/CD协议1
2.1Ethernet帧的发送流程1
2.2Ethernet帧的接收流程2
2.3截断二进制指数退避算法2
2.4Ethernet帧的发送流程图3
3系统平台、语言和工具3
4.设计思想4
5.完整代码4
6.结果截图9
7.课程设计总结10
本科生课程设计成绩评定表11
1.课程设计概述
局域网技术的发展非常迅速,在企业、机关、学校的信息管理与服务领域得到广泛的应用。
在早期,人们将局域网归为一种数据通信网络。
随着局域网体系结构和协议标准研究的进展、操作系统的发展以及光纤技术的引入,局域网技术得到了快速发展。
目前,应用最广泛的局域网是总线型局域网,即以太网(Ethernet)。
总线型局域网的核心技术是随机争用型介质访问控制方法,即带有冲突检测的载波侦听多路访问(CSMA/CD,CarrierSenseMultipleAccesswithCollisionDetection)方法。
CSMA/CD方法用来解决多个结点共享公用总线的问题。
在Ethernet中,任何结点都没有可预约的发送时间,这种介质访问控制属于随机争用型方法。
学习Ethernet技术对深入掌握局域网知识是非常重要的。
本课程设计的目的是模拟Ethernet帧的发送过程,熟悉Ethernet帧的数据发送流程,即CSMA/CD工作流程。
2.以太网的CSMA/CD协议
以太网总线上只要有一台计算机在发生数据,总线传输资源就被占用,因此,在同一时间只能允许一台计算机在发生数据。
Ethernet的核心技术是随机争用型介质访问方法,即带有冲突检测的载波侦听多路访问(CSMA/CD)方法。
2.1Ethernet帧的发送流程
1)载波侦听过程。
Ethernet中每个结点利用总线发送数据,总线是每个结点共享的公共传输介质。
所以结点在发送一个帧前,必须侦听总线是否空闲。
由于Ethernet的数据采用曼彻斯特编码方式,所以可以通过判断总线电平是否跳变来确定总线是否空闲。
若总线空闲,就可以启动发送,否则继续侦听。
2)冲突检测。
在数据发送过程中,可能会产生冲突(冲突是指总线上同时出现两个或两个以上的发送信号,他们叠加后的信号波形与任何发送结点的输出波形都不相同)。
因为可能有多个主机都在侦听总线,当它们侦听到总线空闲时,就会往总线上发送数据。
所以在发送数据的过程中,也应该进行冲突检测,只要发现冲突就应该立即停止发送数据。
发生碰撞
3)随即延迟后重发。
在检测到冲突、停止发送后,结点进行随机延迟后重发。
若发16次后还没成功,则宣告发送失败,取消该帧的发送。
随机延迟的算法一般采用截断二进制指数退避算法。
2.2Ethernet帧的接收流程
帧的接收流程大致可以分为以下三个步骤:
1)检查是否发生冲突,若发生冲突,则丢弃该帧;
若没有冲突,进入下一步。
2)检查该帧的目的地址看是否可以接收该帧,若可以接收,则进入下一步。
3)检查CRC检验和LLC数据长度。
若都正确,接受该帧,否则丢弃。
2.3截断二进制指数退避算法
当出现线路冲突时,如果冲突的各站点都采用同样的退避间隔时间,则很容易产生二次、三次的碰撞。
因此,要求各个站点的退避间隔时间具有差异性。
这要求通过退避算法来实现。
该算法让发生碰撞的站在停止发送数据后,不是等待信道变为空闲后就立即发生数据,而是推迟(即退避)一个随机的时间T,才开始监听总线,等总线空闲再重传。
令k=Min【重传次数,10】,然后从整数集合{0,1,……,2^k-1}中随机取出一个数,记为R,则重传等待时间T=R*A,A为冲突窗口值(冲突窗口为总线最大长度和电磁波在介质中传播速度比值的2倍),也叫争用期,因此T为R倍的争用期。
这样做的好处是当连续发生多次冲突,就表明可能有较多的站参与争用信道,使用该算法可以使推迟的平均时间随重传次数增大而增大(动态退避),因而减小发生碰撞的概率,有利于整个系统的稳定。
2.4Ethernet帧的发送流程图
3系统平台、语言和工具
系统:
Windows
语言:
C++
工具:
VC6.0
4.设计思想
从主程序启动2个线程(A和B)来模拟两台主机发送数据(线程本身的ID号)。
使用一个线程计数器Count=0,启动一个线程时加1,某个线程退出时减1,主线程启动2个线程后循环等待,直到Count==0时(即2个线程都退出)主线程结束,退出程序。
主线程流程图:
N
Y
2个线程函数ThreadFunc_A()和ThreadFunc_B()的函数体很相似,2个线程同时循环监听总线Bus,Bus=0时开始发送数据,若经过一个争用期(0.005s)未发现冲突,则表明发送数据成功,若检测到冲突,则停止发送,随机退避一个时间重新监听总线并发送数据(截断二进制指数退避算法)。
相关代码:
Sleep(rand()%(int)pow(2,m)*CMPED)。
若16次都发送不成功,则报告发送失败并中止线程,线程计数器减1。
若10次数据发送成功,则线程正常结束,线程计数器减1。
5.完整代码
#include<
iostream.h>
#include<
Windows.h>
time.h>
math.h>
#defineCMPED5//争用期
DWORDThreadID_A,ThreadID_B;
//线程ID,线程向总线发送的数据
HANDLEhThreadID_A,hThreadID_B;
DWORDCount=2;
//线程计数器
DWORDBus=0;
//总线
//线程A
DWORDWINAPIThreadFunc_A()
{
inti=1;
DWORDt1,t2,k,m;
while(i<
=10)
{
k=0;
//重传次数
do
{
while(Bus);
Bus=Bus|ThreadID_A;
t1=GetTickCount();
while((t2=GetTickCount())-t1<
=CMPED)
{
if(Bus!
=ThreadID_A)
{
SuspendThread(hThreadID_B);
cout<
<
"
IDsendcollision!
endl;
ResumeThread(hThreadID_B);
break;
}
}
if(t2-t1>
CMPED)
cout<
IDsendsuccess主机A发送成功次数="
i<
Bus=0;
break;
else
k++;
if(k==16)
IDsendfailure!
主机A停止发送数据。
Count--;
ExitThread(0);
}
m=k>
10?
10:
k;
//截断二进制指数退避算法
Sleep(rand()%(int)pow(2,m)*CMPED);
}
}while
(1);
i++;
}
Count--;
return0;
}
//线程B
DWORDWINAPIThreadFunc_B()
//重传次数
Bus=Bus|ThreadID_B;
=ThreadID_B)
SuspendThread(hThreadID_A);
ResumeThread(hThreadID_A);
IDsendsuccess主机B发送成功次数="
主机B停止发送数据。
intmain()
srand((unsigned)time(NULL));
//初始化随机数种
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机网络 课程设计 模拟 Ethernet 发送 过程
![提示](https://static.bdocx.com/images/bang_tan.gif)