網(wǎng)絡仿真與模擬實驗報告_第1頁
網(wǎng)絡仿真與模擬實驗報告_第2頁
網(wǎng)絡仿真與模擬實驗報告_第3頁
網(wǎng)絡仿真與模擬實驗報告_第4頁
網(wǎng)絡仿真與模擬實驗報告_第5頁
已閱讀5頁,還剩61頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、網(wǎng)絡仿真和模擬課程設計實驗報告學院:計算機學院專業(yè):網(wǎng)絡工程組員(學號): 王榮達(13055522)、李晨陽(13055318)、張勇安(13055534)指導老師:鄭秋華完成時間2016年6月30日目錄 TOC o 1-5 h z HYPERLINK l bookmark1 o Current Document 網(wǎng)絡仿真和模擬課程設計實驗報告1 HYPERLINK l bookmark4 o Current Document 目錄2 HYPERLINK l bookmark13 o Current Document 一、NS2模擬環(huán)境搭建1 HYPERLINK l bookmark19 o

2、 Current Document 安裝 cygwin1 HYPERLINK l bookmark31 o Current Document 安裝 NS27 HYPERLINK l bookmark43 o Current Document 二、不同版本的TCP協(xié)議仿真模擬112.1實驗目的11 HYPERLINK l bookmark47 o Current Document 2.1實驗步驟11 HYPERLINK l bookmark55 o Current Document 2.2實驗過程及結(jié)果比較11三、添加Ping協(xié)議18 HYPERLINK l bookmark104 o Curr

3、ent Document 3.1實驗目的18 HYPERLINK l bookmark82 o Current Document 3.2實驗步驟18 HYPERLINK l bookmark101 o Current Document 四、添加 Application 和 Agent 協(xié)議234.1實驗目的23 HYPERLINK l bookmark107 o Current Document 4.2實驗步驟23 HYPERLINK l bookmark139 o Current Document 附錄A29 HYPERLINK l bookmark142 o Current Documen

4、t 附錄B32 HYPERLINK l bookmark145 o Current Document 附錄C36 HYPERLINK l bookmark148 o Current Document 附錄D46 HYPERLINK l bookmark154 o Current Document 附錄E47 HYPERLINK l bookmark160 o Current Document 附錄F50一、NS2模擬環(huán)境搭建在Windows操作系統(tǒng)下安裝比較繁瑣,需要根據(jù)NS不同版本,下載相關(guān)補 丁進行修正。下面介紹在 Windows下安裝NS-allinone過程。1.1 安裝 cygwin

5、1)點擊安裝setup.exe文件,如圖1所示:圖1執(zhí)行setup.exe文件2)請點擊“下一步”按鈕,如圖2所示:匚 Cygwin Setup - Choose Installation TypeChoose A Download SourceChoose whetherto install or download from the internet, or install from files in a local directory.Install from Internet:熟口質(zhì)蟲4傾照理W.b.u.K既土旭Uybum.舊Download Without InstallingInst

6、all from Lpcal Directory上一步但)下一步/)M 取消圖2安裝步驟23)選擇“Install from Internet”單選按鈕,如圖3所示:匚 Cygwin Setup - Choose Installation TypeChoose A Download SourceChoose whetherto install or download from the internet, or install from files in a local directory.6-Install from Interneti袖口旭臉史4傾黑理!.場.K既土旭廿姬照*Download

7、 Without InstallingInstall from Lacal Directory上一步遂)|下一步/) 取消圖3安裝步驟34)點擊“下一步”按鈕,如圖4所示:圖4安裝步驟45)點擊“下一步”按鈕,如圖5所示:匚 Cygwin Setup - Select LdcsI Package DirectoryBrowse.Select Local Package DirectoiySelect a directory where you want Setup to stone the installation files it downloads. The directory will

8、be created if it does not already exist.Local Package DirectoryD:Downloads上一步遂)|下一步/) 取消圖5安裝步驟56)點擊“下一步”按鈕,如圖6所示:圖6安裝步驟67)點擊“下一步”按鈕,如圖7所示:圖7安裝步驟78)點擊“下一步”按鈕,如圖8所示:圖8安裝步驟89)選擇“Curr”,點擊“View”按鈕,使右方出現(xiàn)“full”,然后把最下角 的隱藏過期包組件那個勾去掉,如圖9所示:匚 Cygwin Setup - Select PackagesSelect PackagesESelect packages to in

9、stallSearch Keep 通 Qjrr 。與 View FullCurrentNewBin.? Src? Categori esSi zePackage砂 SkipriiahiqG:m 彌10k 2048_cli: 2SkipriiahiqDebug28k 2048- cl i - de砂 SkipnijniijG:diri e e1_, 37Uk 2048- qt: 204 Skipn.iuhiqDebug2,253k 2048-qt_ deb4Skipn.iuhiqDebug3,964k 4ti2-iiebugi4 SkipnijniQAudi 口109k Atomi cF:ii-

10、sl4 SkipnijniQDebug266k Atomi cF:ii-slSkipn/a n/Q Libs., Math105k CUmt: CUniSkipriiahiqDebug72k CUni t_ debug4 Skipn.iuhiqLevel, Libs, Sys tern, 1J694k ELFI0: ELF4 SkipnjQn/Q GNOME310k XorL2: GN04Skipn/QniQDebug661k lXorLt2-debu4 Skipn/QniQNet27k GeoIF: Geo I4Skipn/QniQNet24., 288k GeoIF-databSkipri

11、iahiqDebug104k GecIF-debugSkipn.iunfaGraph,827k Graphics Mag T* 1卜n地導職gl琪目pggK.陽感|上一步II下一步 1 取消 1圖9安裝步驟910)由于是初次接觸該軟件,在不清楚各個包作用的情況下將所有的包都安裝,然后點擊“下一步”按鈕,如圖10所示:圖10安裝步驟1011)安裝結(jié)束后,點擊“完成”按鈕,如圖11所示:圖11安裝步驟111.2安裝NS21)解壓縮并改變路徑到ns-allinone-2.35,如圖12所示:127128129130131 132133134135136 | |138日139140141圖12切換到N

12、S目錄2)修改 ls.h 錯誤代碼行(進入 C:cygwinhome/Administartor/ns-allinone -2.35/ns-2.35/linkstate/ls.h 第 137 行):/ this next typedef of iterator seems estraneous but is required by gcc-2.96 typedef typename mapKeyj T, less : : iterator iterator: typedef pair pair_iterator_bool: iterator insert (const Key & key co

13、nst T & item) typename baseMap: :value_type v(key item);pair_iterator_bool ib = baseMap:insert(v): return ib. second ? ib. first : baseMap: : end ():void eraseAll () this-erase (baseMap:beginOj baseMap: end() : T* findPtr(Key key) iterator it = baseMap: find (key):return (it = baseMap: end() ? (T *)

14、NULL : & (*it). second):142;3)安裝指令,進行編譯安裝,如圖13所示:圖13進行編譯安裝4)重新編譯完后,如圖14所示:圖14編譯結(jié)果5)設置環(huán)境變量:6)測試NS2是否安裝成功,如圖15所示:Main Options VT Options VT FontsAdministrator-PC-20160610QVCE /ns-allinone-2t35 $ nsX1+已停止nsAdministrator-PC-20160610QVCE w/ns-allinone-2t35圖15進入圖形化接口窗口7)在跳出的對話框中,輸Anam,系統(tǒng)跳出一個圖形界面,如圖16所示:圖1

15、6 Nam界面1回8)在窗口中輸入gnuplot,結(jié)果如圖17所示,則NS2安裝成功:釜 /ns-allinone-235Main Options VT Options VT FontsAdministrator-PC-20160610QVCE /ns-allinone-2t35 $ nsX1+已停止nsI Administrator-PC-20160610QVCE w/ns-allinone-2t35$ namAdministratorPC-20160610QVCE w/ns-allinone-2t35$ gnuplotGNUPLOTVersion 5+0 patchlevel 3 last

16、 modified 2016-02-21Copyright (C) 1906-1993, 1998, 2004, 2007-2016Thomas Williams Colin Kelley and many othersgnuplot home: http:/www+gnuplot + infofaq, bugs etc: type help FAQimmediate help: type help (plot window: hit h)Terminal type set to xll gnuplot |、!二、不同版本的TCP協(xié)議仿真模擬2.1實驗目的通過本實驗了解如何利用OTcl腳本編寫

17、NS仿真案例。2.1實驗步驟NS2下不同版本的TCP協(xié)議的OTcl腳本編寫。在winx-server模式下鍵入命令:ns 文件名.tcl運行ns文件。對實驗結(jié)果進行分析比較。2.2實驗過程及結(jié)果比較 Tahoe執(zhí)行方法,如下所示:ns lab11.tcl Tahoe (lab11.tcl 文件代碼參考附錄 A,TCPV1)Administr-atorykz-20100502XQS /ns-al1inone-2+33/ns-2+33/tcl/ex/shi1i/labll $ nelabll+tcl Tahoeaverage throu9hput:346+4 Kbpsgnuplot 進入 gnup

18、lot提示符gnuplat set title Tahoe9muplot set xlabelgnuplot set 與】初巳】cwnd1 grfljplot set terwinaL giF Terntinal typs set to gif Options are nckcrop tnediun gmuplot set output cwnd-Tahoeif11 gnuplot plot cwnd-Tahoe,tr with linespoints會在目錄下生成gif圖片,見下面圖片比較。 Reno執(zhí)行方法,如下所示:Administratorykz-20100502XQS /ns-a11

19、inone-2133/ns-2133Ztc1/ex/shili/labll $ ns labll+tcl Renoaverage throughput:940 set relabel tie 9nuplot set gUbel 七wrcT enuplot set ttrmin*! gif TenoirMl tgp曰 set to gif Options are nocrop medium 1 gnupluO set output cwnd-Renti+gifM gnuplot lot cund-Rerwtr with lintspointsNewReno執(zhí)行方法,如下所示:(lab12.tcl

20、)Adm ini str-atorykz-20100502XQSHi nnne-2+33/ris-2+33/tc 1 /ex/sh i li/labl2$ ns labl2;+tcl Newreno on path: 16+44 packets average throughput: 956+8 Kbp$-gngkO sfft titlt *ffe*4?eno 9rM*lW 輯t xlabai tiM 曹呻S3圳1 cwrF 就setgifTernml type to gifOptionsnocrop 庭皿 ,9rx451ttutpot gnd-Nt曲trm.g訐-plot CMrtd-Nsw

21、refto+tr- with UnefpojritsSACK執(zhí)行方法,如下所示:Administr-atorykz-20100502XQS Vns-al 1 inone-2+33/ns-2+33/tcl/ex/shi 1 i/labl2 $ ns labl2+tcl Sack on path: 16+44 packets average throughput: 958+4 Kbps-9rtuploi set title Sack gplotwt jclabtl tiy ynuplot set ylatel %血” gplotset terwinl gif Tcrninal type set t

22、o gif*Options are nxnjp med 1 U *gnuplot set output 匚蛔-輪株禪件* qnuplotpl夙cwnd-Ssck uith linesointsVegas執(zhí)行方法,如下所示:(lab13 1.tcl)Administratorykz-20100502XQS w/ns-al1inone-2+33/ns-2.33/tcl/ex/shili/labl3 $ ns labl3_l+tclsocketerVM_5_104_centos experiment? ns labl3_l*tel average throughput: 298*4 Kbps ave

23、rage throughput: 678*4 Kbpsgnuplot set title “Vegas”gnuplot set xlabel time”gnuplot set ylabel cwnd”gnuplot set terminal gifgnuplot set output “cwnd-Vegas”gnuplotplot cwnd0.tr” with linespoints lt 1, “cwnd1.tr” with linespoints lt 2 Vegas和Re執(zhí)行方法,如下所示:(lab13 2.tcl)1 . ns lab13_2.tcl2.gnuplot set titl

24、e Vegas vs Reno”gnuplot set xlabel time”gnuplot set ylabel cwnd”gnuplot set terminal gifgnuplot set output “cwnd-Vegas-Reno”gnuplotplot cwnd-vegas.tr” with linespoints lt 1, “cwnd-reno.tr” with linespoints lt結(jié)果比較Tahoe012345678Q10time圖16 Tahoe的cwnd變化圖圖17 Reno的cwnd變化圖圖 18 TCP NewRenoSack25201510501210

25、86420012345678910time圖 19 SACKVegas;cwnd0.tr4-cwndl.tr 一*012345678910time2520151050vfegas-Reno10time圖21 Vegas與Reno的cwnd變化圖結(jié)果分析從Tahoe的cwnd變化圖(圖16)中我們可以看出,TCP的Congestion Window 值會呈現(xiàn)周期性的重復變化。開始時,先由Slow-start開始,cwnd超過Ssthresh 時進入Congestion Avoidance階段。由于傳送到網(wǎng)絡上的封包不斷地增加,當超 出允許能傳送到網(wǎng)絡上的個數(shù)時,路由器開始使用Drop-tail將

26、封包丟掉。當有 封包遺失時,Tahoe這個TCP版本會將ssthresh設為發(fā)現(xiàn)到封包遺失時的Window 值的1/2,接著將Window的值設為1。在Tahoe這個例子中,由于只要有封包 遺失,Cwnd的值就會被重置為1 (小于Ssthresh),因此每次封包遺失,Tahoe 都重新由slow-start開始。從Reno的cwnd變化圖(圖17)中看到,當檢測到封包遺失時,ssthresh 和cwnd的值會被設為先前cwnd值的1/2。因此在重送遺失的封包后,TCP Reno 會由 Congestion Avoidance 開始。由于結(jié)束 Fast recovery 后,Reno 的 cwn

27、d 由先 前cwnd值的1/2開始增加,所以得到的平均吞吐量較Tahoe為佳。從該圖中我 們還可以看到,當TCP的傳送端觀察到端點到端點的路徑并沒有擁塞的情況時 (沒有檢測到封包遺失),會持續(xù)地以累加的方式增加傳送速率。但是當檢測到 路徑擁塞的情況時,則以倍數(shù)的方式減少傳送速率。基于上述原因,TCP的擁塞 控制算法又常被稱為累加遞增-倍數(shù)遞減的算法。從TCP NewReno的cwnd變化圖(圖18)中我們可以看到,NewReno在收 到Partial ACK時,并不會立刻結(jié)束Fast-recovery,相反,NewReno的傳送端會 持續(xù)地重送Partial ACK之后的封包,直到將所有遺失的

28、封包重送后才會結(jié)束 Fast-recovery,這使得NewReno的傳送端在網(wǎng)絡有大量封包遺失時不需等待 Timeout就能更正此錯誤,減少大量封包遺失對傳輸效果所造成的影響NewReno 大約每一個RTT時間可重送一個遺失的封包,在Fast-recovery階段,若允許的 話,傳送端可以繼續(xù)送出新的封包,以增加Link的使用率。從TCP SACK的cwnd變化圖(圖19)中我們可以看到,在這個版本中, 加入了一個SACK選項,允許接收端在返回Duplicate ACK時,將已接收到的數(shù) 據(jù)區(qū)段(連續(xù)收到的數(shù)據(jù)范圍)返回給傳送端,數(shù)據(jù)區(qū)段與數(shù)據(jù)區(qū)段之間的間隔 就是接收端沒有收到的數(shù)據(jù)。通過這

29、些信息,傳送端就知道哪些是已經(jīng)收到的, 哪些是該重送的,因此SACK的傳送端可以在一個RTT時間之內(nèi)重送一個以上 的封包。從Vegas的圖形(圖20)中可以看到,第一條Vegas從0s開始執(zhí)行,10s 時結(jié)束。第二條Vegas在5s時才開始執(zhí)行,10s時結(jié)束。從圖中我們還可以看到, 在Slow-start階段,cwnd的值大約兩個RTT才會增加1倍。與Reno不同的是, 當Diff的值介于a與6之間時,Vegas的cwnd會持續(xù)維持在一個穩(wěn)定的狀態(tài), 這是因為,基本上Vegas的擁塞控制算法是一種“擁塞避免”的方法。從Vegas與Reno的cwnd的變化圖(圖21)中可以看到,Reno的 Wi

30、ndow 總是在較高的地方振蕩,而Vegas的Window總是在較低的位置。雖然根據(jù)研究 顯示,當網(wǎng)絡的通信都使用TCP Vegas時,整體的執(zhí)行效果會優(yōu)于TCP Reno, 這是因為TCP Vegas采取較為保守的作法避免封包遺失,并以此提高網(wǎng)絡的執(zhí)行 效果。但當TCP Vegas和Reno共存時,TCP Vegas并沒有辦法與TCP Reno公平 地競爭頻寬。造成這個問題的主要原因是,Reno使用了較具侵略性的擁塞控制 方法,TCP Reno的傳送端會持續(xù)地將封包送到網(wǎng)絡上直到發(fā)生擁塞。比較之下, Vegas的傳送端在網(wǎng)絡開始擁塞時就將傳送端的傳送速度降慢,以避免擁塞的情 形發(fā)生。因此,當

31、TCP Vegas與TCP Reno共存Vegas在效果上的表現(xiàn)總是會比 較差。三、添加Ping協(xié)議3.1實驗目的本實驗通過實現(xiàn)一個Ping協(xié)議來說明如何在NS2中添加新協(xié)議3.2實驗步驟一、在ns-2.35目錄下新建一個MyPing目錄,將老師給的文件MyPing.h和MyPing.cc 放到這個目錄里下。這兩個文件見 附錄D和E。(紅色字體為修訂處)文件說明:MyPing.h 中:定義了包頭結(jié)構(gòu):struct hdr_ping (char ret;double send_time;定義PingAgent類class PingAgent : public Agent (public:Ping

32、Agent();int command(int argc, const char*const* argv);void recv(Packet*, Handler*);protected:int off_ping_;MyPing.cc 中:定義 PingHeaderClass 類static class PingHeaderClass : public PacketHeaderClass (public:PingHeaderClass() : PacketHeaderClass(PacketHeader/Ping,sizeof(hdr_ping) ( class_pinghdr;定義PingCl

33、ass類static class PingClass : public TclClass (public:PingClass() : TclClass(Agent/Ping) TclObject* create(int, const char*const*) ( return (new PingAgent(); class_ping;定義PingAgent的實現(xiàn)PingAgent:PingAgent() : Agent(PT_PING)( bind(packetSize_, &size_);bind(off_ping_, &off_ping_);int PingAgent:command(in

34、t argc, const char*const* argv)(if (argc = 2) (if (strcmp(argv1, send) = 0) (return (Agent:command(argc, argv);void PingAgent:recv(Packet* pkt, Handler*) 修改 ns-2.35/common/packet.h 文件如圖找到相應的地方添加修改:(代碼前面的+表示添加,-表示刪除,下同) -200,7 4-200,8 施 static const packet_t PT_DCCP_RESET = 71; static const packet_t

35、PT_MDART = 72; insert new packet types here-static packet* PT_NTYPE = 73; / This MUST be the LAST one +static const packet_t PT_MYPING = 73;+static packet_t 一 Paccess (offset );/ Multimedia Header Classstatic class Mult line di aHeader Class : public PacketHeader Class public:Mult line di aHeader Cl

36、ass () : PacketHeaderC lasssizeof (hdr_iim) ) ( bind_offset (hdr_inn: : of f set_);) 一 一 class imihdr;編寫 MmApp Senderclass SendTlmer : public Tinier Handler public :SendTimer (MmApp* t) : TitnerHandler () , t._ (t) inline virtual void expire(Event*);protected:MttiApp* t_;; 一void SendTlmer:expire(Eve

37、ntt_- 3 e nd_mri_p kt ();class MnApp : public Application ( public:HmApp(); private:SendTiiner snd tinier ;t&nApp : : MmApp () : running_ (0) , snd_tinier_ (this) f ack_tiiner_ (this) 一 一 bind_tow (rrrate0_rr, firate );bind_bw (rprate4_r firate 4);bind (,rpktsize_r pktsize_);bind bool (random rr, fi

38、random );void MiApp : : SEnd_niri_pkt () hdr_imi ttih_buf;if (running_) (agent_-sendinsg (pktsize_, (char*) inh_buf) ;/ send to UDP/ Reschedule the send_pkt timer doukile next_time_ = next_snd_time ();if (next time 0) snd tinier . reached (next time );編寫 MmApp Receiver具體見附錄。編寫 UdpMmAgentUdpMmAgent繼承

39、了 UdpAgent,添加了部分功能。具體見附錄。修改 ns-2.35/packet.h在如圖兩處,各添加一行,并做相應修改。施-201,7 +201,8 函 static const packet* PT_MDART = 72;/ insert new packet types herestatic const packet_t PT_MYPING = 73;-static packet_t 一 PTNTYPE = 74; / This MUST be the LAST one +static const packet_t PT_MULTIMEDIA = 74;+static packet_

40、t - PTNTYPE = 75; / This MUST be the LAST oneenum packetclass施-418,6 +419,7 施 public:name_PT_DCCP_CLOSEREQ=recv(pj h); virtual void timeout(int tno);五、修改 ns-2.35/apps/app.h:闞-5饑6 +5豹7 鼬 public:Application。;virtual voidvirtual voidvirtual voidvirtual voidsend(int nbytes);recv(int nbytes);recv_msg(int

41、 nbyteSj const char *msg = O) );resume();protected:六、在ns-2.35/tcl/lib/ns-default.tcl中設置新參數(shù)的默認值 -505?6 4-50517 Application/SctpAppl set numStreams_ 1Application/SctpAppl set numUnreliable_ 0Application/SctpAppl set reliability_ 0+4tMultimedia4-Application/MmApp4-Application/MmApp4-Application/MmApp4-

42、Application/MmApp4-Application/MmApp4-4-Application/MmApp+Applicatian/MmApp4-set rateO_ 0*3mb set ratel_ 0*6mb set rate2_ 0*9mb set rate3_ l*2mb set rate4_ 1* 5mbset pktsize_ 1000 set random_ falseRandomVariable/Uniform set min_ 0*GRandomVariable/Uniform set max_RandomVariable/Exponential set avg_ 1

43、.0七、編輯 ns-2.35/Makefile : -334,6 4-334,7 施 OBJ CC = wpan/p802_15_4sscs*o wpan/p802_l5_4timer,o wpan/p802_15_4trace*o wpan/p802_15_4transac*o apps/pbc*o + Multimedia/mm-app*o Multimedia/udp-mm*o $(OBJ_STL)八、在Makeflie目錄下編譯:make cleanmake dependmake九、運行MnApp_SMmApp_RUDPimiUDPmmtcp (ttiax_win =15Jsink編寫

44、測試的TCL代碼。見附錄F :ex-mm-app.tclftp十、運行程序ns ex-mm-app.tcl附錄ATCPV1代碼if $argc !=1 puts Usage: ns labll.tcl TCPversion puts Example:ns lab11.tcl Tahoe or ns lab11.tcl Renoexitset par1 lindex $argv 0#產(chǎn)生一個仿真的對象set ns new Simulator$ns color 1 Blue#開啟一個trace file,用來記錄封包傳送的過程set nd open out-$par1.tr w$ns trace-

45、all $ndset nf open out-$par1.nam w$ns namtrace-all $nf#開啟一個檔案用來記錄cwnd變化情況set f0 open cwnd-$par1.tr w#定義一個結(jié)束的程序proc finish global ns nd nf f0 tcp par1#顯示最后的平均吞吐量puts format average throughput:%.1f Kbps expr $tcp set ack_*($tcp set packetSize_)*8/1000.0/10$ns flush-trace#關(guān)閉檔案close $ndclose $nfclose $f

46、0exec nam out-$par1.nam &exit 0#定義一個記錄的程序#每格0.01秒就去記錄當時的cwndproc record (global ns tcp f0set now $ns nowputs $f0 $now $tcp set cwnd_$ns at expr $now+0.01 record#產(chǎn)生傳送節(jié)點,路由器r1,r2和接收節(jié)點set n0 $ns nodeset r0 $ns nodeset r1 $ns nodeset n1 $ns node#建立鏈路$ns duplex-link $n0 $r0 10Mb 1ms DropTail$ns duplex-li

47、nk $r0 $r1 1Mb 4ms DropTail$ns duplex-link $r1 $n1 10Mb 1ms DropTail$ns duplex-link-op $n0 $r0 orient right$ns duplex-link-op $r0 $r1 orient right$ns duplex-link-op $r1 $n1 orient right$ns duplex-link-op $r0 $r1 queuePos 0.5#設定隊列長度為18個封包大小set queue 18$ns queue-limit $r0 $r1 $queue#根據(jù)使用者的設定,指定TCP版本if

48、 $par1=Tahoe set tcp new Agent/TCP else set tcp new Agent/TCP/Reno$ns attach-agent $n0 $tcpset tcpsink new Agent/TCPSink$ns attach-agent $n1 $tcpsink$ns connect $tcp $tcpsink$tcp set fid_ 1#建立FTP應用程序set ftp new Application/FTP$ftp attach-agent $tcp#在0.0秒時,開始傳送$ns at 0.0 $ftp start#在10.0秒時,結(jié)束傳送$ns at

49、 10.0 $ftp stop#在0.0秒時去呼叫record來記錄TCP的cwnd變化情況$ns at 0.0 record#在第10.0秒時去呼叫finish來結(jié)束模擬$ns at 10.0 finish#執(zhí)行模擬$ns run附錄BTCPV2代碼if $argc !=1 puts Usage: ns lab12.tcl TCPversion puts Example:ns lab12.tcl Reno or ns lab12.tcl Newreno or ns lab12.tcl Sack exitset par1 lindex $argv 0#產(chǎn)生一個仿真的對象set ns new S

50、imulator#開啟一個trace file,用來記錄封包傳送的過程set nd open out-$par1.tr w$ns trace-all $nd#開啟一個檔案用來記錄cwnd變化情況set f0 open cwnd-$par1.tr w#定義一個結(jié)束的程序proc finish global ns nd f0 tcp par1#顯示最后的平均吞吐量puts format average throughput: %.1f Kbps expr $tcp set ack_*($tcp set packetSize_)*8/1000.0/10$ns flush-trace#關(guān)閉檔案clos

51、e $ndclose $f0#使用awk分析記錄文件以觀察隊列的變化exec awk BEGIN highest_packet_id = -1;packet_count = 0;q_eln = 0;action = $1;time = $2;src_node = $3;dst_node = $4;type = $5;flow_id = $8;seq_no = $11;packet_id = $12;if (src_node = 0 & dst_node = 1) ( if (packet_id highest_packet_id) ( highest_packet_id = packet_id

52、;if (action = +) ( q_len+;print time, q_len;if (action = - | action = d) ( q_eln = q_len-;print time, q_len; out-$par1.tr queue_length-$par1.trexit 0#定義一個記錄的程序#每格0.01秒就去記錄當時的cwndproc record (global ns tcp f0set now $ns nowputs $f0 $now $tcp set cwnd_$ns at expr $now+0.01 record#產(chǎn)生傳送節(jié)點,路由器r1,r2和接收節(jié)點s

53、et r0 $ns nodeset r1 $ns nodeset n0 $ns nodeset n1 $ns node#建立鏈路$ns duplex-link $n0 $r0 10Mb 1ms DropTail$ns duplex-link $r0 $r1 1Mb 4ms DropTail$ns duplex-link $r1 $n1 10Mb 1ms DropTail#設定隊列長度為15個封包大小set buffer_size 15$ns queue-limit $r0 $r1 $buffer_size#根據(jù)使用者的設定,指定TCP版本if $par1=Reno set tcp new Ag

54、ent/TCP/Renoset tcpsink new Agent/TCPSink$tcp set debug_ 0 elseif $par1=Newreno set tcp new Agent/TCP/Newrenoset tcpsink new Agent/TCPSink$tcp set debug_ 0 else set tcp new Agent/TCP/Sack1set tcpsink new Agent/TCPSink/Sack1$tcp set debug_ 1$ns attach-agent $n0 $tcp#將awnd的值設為24,這是advertised window的上限

55、# advertised window是接收端的緩沖區(qū)可以容納的封包個數(shù),#因此當 congestion window 的值超過 advertised window 時,#TCP的傳送端會執(zhí)行流量控制以避免送的太快而導致接收端的緩沖區(qū)溢滿。$tcp set window_ 24$ns attach-agent $n1 $tcpsink$ns connect $tcp $tcpsink#建立FTP應用程序set ftp new Application/FTP$ftp attach-agent $tcp#在0.0秒時,開始傳送$ns at 0.0 $ftp start#在10.0秒時,結(jié)束傳送$n

56、s at 10.0 $ftp stop#在0.0秒時去呼叫record來記錄TCP的cwnd變化情況$ns at 0.0 record#在第10.0秒時去呼叫finish來結(jié)束模擬$ns at 10.0 finish#計算在傳輸路徑上大約可以容納多少的封包#計算方式:在bottleneck link上每秒可以傳送的封包數(shù)*RTT+隊列緩沖區(qū)大小puts format on path: %.2f packets expr (1000000/(8*($tcp set packetSize_+40) * (1+4+1) * 2 * 0.001) + $buffer_size#執(zhí)行模擬$ns run附

57、錄CTCPv3代碼#產(chǎn)生一個仿真的對象set ns new Simulator#開啟一個trace file,用來記錄封包傳送的過程set nd open out13_1.tr w$ns trace-all $nd#開啟兩個檔案用來記錄cwnd變化情況set f0 open cwnd0.tr wset f1 open cwnd1.tr w#定義一個結(jié)束的程序proc finish (global ns nd f0 tcp0 f1 tcp1#puts ACK number: $tcp0 set ack_puts format average throughput: %.1f Kbps expr

58、$tcp1 set ack_*($tcp1 set packetSize_)*8/1000.0/10puts format average throughput: %.1f Kbps expr $tcp0 set ack_*($tcp0 set packetSize_)*8/1000.0/10$ns flush-trace#關(guān)閉檔案close $ndclose $f0close $f1#使用awk分析記錄文件以觀察隊列的變化exec awk BEGIN highest_packet_id = -1;packet_count = 0;q_eln = 0;action = $1;time = $2

59、;src_node = $3;dst_node = $4;type = $5;flow_id = $8;seq_no = $11;packet_id = $12;if (src_node = 0 & dst_node = 1) ( if (packet_id highest_packet_id) ( highest_packet_id = packet_id;if (action = +) ( q_len+;print time, q_len;if (action = - | action = d) ( q_eln = q_len-;print time, q_len; out13_1.tr

60、queue_length-13_1.trexit 0#定義一個記錄的程序#每格0.01秒就去記錄當時的cwndproc record (global ns tcp0 f0 tcp1 f1set now $ns nowputs $f0 $now $tcp0 set cwnd_puts $f1 $now $tcp1 set cwnd_$ns at expr $now+0.01 record#建立節(jié)點set r0 $ns nodeset r1 $ns nodeset n0 $ns nodeset n1 $ns nodeset n2 $ns nodeset n3 $ns node#建立鏈路$ns du

溫馨提示

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

評論

0/150

提交評論