计算机网络课程设计模拟Ethernet帧的发送过程Word文档下载推荐.docx

上传人:b****2 文档编号:4813196 上传时间:2023-05-04 格式:DOCX 页数:15 大小:98.66KB
下载 相关 举报
计算机网络课程设计模拟Ethernet帧的发送过程Word文档下载推荐.docx_第1页
第1页 / 共15页
计算机网络课程设计模拟Ethernet帧的发送过程Word文档下载推荐.docx_第2页
第2页 / 共15页
计算机网络课程设计模拟Ethernet帧的发送过程Word文档下载推荐.docx_第3页
第3页 / 共15页
计算机网络课程设计模拟Ethernet帧的发送过程Word文档下载推荐.docx_第4页
第4页 / 共15页
计算机网络课程设计模拟Ethernet帧的发送过程Word文档下载推荐.docx_第5页
第5页 / 共15页
计算机网络课程设计模拟Ethernet帧的发送过程Word文档下载推荐.docx_第6页
第6页 / 共15页
计算机网络课程设计模拟Ethernet帧的发送过程Word文档下载推荐.docx_第7页
第7页 / 共15页
计算机网络课程设计模拟Ethernet帧的发送过程Word文档下载推荐.docx_第8页
第8页 / 共15页
计算机网络课程设计模拟Ethernet帧的发送过程Word文档下载推荐.docx_第9页
第9页 / 共15页
计算机网络课程设计模拟Ethernet帧的发送过程Word文档下载推荐.docx_第10页
第10页 / 共15页
计算机网络课程设计模拟Ethernet帧的发送过程Word文档下载推荐.docx_第11页
第11页 / 共15页
计算机网络课程设计模拟Ethernet帧的发送过程Word文档下载推荐.docx_第12页
第12页 / 共15页
计算机网络课程设计模拟Ethernet帧的发送过程Word文档下载推荐.docx_第13页
第13页 / 共15页
计算机网络课程设计模拟Ethernet帧的发送过程Word文档下载推荐.docx_第14页
第14页 / 共15页
计算机网络课程设计模拟Ethernet帧的发送过程Word文档下载推荐.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

计算机网络课程设计模拟Ethernet帧的发送过程Word文档下载推荐.docx

《计算机网络课程设计模拟Ethernet帧的发送过程Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《计算机网络课程设计模拟Ethernet帧的发送过程Word文档下载推荐.docx(15页珍藏版)》请在冰点文库上搜索。

计算机网络课程设计模拟Ethernet帧的发送过程Word文档下载推荐.docx

查阅资料,学习算法

第三、四天:

编程调试

第五天:

书写报告

 

指导教师签名:

年月日

系主任(或责任教师)签名:

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));

//初始化随机数种子

do

hThreadID_A=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ThreadFunc_A,

NULL,0,&

ThreadID_A);

}while(hThreadID_A==NULL);

hThreadID_B=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ThreadFunc_B,

NULL,0,&

ThreadID_B);

}while(hThreadID_B==NULL);

while(Count);

6.结果截图

运行结果1运行结果2

分析:

由于采用的是随机退避算法,因此每次运行的结果显然是不同的。

当发生冲突时,使用随机动态退避可以使推迟的平均时间随重传次数增大而增大,并由于随机数的作用使得每个站点推迟的时间不一样,因而减小发生碰撞的概率,有利于整个系统的稳定。

7.课程设计总结

经过一个星期对计算机网络课程设计的学习和上机实际操作,我熟悉了Ethernet帧的发送过程及数据发送流程。

对CSMA/CD协议理解更加透彻,明白了以太网帧的发送原理。

在网络体系结构中每一层都发挥着重要的作用,各司其职,每一层所用的协议都是以后网络学习深入研究的对象。

这次的课程设计帮我深刻理解了数据链路层中以太网帧的发送过程,为我以后的网络学习打下了基础,感觉提高了许多,受益匪浅。

在这个星期的学习实践中,有过成功的欣喜,也有出现问题的焦躁,然而当一个个问题通过看书查找,询问老师、同学,慢慢解决后,也有了从未有过的自豪与骄傲。

困难固然可怕,但冷静下来,撇开焦躁的情绪,各个击破,会出现柳暗花明那一刻。

另外,我深知任何一门知识的掌握,仅靠学习理论知识是远远不够的,要与实际动手操作相结合才能达到功效,实践是检验真理的标准,也是检验学习的标准,学以致用,才是真正的学到了家。

课程设计顺利的完成了,不但对专业知识有了更深的理解,更使自己认识到实践的重要性,理论、实践相结合才能达到很好的学习效果,多写代码多熟练和巩固学到的语言和编程技巧,能达到事半功倍的效果。

本科生课程设计成绩评定表

班级:

软件0901 姓名:

唐诗玮学号:

*************

序号

评分项目

满分

实得分

1

学习态度认真、遵守纪律

10

2

设计分析合理性

3

设计方案正确性、可行性、创造性

20

4

设计结果正确性

40

5

设计报告的规范性

6

设计验收

总得分/等级

评语:

注:

最终成绩以五级分制记。

优(90-100分)、良(80-89分)、中(70-79分)、

及格(60-69分)、60分以下为不及格

                    指导教师签名:

                  201年 月 日

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2