計算機網(wǎng)絡實驗報告_第1頁
計算機網(wǎng)絡實驗報告_第2頁
計算機網(wǎng)絡實驗報告_第3頁
計算機網(wǎng)絡實驗報告_第4頁
計算機網(wǎng)絡實驗報告_第5頁
已閱讀5頁,還剩7頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

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

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

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

4、lt;stdlib.h>using namespace std;#define MAX_PORT_NUM 5class Portpublic:float P;/站點發(fā)包概率 0<P<1int Apply;/站點狀態(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;/記錄當前時槽內(nèi)要發(fā)送的包,及發(fā)包站點,成為“包緩存”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+)/用一個死循環(huán)代表時間流逝,如果成功發(fā)送包達到1000則break NowTime=SlotTime*i;int PackLen=0;/記錄時槽內(nèi)要發(fā)包的總長度(個數(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)/只有一個包,可以發(fā) for(int k=0;k<n;k+)if(Currentk=1) /從“包緩存”中找出要發(fā)的包 prtk.Apply=0;/發(fā)送成功,此站點狀態(tài)變?yōu)榭臻e prtk.ChangeApply(NowTime+SlotTime*(rand()%n+1);/隨機下一個發(fā)包時間 prtk.CountPackNum_Suc+;/成功數(shù)+ else if(prtk.Apply=0) /當前不發(fā)又處于空閑的站點就測試

8、下一個時間點是否發(fā)包 prtk.ChangeApply(NowTime+SlotTime);else if(PackLen>1)/有多個包,沖突 for(int k=0;k<n;k+)/給所有當前沖突的包下一個隨機發(fā)送時間 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+)/計算是成功發(fā)送包數(shù)是否達到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);/設有三個站點,每個時槽內(nèi)發(fā)包概率為0.2 SlottedAloha A(1.0);/創(chuàng)建時槽,時槽長度為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、"個,n沖突包" <<A.CountAllPort_all-A.CountAllPort_suc <<"個,n總共發(fā)送包"<<A.CountAllPort_all<<"個。n"<<endl; cout<<"每包時嘗試次數(shù)G = "<<G<<endl;cout<<"吞吐量S = "<<S<<endl;getchar();return 0;實驗結果截圖:3. 實驗總結這

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

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

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

15、1.實驗內(nèi)容與原理我選擇的實驗1,模擬距離向量路由算法。矢量路由算法是這樣工作的:每個路由維護一張表(即一個矢量),列出了當前已知到每個目標的最佳距離,以及所使用的鏈路。這些表通過與鄰居之間相互交換信息而不斷被更新,最終每個路由器都了解到達每個目的地的最佳鏈路。2. 實驗具體設計實現(xiàn)及結果#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é)點到其他節(jié)點的最短路徑,下標為其他節(jié)點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é)點 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é)點有到j節(jié)點更短的距離 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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論