版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、计 算 机 网 络实 验 报 告学生姓名 学 号 专业班级 指导教师 学 院 信息科学与工程学院 完成时间 2014年5月实验一 分槽ALOHA协议仿真实验 用于在多路访问信道上确定下一个使用者的协议属于数据链路层的一个子层,称为介质访问控制(Medium Access Control,MAC)子层,许多局域网都使用多路访问信道作为它的通信基础。最简单的信道分配方案是FDM(为每个站专门分配一段频率)和TDM(为每个站分配一个时槽),当站的数量比较大而且可变,或者流量具有突发性变化的时候,就需要用到纯ALOHA协议或分槽ALOHA协议。如果信道的状态可以被检测到,可以用到1-坚持型CSMA、非
2、坚持CSMA和P-坚持CSMA等协议。本实验模拟常见的几种MAC层多路访问协议,具体实验要求及内容如下。【实验目的】1. 掌握VB、VC+、VS或JAVA等集成开发环境编写仿真程序的方法;2. 理解并掌握分槽ALOHA协议原理。【实验内容】编写仿真程序,对一定网络环境下MAC层的多路访问协议的分槽ALOHA协议进行实现。通过仿真,学习协议采取的介质访问管理,包括介质分配和冲突解决机制,并对协议的性能与理论结果进行比较分析。【编程语言和环境】1. 编程语言C/C+/C#/Java/Matlab等均可;2. 编程环境Windows(MS Visual系列,VC/VB/VS.Net;)和Linux(
3、编辑器vi+编译器GCC)均可;【实验报告】所交实验报告内容包括:1. 实验目的与要求;2. 实验内容与实现原理;3. 实验具体设计实现及结果(含流程图及关键代码说明);4. 实验设备与实验环境;5. 实验总结1.实验内容与原理设置各站点初始产生包的时间点及产生包的时间间隔(均为随机值),得到所有站点成功发送1000个数据包的总时间以及这段时间内所有数据包的个数(包括各站点每次新产生的包以及由于冲突而重发的包),从而计算出每包时内尝试次数及其对应的吞吐量。2. 实验具体设计实现及结果#include <iostream>#include<time.h>#include&
4、lt;stdlib.h>using namespace std;#define MAX_PORT_NUM 5class Portpublic:float P;/站点发包概率 0<P<1int Apply;/站点状态0=空闲,1=请求发送 float PackTime;int CountPackNum_Suc;int CountPackNum_Col;Port()P=0.5;CountPackNum_Suc=0;CountPackNum_Col=0;ChangeApply(0);Port(float p)P=p;CountPackNum_Suc=0;CountPackNum_C
5、ol=0;ChangeApply(0);void ChangeApply(float NowTime);void Port:ChangeApply(float NowTime)float P1=(rand()%1000)/1000.0;if(P1<P) Apply=1;else Apply=0;PackTime=NowTime;class SlottedAlohapublic: float SlotTime;float NowTime;int CurrentMAX_PORT_NUM;/记录当前时槽内要发送的包,及发包站点,成为“包缓存”int CountAllPort_suc;int C
6、ountAllPort_all; SlottedAloha(float t)SlotTime=t;NowTime=0;CountAllPort_suc=0;CountAllPort_all=0;void ALOHA(Port prt,int n);void SlottedAloha:ALOHA(Port prt,int n)for(int i=0;i+)/用一个死循环代表时间流逝,如果成功发送包达到1000则break NowTime=SlotTime*i;int PackLen=0;/记录时槽内要发包的总长度(个数) for(int k=0;k<n;k+)if(prtk.Apply=1
7、&&prtk.PackTime=NowTime) Currentk=1;PackLen+; else Currentk=0;if(PackLen=1)/只有一个包,可以发 for(int k=0;k<n;k+)if(Currentk=1) /从“包缓存”中找出要发的包 prtk.Apply=0;/发送成功,此站点状态变为空闲 prtk.ChangeApply(NowTime+SlotTime*(rand()%n+1);/随机下一个发包时间 prtk.CountPackNum_Suc+;/成功数+ else if(prtk.Apply=0) /当前不发又处于空闲的站点就测试
8、下一个时间点是否发包 prtk.ChangeApply(NowTime+SlotTime);else if(PackLen>1)/有多个包,冲突 for(int k=0;k<n;k+)/给所有当前冲突的包下一个随机发送时间 if(Currentk=1) prtk.ChangeApply(NowTime+SlotTime*(rand()%n+1);prtk.CountPackNum_Col+; /冲突数+ else if(prtk.Apply=0) prtk.ChangeApply(NowTime+SlotTime); else if(PackLen=0)/无包发送 for(int
9、k=0;k<n;k+) if(prtk.Apply=0) prtk.ChangeApply(NowTime+SlotTime);CountAllPort_suc=0;CountAllPort_all=0;for(int k=0;k<n;k+)/计算是成功发送包数是否达到1000 CountAllPort_suc+=prtk.CountPackNum_Suc;CountAllPort_all+=prtk.CountPackNum_Suc+prtk.CountPackNum_Col;if(CountAllPort_suc>=1000) break;/以下是主函数 int main
10、(int argc, char *argv)srand(int)time(0);Port prt3;prt0=Port(0.2);prt1=Port(0.2);prt2=Port(0.2);/设有三个站点,每个时槽内发包概率为0.2 SlottedAloha A(1.0);/创建时槽,时槽长度为1 A.ALOHA(prt,3);float G,S;G=A.CountAllPort_all/A.NowTime;S=A.CountAllPort_suc/A.NowTime;cout<<"成功发送包"<<A.CountAllPort_suc<<
11、"个,n冲突包" <<A.CountAllPort_all-A.CountAllPort_suc <<"个,n总共发送包"<<A.CountAllPort_all<<"个。n"<<endl; cout<<"每包时尝试次数G = "<<G<<endl;cout<<"吞吐量S = "<<S<<endl;getchar();return 0;实验结果截图:3. 实验总结这
12、个分槽ALOHA仿真模拟实验难度比较大,就算对此协议比较了解,但要通过编程来实现,也不是容易的事。况且以前从未做过类似的程序设计,对于我来说是个不小的挑战。经过很久的设计、讨论和尝试,我总算在截止时间前完成了任务。我的程序采用循环来代表时间流逝,用随机数来判断站点是否发包,成功地模拟了分槽ALOHA在物理介质的运行情况。我的主程序比较随意,主要是为了测试,所以没有设多个情况。默认只有三个站点,每个站点以0.2的概率发包,所以理论的G=0.6,S=0.329,而实际测试情况出入很小,符合理论预期,所以实验结果很成功!如果进一步修改,可以测试不同的G和S,从而画出曲线,但限于时间和水平(C+中还不
13、知道如何画图),这个环节暂时无法实现。实验二 网络路由层协议模拟实验 网络路由算法是路由器工作的核心,本实验针对因特网常用的距离向量路由算法和链路状态路由算法进行模拟实现,进一步掌握其工作原理及其相关性能。【实验目的和要求】1. 掌握VB、VC+、VS或JAVA等集成开发环境编写路由仿真程序的方法;2. 理解并掌握距离向量路由协议和链路状态路由协议的工作原理。【实验内容】(1,2任选其一实现)1.模拟距离向量路由算法的路由表交换过程,演示每轮交换后路由表的变化。基本要求(动态生成网络拓扑图,节点间的距离随机生成。从初始路由表开始,进行交换路由表,演示每轮交换后的路由表的变化。观察和讨论多少轮交
14、换后路由表稳定)2.实现链路状态路由算法的模拟。基本要求(动态生成网络拓扑图,节点间的距离随机生成。每个节点生成自己的链路状态分组,依据收到的链路状态表得到整体网络结构,在得到的整体网络结构上用最短路径算法,生成每个节点的路由表)【编程语言和环境】1. 编程语言C/C+/C#/Java等均可;2. 编程环境Windows(MS Visual系列,VC/VB/VS.Net;)和Linux(编辑器vi+编译器GCC)均可;【实验报告】所交实验报告内容包括:1. 实验目的与要求;2. 实验内容与实现原理;3. 实验具体设计实现及结果(含流程图及关键代码说明);4. 实验设备与实验环境;5. 实验总结
15、1.实验内容与原理我选择的实验1,模拟距离向量路由算法。矢量路由算法是这样工作的:每个路由维护一张表(即一个矢量),列出了当前已知到每个目标的最佳距离,以及所使用的链路。这些表通过与邻居之间相互交换信息而不断被更新,最终每个路由器都了解到达每个目的地的最佳链路。2. 实验具体设计实现及结果#include <iostream>#include <string>using namespace std;#define INFINITY -1#define MAX_VERTEX_NUM 10typedef enumDG,DN,UDG,UDN GraphKind; /有向图,有
16、向网,无向图,无向网typedef int VRType;typedef string VertexType;struct ArcCellVRType adj;/InfoType *info; ;class MGraphpublic:/private:VertexType vexsMAX_VERTEX_NUM;ArcCell arcMAX_VERTEX_NUMMAX_VERTEX_NUM;int vexnum;int arcnum;GraphKind kind;/public:void CreateGraph_1();bool CheckArc(int a,int b);void MGraph
17、:CreateGraph_1()vexnum=7;arcnum=11;for(int i=0;i<7;i+) vexsi='A'+i;for(int i=0;i<7;i+) arcii.adj=0;arc01.adj=4;arc02.adj=INFINITY;arc03.adj=9;arc04.adj=2;arc05.adj=INFINITY;arc06.adj=INFINITY;arc12.adj=2;arc13.adj=1;arc14.adj=INFINITY;arc15.adj=INFINITY;arc16.adj=8;arc23.adj=INFINITY;a
18、rc24.adj=10;arc25.adj=INFINITY;arc26.adj=6;arc34.adj=7;arc35.adj=5;arc36.adj=INFINITY;arc45.adj=INFINITY;arc46.adj=INFINITY;arc56.adj=3;for(int i=1;i<7;i+)for(int j=0;j<i;j+) arcij.adj=arcji.adj;for(int i=0;i<7;i+)for(int j=0;j<7;j+) cout<<arcij.adj<<','cout<<
19、39;n'cout<<endl;bool MGraph:CheckArc(int a,int b)if(arcab.adj!=-1&&arcab.adj!=0)return true;else return false;struct RouterTableint distance; int via_RouterID;/记录需经由的最短路径 ;class Routerpublic:RouterTable tableMAX_VERTEX_NUM;/记录此路由节点到其他节点的最短路径,下标为其他节点ID,到自己为0 int RouterID;Router()Rou
20、terID=-1;Router(MGraph &G,int ID);void ObtainAdjRt(Router &R,int ID,int vexnum);void PrintTable(int vexnum);/void DVR(Router R, int RtNum);Router:Router(MGraph &G,int ID)RouterID=ID;for(int j=0;j<G.vexnum;j+)tablej.distance=G.arcIDj.adj;if(tablej.distance=-1)tablej.via_RouterID=-1;els
21、e tablej.via_RouterID=j;void Router:ObtainAdjRt(Router &R,int ID,int vexnum)/获取路由表的函数,R是自己的邻居节点 for(int j=0;j<vexnum;j+)if(tablej.distance=-1&&R.tablej.distance>0)tablej.distance=tableR.RouterID.distance+R.tablej.distance; tablej.via_RouterID=R.RouterID;else if(tablej.distance>R
22、.tablej.distance&&R.tablej.distance!=-1)/如果邻居节点有到j节点更短的距离 if(tablej.distance>tableR.RouterID.distance+R.tablej.distance) tablej.distance=tableR.RouterID.distance+R.tablej.distance; tablej.via_RouterID=R.RouterID; void Router:PrintTable(int vexnum)/输出这个路由器的路由表 for(int i=0;i<vexnum;i+)cout<<tablei.distance&
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二四年度草牧场养殖风险评估合同
- 靶向表观遗传修饰治疗策略
- 二零二四年度阀门井施工及质量保证合同3篇
- 二零二四年度商场店铺窗帘定制采购合同
- 2024年度技术开发合同:虚拟现实应用研究2篇
- 2024年度特许经营及技术服务合同标的及行政程序2篇
- 2024版商品房买卖合同协议书
- 二零二四年医疗健康服务大数据平台建设合同2篇
- 二零二四年度合伙协议合同精解
- 2024年度融资租赁合同:某汽车企业新能源汽车租赁
- 新概念第二册第61课 (共33张PPT)
- 静脉炎的预防及处理课件
- 《赤壁赋》《登泰山记》群文教学课件-统编版高中语文必修上册
- 园长课程领导力课件
- 部编版八年级语文上册全册习题精编课件含答案
- UN38.3 金属锂电池和锂离子电池组-中英文对照版
- 臀位分娩课件-
- 大学生节能减排科技竞赛作品申报书
- 单位工程竣工验收证明书(完整版)
- 小学数学北师大三年级上册数学好玩《校园中的测量》活动设计树德小学张三莉
- 大型机械租赁供应商考评表
评论
0/150
提交评论