NS2 (Network Simulator - version 2)

Slides:



Advertisements
Similar presentations
Linux 安裝入門與基本管理 課程目標: 學習Linux平台下的安裝設定 與 建置一個基本的Linux伺服器
Advertisements

5.1 掌握Power Scrip语言 5.2 使用控件 实训五 控件应用
上課教材 Database Slide Windows筆電 (32 bit)
DATE: 14/10/2009 陳威宇 格網技術組 雲端運算相關應用 (Based on Hadoop)
第一章 資料結構導論 1-1 資料結構簡介 1-2 認識程式設計 1-3 演算法效能分析 1-4 物件導向程式設計與Java.
计算机网络教程(第 2 版) 第 7 章 网络互连 课件制作人:谢希仁.
Network Simulator.
NS-2.
Ns2 一個常用的網路模擬器 台灣科技大學資管系資料庫實驗室 洪振洲.
計算機網路 COMPUTER NETWORK
网络教育(综合类)本学期教学工作 网络教育办公室:周学斌.
第1章 概述.
中国家电行业 专业化与多元化道路         第9组               黄超               张黎江               鲍天钰               孙蓉               汤娜                 制作  黄超         
企业的创新 2011级会计学三班 姓名: 吴思思 学号:
第八章 分析與設計階段 – 物件導向設計(OOD)
实践 课题 周围环境对当代大学生成长的影响 指导老师:王永章 小组成员:陈荣、刘若楠、张红艳、吕雪丹、樊金芳、李惠芬、黄婧
Author: Shigeki Takeuchi,Hiroyuki Koga, Katsuyoshi Iida,
Lab312.
Ch07 PHP程式基礎 網頁程式設計.
計算機網路實驗- 使用NS2模擬多媒體通訊與無線網路(實驗四)
FC OB1 FB SFC 操作系统 SFB OBs 结构化编程 其它
NAT-PT (Network Address Translation-Protocol Translation)
複習 struct score_Type{ int chinese,english; }; struct my_Type{
Computer Network Lab 資碩一 黃麒瑋
Chapter 1 用VC++撰寫程式 Text book: Ivor Horton.
计算机网络原理 计算机与信息工程分院 周文峰.
乙太被動式光纖網路中 具流量感知性質之節能機制設計 The Design of Loading Aware Power Saving Mechanisms in Ethernet Passive Optical Network 學生:簡嘉志 指導教授:吳和庭 博士 2016/07/31.
佇列 (Queue).
臺東縣中小學資訊教育校園網路管理暨資訊安全防護計畫研習
亂數函數(Random-Number Function)
Chapter 5 Verilog硬體描述語言
结构化编程 FC OB1 FB SFC 操作系统 SFB OBs 其它
Internet Protocol (IP)
C 程式設計— 控制敘述 台大資訊工程學系 資訊系統訓練班.
TCP/IP Protocol Suite TCP/IP協定 第二組 投影片製作by簡嘉宏 綦凱宏 林睿敏 滕孟哲.
Transact-SQL 語言設計教學.
系統與網路管理工具.
無線通訊系統模擬 姓名:顏得洋 學號:B
NS2 教學.
JavaScript 靜宜大學 資管系 楊子青.
计算机操作系统 第二章 进程管理 高校教师、高级项目经理 任铄 QQ:
Simulink模擬基礎 主要內容 Simulink簡介 Simulink模組庫 Simulink的基本操作 S-函數.
第十讲 TCP协议 协议概述 报文段格式 差错控制 流控和拥塞控制 TCP连接管理 TCP性能问题 TCP软件设计 2018/12/7
实验4:PL-SQL编程 1.实验目的 2.实验原理 PL/SQL是一种过程化语言,属于第三代语言,本实验在与熟悉使用PL/SQL编程.
进程操作.
第4讲 传输层之二 本讲目的: 本讲概述: Internet传输层的实现和实例 面向连接的传输: TCP TCP拥塞控制 拥塞控制原则
江西财经大学信息管理学院 《组网技术》课程组
重點 資料結構之選定會影響演算法 選擇對的資料結構讓您上天堂 程式.
第七讲 网际协议IP.
NS2 - Basic Ming-Feng Yang.
NS2 – TCP/IP Simulation How-Wei Wu.
第5讲 网络层 本讲目的: 概述: 理解网络层服务原理: 因特网的实现实例 网络层的服务 路由选择原理 分层的路由选择 IP协议
第十三章 TCP/IP 與 Internet 網路連結技術
第7章 传输层协议——TCP与UDP 任课教师 卢豫开.
Westmont College 网络互连 Part 4 (传输协议, UDP and TCP, 协议端口)
第六章 shell 程序调试 一. 程序执行状态跟踪 程序: -n 读取命令, 但不执行. 主要用于跟踪程序流程是
软件工程 第四章 软件设计 软件过程设计技术与工具.
Source: Journal of Network and Computer Applications, Vol. 125, No
Speaker : Chang Kai-Jia Date : 2010/04/26
Toward realistic MPEG4 video transmission simulations
指導教授:梁明章 A 許之青 國立高雄大學 2010/06/25
1.3操作系统提供的服务和用户接口 操作系统提供的用户接口 程序接口与系统调用 操作接口与系统程序
Create and Use the Authorization Objects in ABAP
問題解決與流程圖 高慧君 台北市立南港高中 2006年12月22日.
Speaker : 翁瑄伶 Advisor : 柯開維 博士 Date: 2016/07/31
助教:廖啟盛 JAVA Socket(UDP) 助教:廖啟盛
NS3 & NS2 (network simulator)
第6章 PHP基本語法介紹.
面向对象程序设计 C++教程 西安工业大学 于帆.
第7章 传输层协议——TCP与UDP 任课教师 卢豫开.
Presentation transcript:

NS2 (Network Simulator - version 2) WLAN課程報告

WeiFeng Hu@ant.comm.ccu Introduction 為什麼要用Simulator作模擬? 為什麼要用NS2? Open source Object-Oriented OTcl WLAN 2005 WeiFeng Hu@ant.comm.ccu

WeiFeng Hu@ant.comm.ccu Outline 什麼是NS2 Tcl簡介 開始模擬 模擬結果分析 分析結果圖形化 WLAN 2005 WeiFeng Hu@ant.comm.ccu

WeiFeng Hu@ant.comm.ccu 什麼是NS2? Network Simulator – Version 2 1989年由Real Network Simulator 改版,目前由SAMAN和CONSER維護 NS is a discrete event simulator targeted at networking research. Discrete event是指 NS2在模擬送封包時,是採用單一執行序的方式,也就是說同一個Node在同一時間是沒有辦法送出兩個以上封包。 WLAN 2005 WeiFeng Hu@ant.comm.ccu

WeiFeng Hu@ant.comm.ccu NS2架構 Event Scheduler UI Network Component Tclcl OTcl TCL 上面這個圖可以用來做一個簡單的 NS 結構說明. 對一般使用 NS 的使用者來說, 你可能會用 OTcl 這個 script language 來撰寫網路拓撲的部分, 而 OTcl 其實就是架構在 Tcl 之上的 Object-Oriented 後所延伸出來的. 在 Event Scheduler 和 Network Component 這二部分, 主要是以 C++ 所寫出來的東西. NS 是以 event-driven 的概念在做模擬, 比如說 : 在 1.2 秒的時候開始做 FTP 資料的傳輸, 在 2.0 秒的時候結束傳輸. 這是 Event Scheduler 的部分. 至於 Network Component 則是 NS 中的 Agent (TCP、UDP...)、Traffic Generator (FTP、CBR...) 這部分. C++ 畫在最底層則是表示 NS 的核心主要就是 C++. 最後就是一個用來溝通 OTcl 及 C++ 的橋樑 : Tclcl. 最後搭配一個 User Interface, 這就構成了 NS 本身. C++ WLAN 2005 WeiFeng Hu@ant.comm.ccu

WeiFeng Hu@ant.comm.ccu 為什麼要用二種語言 ? 用 C++ : 處理封包傳送 更改一些底層或新增 protocols 之類的 C++ Class 不常更動,執行速度快 用 OTcl : 負責設定檔部分 運作已編譯過的 C++ Objects 常會更動,執行時需花一點直譯的時間 用 2 種主要的語言:C++、OTcl. 使用 2 種語言的原因在於, 像一些比較底層架構的東西, 或者是封包傳送、 繞送方法...等, 這些是屬於比較需要考慮時間、速度的部分, 選擇用 C++ 來處理是比較適當的做法. 通常這些底層的東西也不太常常會變動, 所以利用編譯式的語言也比較恰當, 只需編譯過一次就可以一直使用. 除非當有需要新增或修改這些底層的架構時, 才會另外再做編譯的動作. 而 OTcl 則主要用來處理網路情境模擬的部分, 也就是大部分時間在寫的 script, 雖然這 OTcl Script 在每次要執行時可能會花一點時間, 但是因為情境模擬的部分會比較常在改變, 若用 C++ 這類要做編譯動作的語言並不合適. 另外 OTcl 主要還有負責一些設定檔, 及使用編譯過的 C++ Objects. 整理如上 WLAN 2005 WeiFeng Hu@ant.comm.ccu

Tcl簡介(Tool Command Language) ns使用MIT發展的OTcl (Object Tcl)做為描述、配置、執行模擬的語言,OTcl是Tcl的物件導向延伸版本。在使用ns進行網路模擬之前,必須先學會這個語言,可以參考ns/otcl/doc目錄下有一份OTcl Tutorial,是一份不錯的入門文件。 WLAN 2005 WeiFeng Hu@ant.comm.ccu

Tcl簡介(Tool Command Language) cont. 1: #範例:遞迴解費氏數 2: set count 20 ; # The number of Fibonacci numbers to print 3: set num(0) 0; set num(1) 1 ; # First and second seed values 4: puts "The first $count Fibonacci numbers:" 5: for { set i 1 } { $i < $count } { incr i 1 } { 6: puts "$i:\t$num(0)" 7: set num(1) [ expr $num(0) + $num(1) ] 8: incr i 1 9: puts "$i:\t$num(1)" 10: set num(0) [ expr $num(0) + $num(1) ] 11: } WLAN 2005 WeiFeng Hu@ant.comm.ccu

Tcl簡介(Tool Command Language) cont. 2: set count 20 ; # The number of Fibonacci numbers to print 3: set num(0) 0; set num(1) 1 ; # First and second seed values set count 20 int count = 20; set num(0) 0; set num(1) 1 ; int num[2]; num[0] = 0; num[1] = 1; WLAN 2005 WeiFeng Hu@ant.comm.ccu

Tcl簡介(Tool Command Language) cont. puts "The first $count Fibonacci numbers:" " …" do variable substitution {…} variable substitution does not take place Puts “the first $count Fibonacci numbers” the first 20 Fibonacci numbers Puts {the first $count Fibonacci numbers} the first $count Fibonacci numbers WLAN 2005 WeiFeng Hu@ant.comm.ccu

Tcl簡介(Tool Command Language) cont. for { set i 1 } { $i < $count } { incr i 1 } { for ( i = 1 ; i < count ; i++ ) { 流程控制 (control flow) if-else、switch、while、for、foreach set i 0 while {$i < 5} { puts "In the while loop, and i == $i" incr i 1 } set num_legs 4 switch $num_legs { 2 {puts "It could be a human."} 4 {puts "It could be a cow."} 6 {puts "It could be an ant."} 8 {puts "It could be a spider."} default {puts "It could be anything."} } set my_planet "earth" if {$my_planet == "earth"} { puts "I feel right at home." } elseif {$my_planet == "venus"} { puts "This is not my home." } else { puts "I am neither from Earth, nor from Venus." } WLAN 2005 WeiFeng Hu@ant.comm.ccu

Tcl簡介(Tool Command Language) cont. set num(1) [ expr $num(0) + $num(1) ] num[1] = num[0] + num[1]; [] indicate command substitution puts "I am [expr 10 * 3] years old, and my I.Q. is [expr 100 + 75]" 執行的結果: I am 30 years old, and my I.Q. is 175 WLAN 2005 WeiFeng Hu@ant.comm.ccu

WeiFeng Hu@ant.comm.ccu 開始NS2模擬:模擬環境介紹 這個網路的環境包含了四個網路節點(n0,n1,n2,n3),如下圖所示。網路節點n0到節點n2之間,和節點n1到節點n2之間的網路頻寬(bandwidth)是2Mbps,延遲時間(propagation delay)是10ms。網路拓樸中的頻寬瓶頸是在節點n2到節點n3之間,頻寬為1.7Mbps,延遲的時間為20ms。每個網路節都是採用DropTail queue的方式,且在節點n2到節點n3之間的最大佇列長度是10個封包的長度。在節點n0到n3之間會有一條FTP的連線,FTP應用程式是架構在TCP之上,所以在寫模擬環境的描述語言的時候,必需先建立一條TCP的連線,在來源端n0上使用TCP agent產生”tcp”來發送TCP的封包;在目的地端n3使用TCPsink agent產生”sink”來接受TCP的資料、並產生回覆封包(ACK)回傳送端、最後把接收的TCP封包釋放。最後要把這兩個agent連起來(connect),連線才能建立。若是沒有額外的參數設定,TCP封包的長度為1Kbytes。在這裡順便補充說明一下,對於ns2模擬參數內定值設定是在ns-allinone-2.27\ns-2.27\tcl\lib目錄下的ns-default.tcl,有想要進一步瞭解的人,可以去查看此檔。另外,在節點n1到n3之間有一條固定的傳輸速率的連線(Constant Bit Rate,CBR),CBR應用程式是架構在UDP之上,因此必需在n1使用UDP agent來產生”udp”用來發送UDP封包,在n3上使用Null agent來產生”sink”以接收由n1傳送過來的UDP封包,然後把接收的封包釋放。CBR的傳送速度為1Mbps,每一個封包大小為1Kbytes。CBR是在0.1秒開始傳送,在4.5秒結束傳輸;FTP是在1.0秒開始傳送,4.0秒結束傳輸。 WLAN 2005 WeiFeng Hu@ant.comm.ccu

WeiFeng Hu@ant.comm.ccu NS2模擬:Tcl Script # 產生一個模擬的物件 set ns [new Simulator] #針對不同的資料流定義不同的顏色,這是要給NAM用的 $ns color 1 Blue $ns color 2 Red #開啟一個NAM trace file set nf [open out.nam w] $ns namtrace-all $nf #開啟一個trace file,用來記錄封包傳送的過程 set nd [open out.tr w] $ns trace-all $nd WLAN 2005 WeiFeng Hu@ant.comm.ccu

NS2模擬:Tcl Script (cont.) #定義一個結束的程序 proc finish {} { global ns nf nd $ns flush-trace close $nf close $nd #以背景執行的方式去執行NAM exec nam out.nam & exit 0 } WLAN 2005 WeiFeng Hu@ant.comm.ccu

NS2模擬:Tcl Script (cont.) #產生四個網路節點 set n0 [$ns node] set n1 [$ns node] set n2 [$ns node] set n3 [$ns node] #把節點連接起來 $ns duplex-link $n0 $n2 2Mb 10ms DropTail $ns duplex-link $n1 $n2 2Mb 10ms DropTail $ns duplex-link $n2 $n3 1.7Mb 20ms DropTail #設定ns2到n3之間的Queue Size為10個封包大小 $ns queue-limit $n2 $n3 10 http://netlab.cse.yzu.edu.tw/ns2/ns2_website/ns_syntax.xml WLAN 2005 WeiFeng Hu@ant.comm.ccu

NS2模擬:Tcl Script (cont.) #設定節點的位置,這是要給NAM用的 $ns duplex-link-op $n0 $n2 orient right-down $ns duplex-link-op $n1 $n2 orient right-up $ns duplex-link-op $n2 $n3 orient right #觀測n2到n3之間queue的變化,這是要給NAM用的 $ns duplex-link-op $n2 $n3 queuePos 0.5 #建立一條TCP的連線 set tcp [new Agent/TCP] # 創造一個TCP的Agent $ns attach-agent $n0 $tcp # TCP agent 結合到 node(n0) # 但就此範例光是 TCP 無法產生任何 Traffic, 所以通常我們都會再建立一些 # Application 的 Protocol 於 TCP 上(如 FTP、Telnet) set ftp [new Agent/TCP] $ns attach-agent $n3 $sink WLAN 2005 WeiFeng Hu@ant.comm.ccu

NS2模擬:Tcl Script (cont.) #設定FTP和CBR資料傳送開始和結束時間 $ns at 0.1 "$cbr start" $ns at 1.0 "$ftp start" $ns at 4.0 "$ftp stop" $ns at 4.5 "$cbr stop" #結束TCP的連線 $ns at 4.5 "$ns detach-agent $n0 $tcp #$ns at < time > < event > #在模擬環境中,5秒後去呼叫finish來結束模擬 $ns at 5.0 "finish“ #開始執行 scheduler. $ns run WLAN 2005 WeiFeng Hu@ant.comm.ccu

WeiFeng Hu@ant.comm.ccu NS2模擬:模擬結果 + 0.1 1 2 cbr 1000 ------- 2 1.0 3.1 0 0 - 0.1 1 2 cbr 1000 ------- 2 1.0 3.1 0 0 + 0.108 1 2 cbr 1000 ------- 2 1.0 3.1 1 1 - 0.108 1 2 cbr 1000 ------- 2 1.0 3.1 1 1 r 0.114 1 2 cbr 1000 ------- 2 1.0 3.1 0 0 + 0.114 2 3 cbr 1000 ------- 2 1.0 3.1 0 0 - 0.114 2 3 cbr 1000 ------- 2 1.0 3.1 0 0 + 0.116 1 2 cbr 1000 ------- 2 1.0 3.1 2 2 - 0.116 1 2 cbr 1000 ------- 2 1.0 3.1 2 2 r 0.122 1 2 cbr 1000 ------- 2 1.0 3.1 1 1 + 0.122 2 3 cbr 1000 ------- 2 1.0 3.1 1 1 ................................................................. 模擬結束後,會產生兩個檔案,一個是out.nam,這是給NAM用的,用來把模擬的過程用視覺化的方式呈現出來,這可以讓使用者用”看”的方式去瞭解封包傳送是如何從來源端送到接收端。另一個檔案是out.tr,這個檔案記錄了模擬過程中封包傳送中所有的事件,例如第一筆記錄是一個CBR的封包,長度為1000bytes,在時間0.1秒的時候,從n1傳送到n2。這個檔案對我們做效能分析很重要,所以要先對這個檔案的格式做仔細的介紹。 每一筆記錄的開始都是封包事件發生的原因,若是r則表示封包被某個節點所接收,若是+則表示進入了佇列,若是-則表示離開佇列,若是d則表示封包被佇列所丟棄。接著的第二個欄位表示的是事件發生的時間;欄位三和欄位四表示事件發生的地點(從from node到to node);欄位五表示封包的型態;欄位六是封包的大小,欄位七是封包的旗標標註;欄位八表示封包是屬於那一個資料流;欄位九和欄位十是表示封包的來源端和目的端,這兩個欄位的格式是a.b,a代表節點編號,b表示埠號(port number);欄位十一表示封包的序號;最後欄位十二表示封包的id。以前面trace file的第一筆為例,意思就是說有一個封包pakcet id為0,資料流id為2,序號為0,長度為1000 bytes,型態為CBR,它是從來源端1.0要到目的地3.1,在時間0.1秒的時候,從節點1進入了節點2的佇列中。 一 二 三 四 五 六 七 八 九 十 十一 十二 event time from to node pkt node pkt type flag size fid src addr dst addr seq num pkt id WLAN 2005 WeiFeng Hu@ant.comm.ccu

WeiFeng Hu@ant.comm.ccu awk語言 – 數值分析 資料列:awk從資料檔上讀取的基本單位,以trace file為例,awk讀入的 第一筆資料列為 ”+ 0.1 1 2 cbr 1000 ------- 2 1.0 3.1 0 0” 第二筆資料列為 “- 0.1 1 2 cbr 1000 ------- 2 1.0 3.1 0 0” 一般而言,一筆資料列相當於資料檔上的一行資料。 WLAN 2005 WeiFeng Hu@ant.comm.ccu

WeiFeng Hu@ant.comm.ccu awk語言 – 簡介 程式主要節構: Pattern1 { Actions1 } Pattern2 { Actions2 } …………………………… Patternx { Actionsx } 一般常用關係判斷式來當成Pattern。例如: x > 3 用來判斷變數x是否大於3 x == 5 用來判斷變數x是否等於5 awk提供c語言常見的關係運算元,如:>、<、>=、<=、==、!=等等 Actions是由許多awk指令所構成,而awk的指令與c語言中的指令非常類似 。 IO指令:print 、 printf( ) 、getline ...... 流程控制指令 : if ( ...) {...} else {…}、 while(…){…} …… WLAN 2005 WeiFeng Hu@ant.comm.ccu

WeiFeng Hu@ant.comm.ccu awk語言 – 執行流程 執行awk時, 它會反複進行下列四步驟 自動從指定的資料檔中讀取一筆資料列。 自動更新(Update)相關的內建變數之值。 逐次執行程式中 所有 的 Pattern { Actions } 指令。 當執行完程式中所有 Pattern { Actions }時,若資料檔中還有未讀取的料,則反覆執行步驟1到步驟4。 WLAN 2005 WeiFeng Hu@ant.comm.ccu

WeiFeng Hu@ant.comm.ccu awk語言 – 例子 BEGIN { #程式初始化,設定一變數以記錄目前最高處理封包的ID。 highest_packet_id = 0; } { action = $1; time = $2; node_1 = $3; node_2 = $4; type = $5; flow_id = $8; node_1_address = $9; node_2_address = $10; seq_no = $11; packet_id = $12; WLAN 2005 WeiFeng Hu@ant.comm.ccu

WeiFeng Hu@ant.comm.ccu awk語言 – 例子 (cont.) #記錄封包的傳送時間 if ( start_time[packet_id] == 0 ) start_time[packet_id] = time; #記錄CBR (flow_id=2) 的接收時間 if ( flow_id == 2 && action != "d" ) { if ( action == "r" ) { end_time[packet_id] = time; } else { #把不是flow_id=2的封包或者是flow_id=2但此封包被drop的時間設為-1 end_time[packet_id] = -1; 執行方法: ($為shell的提示符號)$awk -f measure-delay.awk out.tr若是要把結果存到檔案,可使用導向的方式。(把結果存到cbr_delay檔案中)$awk -f measure-delay.awk out.tr > cbr_delay 量測CBR封包端點到端點間延遲時間的awk程式 在一剛開始的時候,由於只有CBR的封包,所以End-to-End Delay Time都是固定的,但在1.0秒後,網路多了FTP的封包,這使得CBR封包和FTP封包必須互相的搶奪網路的資源,因此End-to-End Delay Time變得不在固定,但等到FTP傳輸結束後,CBR封包的End-to-End Delay Time又變成是固定值了。 [xgraph] 在Shell的提示符號後輸入startxwin.bat,接著會出現一個新的視窗,在此視窗輸入xgraph cbr_delay,就可以把前面所存下來的檔案畫出來。xgraph的運作是把第一排當作x軸的資料,第二排當作是y軸的資料,然後把圖給畫出來。 WLAN 2005 WeiFeng Hu@ant.comm.ccu

WeiFeng Hu@ant.comm.ccu 分析結果圖形化 [xgraph] xgraph的運作是把第一排當作x軸的資料,第二排當作是y軸的資料 [gnuplot] 命令導向的交談式繪圖程式(command-driven interactive function plotting program)。 圖是畫出來了,但是筆者要的不是把數據用打點的方式畫出來,而是要把這些點連起來。沒關係,接下來,只要學著修改環境變數,就可以畫出理想的圖了。 gnuplot> set title “cbr_delay” gnuplot> set xlabel “simulation time” gnuplot> set ylabel “delay time” gnuplot> unset key gnuplot> set label “constant delay= 0.038706 sec”at 0.1, 0.05 gnuplot> set arrow from 0.5, 0.05 to 0.5, 0.04 gnuplot> plot “cbr_delay” with linespoints WLAN 2005 WeiFeng Hu@ant.comm.ccu

WeiFeng Hu@ant.comm.ccu 一些不錯介紹NS2的網站 NS2使用說明 http://140.116.72.80/~smallko/ns2/ns2.htm http://netlab.cse.yzu.edu.tw/ns2/ns2_website/ 一些已開發的模組 http://www.isi.edu/nsnam/ns/ns-contributed.html Tcl簡單介紹 http://k-lug.org/~griswold/NS2/fib.html AWK Tutorial Guide http://phi.sinica.edu.tw/aspac/reports/94/94011/ GNUPLOT使用手冊 http://phi.sinica.edu.tw/aspac/reports/94/94002/ WLAN 2005 WeiFeng Hu@ant.comm.ccu