計(jì)算機(jī)網(wǎng)絡(luò)實(shí)驗(yàn)報(bào)告_第1頁
計(jì)算機(jī)網(wǎng)絡(luò)實(shí)驗(yàn)報(bào)告_第2頁
計(jì)算機(jī)網(wǎng)絡(luò)實(shí)驗(yàn)報(bào)告_第3頁
計(jì)算機(jī)網(wǎng)絡(luò)實(shí)驗(yàn)報(bào)告_第4頁
計(jì)算機(jī)網(wǎng)絡(luò)實(shí)驗(yàn)報(bào)告_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、計(jì) 算 機(jī) 網(wǎng) 絡(luò)實(shí) 驗(yàn) 報(bào) 告學(xué)生姓名 學(xué) 號 專業(yè)班級 指導(dǎo)教師 學(xué) 院 信息科學(xué)與工程學(xué)院 完成時(shí)間 2014年5月實(shí)驗(yàn)一 分槽ALOHA協(xié)議仿真實(shí)驗(yàn) 用于在多路訪問信道上確定下一個(gè)使用者的協(xié)議屬于數(shù)據(jù)鏈路層的一個(gè)子層,稱為介質(zhì)訪問控制(Medium Access Control,MAC)子層,許多局域網(wǎng)都使用多路訪問信道作為它的通信基礎(chǔ)。最簡單的信道分配方案是FDM(為每個(gè)站專門分配一段頻率)和TDM(為每個(gè)站分配一個(gè)時(shí)槽),當(dāng)站的數(shù)量比較大而且可變,或者流量具有突發(fā)性變化的時(shí)候,就需要用到純ALOHA協(xié)議或分槽ALOHA協(xié)議。如果信道的狀態(tài)可以被檢測到,可以用到1-堅(jiān)持型CSMA、非

2、堅(jiān)持CSMA和P-堅(jiān)持CSMA等協(xié)議。本實(shí)驗(yàn)?zāi)M常見的幾種MAC層多路訪問協(xié)議,具體實(shí)驗(yàn)要求及內(nèi)容如下?!緦?shí)驗(yàn)?zāi)康摹?. 掌握VB、VC+、VS或JAVA等集成開發(fā)環(huán)境編寫仿真程序的方法;2. 理解并掌握分槽ALOHA協(xié)議原理?!緦?shí)驗(yàn)內(nèi)容】編寫仿真程序,對一定網(wǎng)絡(luò)環(huán)境下MAC層的多路訪問協(xié)議的分槽ALOHA協(xié)議進(jìn)行實(shí)現(xiàn)。通過仿真,學(xué)習(xí)協(xié)議采取的介質(zhì)訪問管理,包括介質(zhì)分配和沖突解決機(jī)制,并對協(xié)議的性能與理論結(jié)果進(jìn)行比較分析?!揪幊陶Z言和環(huán)境】1. 編程語言C/C+/C#/Java/Matlab等均可;2. 編程環(huán)境Windows(MS Visual系列,VC/VB/VS.Net;)和Linux(

3、編輯器vi+編譯器GCC)均可;【實(shí)驗(yàn)報(bào)告】所交實(shí)驗(yàn)報(bào)告內(nèi)容包括:1. 實(shí)驗(yàn)?zāi)康呐c要求;2. 實(shí)驗(yàn)內(nèi)容與實(shí)現(xiàn)原理;3. 實(shí)驗(yàn)具體設(shè)計(jì)實(shí)現(xiàn)及結(jié)果(含流程圖及關(guān)鍵代碼說明);4. 實(shí)驗(yàn)設(shè)備與實(shí)驗(yàn)環(huán)境;5. 實(shí)驗(yàn)總結(jié)1.實(shí)驗(yàn)內(nèi)容與原理設(shè)置各站點(diǎn)初始產(chǎn)生包的時(shí)間點(diǎn)及產(chǎn)生包的時(shí)間間隔(均為隨機(jī)值),得到所有站點(diǎn)成功發(fā)送1000個(gè)數(shù)據(jù)包的總時(shí)間以及這段時(shí)間內(nèi)所有數(shù)據(jù)包的個(gè)數(shù)(包括各站點(diǎn)每次新產(chǎn)生的包以及由于沖突而重發(fā)的包),從而計(jì)算出每包時(shí)內(nèi)嘗試次數(shù)及其對應(yīng)的吞吐量。2. 實(shí)驗(yàn)具體設(shè)計(jì)實(shí)現(xiàn)及結(jié)果#include <iostream>#include<time.h>#include&

4、lt;stdlib.h>using namespace std;#define MAX_PORT_NUM 5class Portpublic:float P;/站點(diǎn)發(fā)包概率 0<P<1int Apply;/站點(diǎn)狀態(tài)0=空閑,1=請求發(fā)送 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;/記錄當(dāng)前時(shí)槽內(nèi)要發(fā)送的包,及發(fā)包站點(diǎn),成為“包緩存”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+)/用一個(gè)死循環(huán)代表時(shí)間流逝,如果成功發(fā)送包達(dá)到1000則break NowTime=SlotTime*i;int PackLen=0;/記錄時(shí)槽內(nèi)要發(fā)包的總長度(個(gè)數(shù)) for(int k=0;k<n;k+)if(prtk.Apply=1

7、&&prtk.PackTime=NowTime) Currentk=1;PackLen+; else Currentk=0;if(PackLen=1)/只有一個(gè)包,可以發(fā) for(int k=0;k<n;k+)if(Currentk=1) /從“包緩存”中找出要發(fā)的包 prtk.Apply=0;/發(fā)送成功,此站點(diǎn)狀態(tài)變?yōu)榭臻e prtk.ChangeApply(NowTime+SlotTime*(rand()%n+1);/隨機(jī)下一個(gè)發(fā)包時(shí)間 prtk.CountPackNum_Suc+;/成功數(shù)+ else if(prtk.Apply=0) /當(dāng)前不發(fā)又處于空閑的站點(diǎn)就測試

8、下一個(gè)時(shí)間點(diǎn)是否發(fā)包 prtk.ChangeApply(NowTime+SlotTime);else if(PackLen>1)/有多個(gè)包,沖突 for(int k=0;k<n;k+)/給所有當(dāng)前沖突的包下一個(gè)隨機(jī)發(fā)送時(shí)間 if(Currentk=1) prtk.ChangeApply(NowTime+SlotTime*(rand()%n+1);prtk.CountPackNum_Col+; /沖突數(shù)+ else if(prtk.Apply=0) prtk.ChangeApply(NowTime+SlotTime); else if(PackLen=0)/無包發(fā)送 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+)/計(jì)算是成功發(fā)送包數(shù)是否達(dá)到1000 CountAllPort_suc+=prtk.CountPackNum_Suc;CountAllPort_all+=prtk.CountPackNum_Suc+prtk.CountPackNum_Col;if(CountAllPort_suc>=1000) break;/以下是主函數(shù) 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);/設(shè)有三個(gè)站點(diǎn),每個(gè)時(shí)槽內(nèi)發(fā)包概率為0.2 SlottedAloha A(1.0);/創(chuàng)建時(shí)槽,時(shí)槽長度為1 A.ALOHA(prt,3);float G,S;G=A.CountAllPort_all/A.NowTime;S=A.CountAllPort_suc/A.NowTime;cout<<"成功發(fā)送包"<<A.CountAllPort_suc<<

11、"個(gè),n沖突包" <<A.CountAllPort_all-A.CountAllPort_suc <<"個(gè),n總共發(fā)送包"<<A.CountAllPort_all<<"個(gè)。n"<<endl; cout<<"每包時(shí)嘗試次數(shù)G = "<<G<<endl;cout<<"吞吐量S = "<<S<<endl;getchar();return 0;實(shí)驗(yàn)結(jié)果截圖:3. 實(shí)驗(yàn)總結(jié)這

12、個(gè)分槽ALOHA仿真模擬實(shí)驗(yàn)難度比較大,就算對此協(xié)議比較了解,但要通過編程來實(shí)現(xiàn),也不是容易的事。況且以前從未做過類似的程序設(shè)計(jì),對于我來說是個(gè)不小的挑戰(zhàn)。經(jīng)過很久的設(shè)計(jì)、討論和嘗試,我總算在截止時(shí)間前完成了任務(wù)。我的程序采用循環(huán)來代表時(shí)間流逝,用隨機(jī)數(shù)來判斷站點(diǎn)是否發(fā)包,成功地模擬了分槽ALOHA在物理介質(zhì)的運(yùn)行情況。我的主程序比較隨意,主要是為了測試,所以沒有設(shè)多個(gè)情況。默認(rèn)只有三個(gè)站點(diǎn),每個(gè)站點(diǎn)以0.2的概率發(fā)包,所以理論的G=0.6,S=0.329,而實(shí)際測試情況出入很小,符合理論預(yù)期,所以實(shí)驗(yàn)結(jié)果很成功!如果進(jìn)一步修改,可以測試不同的G和S,從而畫出曲線,但限于時(shí)間和水平(C+中還不

13、知道如何畫圖),這個(gè)環(huán)節(jié)暫時(shí)無法實(shí)現(xiàn)。實(shí)驗(yàn)二 網(wǎng)絡(luò)路由層協(xié)議模擬實(shí)驗(yàn) 網(wǎng)絡(luò)路由算法是路由器工作的核心,本實(shí)驗(yàn)針對因特網(wǎng)常用的距離向量路由算法和鏈路狀態(tài)路由算法進(jìn)行模擬實(shí)現(xiàn),進(jìn)一步掌握其工作原理及其相關(guān)性能?!緦?shí)驗(yàn)?zāi)康暮鸵蟆?. 掌握VB、VC+、VS或JAVA等集成開發(fā)環(huán)境編寫路由仿真程序的方法;2. 理解并掌握距離向量路由協(xié)議和鏈路狀態(tài)路由協(xié)議的工作原理。【實(shí)驗(yàn)內(nèi)容】(1,2任選其一實(shí)現(xiàn))1.模擬距離向量路由算法的路由表交換過程,演示每輪交換后路由表的變化?;疽螅▌討B(tài)生成網(wǎng)絡(luò)拓?fù)鋱D,節(jié)點(diǎn)間的距離隨機(jī)生成。從初始路由表開始,進(jìn)行交換路由表,演示每輪交換后的路由表的變化。觀察和討論多少輪交

14、換后路由表穩(wěn)定)2.實(shí)現(xiàn)鏈路狀態(tài)路由算法的模擬?;疽螅▌討B(tài)生成網(wǎng)絡(luò)拓?fù)鋱D,節(jié)點(diǎn)間的距離隨機(jī)生成。每個(gè)節(jié)點(diǎn)生成自己的鏈路狀態(tài)分組,依據(jù)收到的鏈路狀態(tài)表得到整體網(wǎng)絡(luò)結(jié)構(gòu),在得到的整體網(wǎng)絡(luò)結(jié)構(gòu)上用最短路徑算法,生成每個(gè)節(jié)點(diǎn)的路由表)【編程語言和環(huán)境】1. 編程語言C/C+/C#/Java等均可;2. 編程環(huán)境Windows(MS Visual系列,VC/VB/VS.Net;)和Linux(編輯器vi+編譯器GCC)均可;【實(shí)驗(yàn)報(bào)告】所交實(shí)驗(yàn)報(bào)告內(nèi)容包括:1. 實(shí)驗(yàn)?zāi)康呐c要求;2. 實(shí)驗(yàn)內(nèi)容與實(shí)現(xiàn)原理;3. 實(shí)驗(yàn)具體設(shè)計(jì)實(shí)現(xiàn)及結(jié)果(含流程圖及關(guān)鍵代碼說明);4. 實(shí)驗(yàn)設(shè)備與實(shí)驗(yàn)環(huán)境;5. 實(shí)驗(yàn)總結(jié)

15、1.實(shí)驗(yàn)內(nèi)容與原理我選擇的實(shí)驗(yàn)1,模擬距離向量路由算法。矢量路由算法是這樣工作的:每個(gè)路由維護(hù)一張表(即一個(gè)矢量),列出了當(dāng)前已知到每個(gè)目標(biāo)的最佳距離,以及所使用的鏈路。這些表通過與鄰居之間相互交換信息而不斷被更新,最終每個(gè)路由器都了解到達(dá)每個(gè)目的地的最佳鏈路。2. 實(shí)驗(yàn)具體設(shè)計(jì)實(shí)現(xiàn)及結(jié)果#include <iostream>#include <string>using namespace std;#define INFINITY -1#define MAX_VERTEX_NUM 10typedef enumDG,DN,UDG,UDN GraphKind; /有向圖,有

16、向網(wǎng),無向圖,無向網(wǎng)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;/記錄需經(jīng)由的最短路徑 ;class Routerpublic:RouterTable tableMAX_VERTEX_NUM;/記錄此路由節(jié)點(diǎn)到其他節(jié)點(diǎn)的最短路徑,下標(biāo)為其他節(jié)點(diǎn)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)/獲取路由表的函數(shù),R是自己的鄰居節(jié)點(diǎn) 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)/如果鄰居節(jié)點(diǎn)有到j(luò)節(jié)點(diǎn)更短的距離 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)/輸出這個(gè)路由器的路由表 for(int i=0;i<vexnum;i+)cout<<tablei.distance&

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論