1、编写仿真程序,对一定网络环境下MAC层的多路访问协议的分槽ALOHA协议进行实现。通过仿真,学习协议采取的介质访问管理,包括介质分配和冲突解决机制,并对协议的性能与理论结果进行比较分析。实验原理:分槽Aloha的基本思想是把信道时间分成离散的时间槽,槽长为一个帧所需的发送时间。每个站点只能在时槽开始时才允许发送。其他过程与纯ALOHA协议相同。分槽Aloha的信道效率比纯Aloha要高。分槽Aloha的易受冲突区比纯Aloha小了一半。它的重发策略是等待一段随机的时间,然后重发;如再次冲突,则再等待一段随机的时间,直到重发成功为止,但是发送的时间也是在每个时间槽的开始。3.实验具体设计实现及结
2、果(含流程图及关键代码说明)关键代码说明 a. float time() ,这是一个产生随机时间的函数,用于初始化各个站点产生包的时间点 b. 在主函数main()函数中的while(count10000)函数是此程序的核心部分,此处的10000就是控制成功发送的数据包个数10000c. for(int i=0; in; i+) notei=0; if(xxic) cmp=xxi; r=i; 此处的for循环是用来选出最早产生数据包的站点d. if(temp=1) scount+; xr=xr+time(); else 此处的if-else函数是用来判断产生的数据包是否冲突,若冲突则执行els
3、e中的语句.源代码:#includetime.hstdlib.hiostreamusing namespace std;#define n 2float time() int j; srand(unsigned int)time(NULL); j=1+rand()%100; float t=(float)j/(float)100; return t;int main() int scount=0,sum=0,chbag=0,c,temp,noten,r=0; float xn; int yn; for(int i=0; i+) xi=time();ii+) coutxi ;endl; whil
4、e(scount10000) yi=(int)(xi*10)+1; temp=0; c=y0; notei=0; if(yitimes) times=xi; sum=scount+chbag;The number of packages which sent sucessfully is:nscountThe time of sending 10000 packages sucessfully is:timesDuring this period,the number of all data package is:sum return 0;实验结果:4.实编程设备和环境1) 编程语言C/C+/
5、C#/Java/Matlab等均可;2) 编程环境Windows(MS Visual系列,VC/VB/VS.Net;)和Linux(编辑器vi+编译器GCC)均可;5. 实验总结 分槽ALOHA把使用信道的时间分成离散的时间槽,槽长为一个帧所需的发送时间,每个站点只能在时间槽开始时才允许发送,冲突主要发生在时间槽的起点,本次实验实现了分槽ALOHA成功发送10000个数据包在随机情况下所需的总时间及发送数据包的总个数,深刻体会到了分槽ALOHA相对于纯ALOHA的优势,分槽ALOHA大幅降低了冲突的可能性,信道利用率提高了约一倍。实验二 网络路由层协议模拟实验(1)掌握VB、VC+、VS或JA
6、VA等集成开发环境编写路由仿真程序的方法;(2)理解并掌握距离向量路由协议和链路状态路由协议的工作原理。1)模拟距离向量路由算法的路由表交换过程,演示每轮交换后路由表的变化。基本要求(动态生成网络拓扑图,节点间的距离随机生成。从初始路由表开始,进行交换路由表,演示每轮交换后的路由表的变化。观察和讨论多少轮交换后路由表稳定)2)实现链路状态路由算法的模拟。每个节点生成自己的链路状态分组,依据收到的链路状态表得到整体网络结构,在得到的整体网络结构上用最短路径算法,生成每个节点的路由表) a. 两个类edge vertex分别为边和结点 b. 其中有三个主要的函数构建图BuildG,最短路径Shor
7、testP,以及输出look函数 c. smallestdis()这个函数是最短距离函数 int smallestdis(int dist, int s) int min = Infinite * 2; int node; for (int i = 0; i N; if (si = 0 & disti min) min = disti; node = i; return node;#include c; m = c - 65; e = vm-firstedge; if (e-weight weight += Infinite; w = e-numver; e1 = vw- while (e1-numver != m) e1 = e1-nextedge; e1- e = e- while (e != NULL); else weight -= Infinite; while( e1-= m ) while(c != 0);void ShortestP(vertex *v, int v0) edge *e; int sN, u, dist, fatherN, num; si = 0; fatheri = v0; vv0-distancei = Infinite; vv0
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1