计算机网络课设Word文档下载推荐.docx
《计算机网络课设Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《计算机网络课设Word文档下载推荐.docx(14页珍藏版)》请在冰豆网上搜索。
![计算机网络课设Word文档下载推荐.docx](https://file1.bdocx.com/fileroot1/2022-10/26/0adda94c-cbaf-432b-b834-2f6d8f77b5e9/0adda94c-cbaf-432b-b834-2f6d8f77b5e91.gif)
编写仿真程序,对一定网络环境下MAC层的多路访问协议的分槽ALOHA协议进行实现。
通过仿真,学习协议采取的介质访问管理,包括介质分配和冲突解决机制,并对协议的性能与理论结果进行比较分析。
实验原理:
分槽Aloha的基本思想是把信道时间分成离散的时间槽,槽长为一个帧所需的发送时间。
每个站点只能在时槽开始时才允许发送。
其他过程与纯ALOHA协议相同。
分槽Aloha的信道效率比纯Aloha要高。
分槽Aloha的易受冲突区比纯Aloha小了一半。
它的重发策略是等待一段随机的时间,然后重发;
如再次冲突,则再等待一段随机的时间,直到重发成功为止,但是发送的时间也是在每个时间槽的开始。
3.实验具体设计实现及结果(含流程图及关键代码说明)
关键代码说明
a.floattime(){……},这是一个产生随机时间的函数,用于初始化各个站点产生包的时间点
b.在主函数main()函数中的while(count<
10000)函数是此程序的核心部分,此处的10000就是控制成功发送的数据包个数10000
c.for(inti=0;
i<
n;
i++)
{note[i]=0;
if(xx[i]<
c)
{
cmp=xx[i];
r=i;
}
此处的for循环是用来选出最早产生数据包的站点
d.if(temp==1)
scount++;
x[r]=x[r]+time();
else
此处的if-else函数是用来判断产生的数据包是否冲突,若冲突则执行else中的语句.
源代码:
#include<
stdio.h>
time.h>
stdlib.h>
iostream>
usingnamespacestd;
#definen2
floattime()
{
intj;
srand((unsignedint)time(NULL));
j=1+rand()%100;
floatt=(float)j/(float)100;
returnt;
}
intmain()
intscount=0,sum=0,chbag=0,c,temp,note[n],r=0;
floatx[n];
inty[n];
for(inti=0;
i++)
x[i]=time();
i<
i++)
cout<
<
x[i]<
"
"
;
endl;
while(scount<
10000)
y[i]=(int)(x[i]*10)+1;
temp=0;
c=y[0];
note[i]=0;
if(y[i]<
c=y[i];
if(y[r]==y[i])
temp++;
note[i]=y[i];
if(temp==1)
if(note[i]!
=0)
x[i]=x[i]+time();
chbag++;
floattimes=0;
if(x[i]>
times)times=x[i];
sum=scount+chbag;
Thenumberofpackageswhichsentsucessfullyis:
\n"
scount<
Thetimeofsending10000packagessucessfullyis:
times<
Duringthisperiod,thenumberofalldatapackageis:
sum<
return0;
实验结果:
4.实编程设备和环境
1)编程语言C/C++/C#/Java/Matlab等均可;
2)编程环境Windows(MSVisual系列,VC/VB/VS.Net;
)和Linux(编辑器vi+编译器GCC)均可;
5.实验总结
分槽ALOHA把使用信道的时间分成离散的时间槽,槽长为一个帧所需的发送时间,每个站点只能在时间槽开始时才允许发送,冲突主要发生在时间槽的起点,本次实验实现了分槽ALOHA成功发送10000个数据包在随机情况下所需的总时间及发送数据包的总个数,深刻体会到了分槽ALOHA相对于纯ALOHA的优势,分槽ALOHA大幅降低了冲突的可能性,信道利用率提高了约一倍。
实验二网络路由层协议模拟实验
(1)掌握VB、VC++、VS或JAVA等集成开发环境编写路由仿真程序的方法;
(2)理解并掌握距离向量路由协议和链路状态路由协议的工作原理。
1)模拟距离向量路由算法的路由表交换过程,演示每轮交换后路由表的变化。
基本要求(动态生成网络拓扑图,节点间的距离随机生成。
从初始路由表开始,进行交换路由表,演示每轮交换后的路由表的变化。
观察和讨论多少轮交换后路由表稳定)
2)实现链路状态路由算法的模拟。
每个节点生成自己的链路状态分组,依据收到的链路状态表得到整体网络结构,在得到的整体网络结构上用最短路径算法,生成每个节点的路由表)
a.两个类edgevertex分别为边和结点
b.其中有三个主要的函数构建图BuildG,
最短路径ShortestP,
以及输出look函数
c.smallestdis()这个函数是最短距离函数
intsmallestdis(intdist[],ints[])
intmin=Infinite*2;
intnode;
for(inti=0;
i<
N;
if(s[i]==0&
&
dist[i]<
min)
min=dist[i];
node=i;
returnnode;
#include<
constintN=6,Infinite=1000;
classedge
public:
intnumver;
intweight;
edge*nextedge;
edge(intnum,intw,edge*next)
numver=num;
weight=w;
nextedge=next;
};
classvertex
intdistance[N];
charby[N];
edge*firstedge;
vertex(edge*next)
firstedge=next;
intsmallestdis(intdist[],ints[])
returnnode;
intmain(intargc,char*argv[])
vertex*v[N];
intm,w;
edge*e,*e1;
charc;
voidlook(vertex*v[]);
voidBuildG(vertex*v[]);
voidShortestP(vertex*v[],intv0);
BuildG(v);
ShortestP(v,i);
look(v);
do
pleaseinputanode:
cin>
>
c;
m=c-65;
e=v[m]->
firstedge;
if(e->
weight<
Infinite)
e->
weight+=Infinite;
w=e->
numver;
e1=v[w]->
while(e1->
numver!
=m)
e1=e1->
nextedge;
e1->
e=e->
while(e!
=NULL);
else
weight-=Infinite;
while(e1->
=m)
while(c!
='
0'
);
voidShortestP(vertex*v[],intv0)
edge*e;
ints[N],u,dist,father[N],num;
s[i]=0;
father[i]=v0;
v[v0]->
distance[i]=Infinite;
v[v0