Download presentation
Presentation is loading. Please wait.
1
以ns建立專業的網路模擬環境 Mar 網路通訊 蔡昌憲、林盈達
2
由來 隨著網際網路的成長,發展出許多新的網路協定。 早期 – 新的演算法或協定設計完成時,研究人員多藉由兩種方法來驗證其效能或正確性
實驗:但現今網路環境複雜,建構新的實驗環境相當昂貴。 數學分析:常因複雜度過高而難以分析。 現今常用的方法是以模擬的方式來驗證。 當要架設一個新的網路環境時,必須事先評估網路的拓撲及頻寬是否足夠應付內部及外部的使用者,此時就需要一套支援模組豐富的網路模擬軟體。
3
常見的網路模擬軟體 Layer OPNET BONeS COMNET III ns Application Layer
Database, , FTP, HTTP, MTA, Remote login, Print, Voice Application, Video Conferencing, X Window HTTP, FTP, Telnet, Constant-Bit-Rate, On/Off Source Transport Layer TCP,UDP,NCP TCP,UDP ATP,NCP,TCP, NetBIOS,UDP UDP, TCP,Fack and Asym TCP, RTP, SRM, RLM, PLM Session Routing, DV Routing Protocols OSPF, BGP, IGRP, RIP, EIGRP, PIM-SM RIP, Shortest Measured Delay, OSPF, Minimum Penalty, IGRP Routing, Centralized, dense mode, (bi-direction) shared tree mode Network Layer IP,IPX IP Data Link layer ATM, (Fast,Gigabit) Ethernet, Ether Channel, FDDI, FR, LANE, LAPB, STB, SNA, TR, X.25, ATM, Ethernet, TR,FDDI CSMA/CD, ALOHA, TR, Token Bus, FDDI, X.25 CSMA/CD, CSMA/CA, Multihop, , TDMA Physical Layer ISDN, SONET, XDSL ISDN, SONET
4
為什麼使用ns? 由表可知OPNET的支援度相當廣泛,包含大多數的網路標準,但卻需要百萬以上。
相較之下ns在Application layer的支援度較少(HTTP, FTP, Telnet),不過ns在TCP提供了相當豐富的函式庫,幾乎所有的TCP實作版本都有,再加上開放原始碼,可任意增加修改自已想要的功能,所以許多研究機構皆已使用ns進行網路模擬。
5
ns的特色 Emulation ns可提供與真實網路互動的功能 Scenario Generation
依據不同流量型態、網路架構、錯誤狀況、產生不同的測試環境。 Visualization 不只提供效能上的數據,nam(Network Animation)提供動畫顯示整個運作的流程、協助研究人員方便除錯。 Extensibility 同時使用C++,Otcl兩種語言,C++用來實作核心部份,包括事件處理、封包傳送,擁有較佳效能,Otcl用來定義、配置、控制整個模擬過程,擁有較佳的彈性及互動性。
6
ns的歷史 NEST(1988) – Network Simulation Testbed
REAL(1989) – Realistic and Large ns v1.0(Jul ) ns v2.0(Nov ) ns v2.1b6(Jan ) 最新更新查詢:
7
Virtual InterNetwork Testbed
目前ns及內附的nam是VINT計畫的一部分,由DARPA贊助。 目的在提供完整、趨於真實的網路模擬環境。 ns支援的平台包括大部份的Unix(Free-BSD、Linux、SunOS、Solaris),也支援Windows。 ns已經是一個很成熟的網路模擬環境。
8
ns內建的模組資源 Layer Protocol Class name in ns Description Application HTTP
Http/Server HTTP server Http/Client Http client Http/Cache Cache FTP Application/FTP Simulates bulk data transfer Telnet Application/Telnet Exponential or random interval CBR Application/Traffic/CBR Constant-bit-rate source On/Off source Application/Traffic/<type> <type>Exponential,Pareto Network Layer Unicast $ns rtproto<type> <type>:static, Manual, Session, DV Multicast $ns mrtproto<type> <type>:DM, CtrMcast, ST, BST
9
Layer Protocol Class name in ns Description Transport Layer UDP Agent/UDP UDP sender TCP(sender) Agent/TCP “Tahoe” TCP sender Agent/TCP/Reno “Reno” TCP sender Agent/TCP/Reno/RBP Reno TCP with Rate-based pacing Agent/TCP/Newreno Reno with a modification Agent/TCP/Sack1 TCP with selective repeat(RFC 2018) Agent/TCP/Vegas TCP Vegas Agent/TCP/Vegas/RBP TCP Vegas with Rate-based pacing Agent/TCP/Fack Reno TCP with “forward ack” Agent/TCP/Asym Asymmetric bandwidth TCP sender Agent/TCP/rfc793edu RFC793 TCP Agent/TCP/SackRH TCP Rate-Halving
10
Layer Protocol Class name in ns Description Transport Layer TCP(receiver) Agent/TCPSink TCP sink with one ACK per packet Agent/TCPSink/DelAck With configurable delay per packet Agent/TCPSink/Sack1 Selective ACK sink Agent/TCPSink/Sack1/DelAck Sack1 with DelAck Agent/TCPSink/Asym Asymmetric bandwidth TCP receiver TCP(2-way) Agent/TCP/FullTcp Experimental 2-way Reno TCP RTP Agent/RTP RTCP Agent/RTCP SRM Agent/SRM Scalable Reliable Multicast PLM Agent/PLM Fast Convergence for CUMULATIVE Layered Multicast Transmission
11
ns內建模組使用方式 建立物件 以設定的方式
Set tcp [new Agent/TCP] #建立Tahoe TCP Sender 以設定的方式 $ns nrtproto DM { } #使用Dense Mode Multicast routing protocol ns提供的TCP模組非常豐富,不過大多是單向的Sender,沒有建立及停止連線的動作(SYN/FIN),也無法同時雙向傳送資料,此為簡化的TCP,會有些失真,如果需要更接近真實情況,可考慮使用對應FullTcp版本。
12
安裝ns ns的原始程式及安裝說明 安裝方法 http://www.isi.edu/nsnam/ns/ns-build.html
分別安裝各個所需套件 All-in-one套件(建議初學使用)
13
安裝ns(以all-in-one為例) get #抓回最新版的all-in-one套件。 tar zxvf ns-allinone-2.1b6a.tar.gz#解開套件。 cd ns-allinone-2.1b6/。 ./install #若安裝出現問題,可參考 在PATH環境變數加上/home/ns/ns-allinone-2.1b6/bin。 在LD_LIBRARY_PATH環境變數加上/home/ns/ns-allinone-2.1b6/otcl-1.0a5。 cd ns-2.1b6./validate #檢驗是否安裝正常,時間需要半小時至一小時。
14
安裝ns(以all-in-one為例) 安裝完畢後,執行ns,打ns-version就可以看到目前ns的版本:
%ns-version 2.1b7-snapshot 建議再抓回最新的ns daily snapshot進行更新,可在step 4前,將ns-2.1b6的內容替換成新的ns daily snapshot再進行安裝。
15
ns的目錄結構 ns-allinone tcl8.0.4 tk8.0.4 otcl-1.0 tclcl ns-2.1 nam-1.0 tcl
…… ex test lib mcast …
16
ns的目錄結構 所有的程式碼皆在ns-allinone目錄下,C++程式碼在ns-2.1目錄,Otcl的部分在ns-2.1/tcl目錄,test目錄下是測試套件,ex目錄下是一些範例程式。
17
模擬的步驟 建立Network Model:描述整個網路的拓撲、頻寬等資訊。
建立Traffic Model:描述所有的網路流量或錯誤情況的時間、類型、或呈何種數學分佈。 追蹤分析結果:模擬完成後,可藉由nam觀察整個流程,或將nam file中想要的資訊抽取出來加以分析。
18
Network Model 一、建立網路拓撲 建立ns物件:set ns[new Simulator]
建立節點:set n0[$ns node] 建立連結:$ns duplex-link $n0 $n1 <bandwidth><delay><queue_type>其中<queue_type>可以是DropTail, RED, CBQ, FQ, SFQ, DRR 建立LAN:$ns make-lan <node_list> <bandwidth> <delay> LL Queue/DropTail MAC/802.3 Channel 若只想建立點對點的網路,則不用建立LAN這個步驟。
19
Network Model(cont.) 二、選擇路由方式 Unicast Multicast
$ns rtproto<type>(<type>:Static,Session,DV) Multicast $ns multicast(right after[new Simulator]) $ns mrtproto<type>(<type>:CtrMcast,DM,ST,BST)
20
Traffic Model 一、建立連線 TCP Set tcp [new Agent/TCP] #建立Tahoe TCP sender
Set tcpsink [new Agent/TCPSink] #建立receiver $ns attach-agent $n0 $tcp #把TCP sender接在n0節點上 $ns attach-agent $n1 $tcpsink #把receiver接在n1節點上 $ns connect $tcp $tcpsink #建立連線
21
Traffic Model(cont.) UDP Set udp [new Agent/UDP] #建立UDP sender
Set null [new Agent/NULL] #建立receiver $ns attach-agent $n0 $udp #把UDP sender接在n0節點上 $ns attach-agent $n1 $null #把receiver接在n1節點上 $ns connect $udp $null #建立連線
22
Traffic Model(cont.) 二、產生流量 TCP FTP(or Telnet)
Set ftp [new Application/FTP] #模擬FTP的application source $ftp attach-agent $tcp #ftp source連到tcp agent
23
Traffic Model(cont.) UDP CBR(or Exponential, Pareto)
Set src [new Application/Traffic/CBR] $src attach-agent $udp #將source連到UDP agent
24
Traffic Model(cont.) 加入錯誤模組 Set loss_module [new ErrorModel]
$loss_module set rate_0.01 #error rate為1% $loss_module unit pkt #以封包為單位 $loss_module ranvar [new Random Variable/Uniform] #隨機變數uniform分配 $loss_module drop-target [new Agent/Null] #封包丟棄點 $ns lossmodel $loss_module $n0 $n1 #在n0到n1節點之間設定error model
25
Traffic Model(cont.) 建立排程
$ns at<time><event>(其中<event>為任何合法的ns/tcl命令) $ns run #開始執行
26
Tracing $ns namtrace-all [open test.nam w] #以nam格式追蹤所有封包,展現模擬過程
網路拓撲(node、link、queues…) 封包資訊:<event-type>-t<time>-s <source>-d<dest>-p<pkt-type> -e <pkt-size> -c <flow-id> -I <unique-id> -a <pkt-attribute> -x <ns-traceinfo>
27
Otcl簡介 ns使用MIT發展的Otcl(Object Tcl)做描述、配置、執行模擬的語言。 Otcl和C++的差異
C++使用“//”做單行註解,Otcl使用“#” C++僅能單一的class宣告,而Otcl中使用多次的定義。 Otcl中的init instproc相當於C++中的constructor,而destory instproc相當於C++中的destructor。 Otcl中一定要透過object來呼叫,Otcl中的self就相當於C++中的this。
28
Otcl簡介(cont.) 使用ns進行網路模擬前,必須先學會這語言。
ns/otcl/doc目錄下有一份Otcl Tutorial是一份不錯的入門文件。
29
結語 ns的特色在使用兩種程式語言的架構 ns透過tclcl連繫兩種語言間的變數及物件,使得ns成為兼具高效能與高彈性的網路模擬軟體。
在做研究時需要設定不同的網路環境、動態改變協定參數,這些事情使用像Otcl的直譯式語言將有較佳的彈性。 ns透過tclcl連繫兩種語言間的變數及物件,使得ns成為兼具高效能與高彈性的網路模擬軟體。
Similar presentations