65
1 Network Simulator (NS-2) I-Wei Ting ( 丁丁丁 ) 2009/3/31

1 Network Simulator (NS-2) I-Wei Ting ( 丁義偉 ) 2009/3/31

  • View
    259

  • Download
    6

Embed Size (px)

Citation preview

Page 1: 1 Network Simulator (NS-2) I-Wei Ting ( 丁義偉 ) 2009/3/31

1

Network Simulator (NS-2)

I-Wei Ting ( 丁義偉 )

2009/3/31

Page 2: 1 Network Simulator (NS-2) I-Wei Ting ( 丁義偉 ) 2009/3/31

2

Outline

Part 1: Introduction

Part 2: NS2 directory structure

Part 3: Network Scenario

Page 3: 1 Network Simulator (NS-2) I-Wei Ting ( 丁義偉 ) 2009/3/31

3

A: What is network simulator? NS is a discrete event simulator targeted at networking research. Ns

provides substantial support for simulation of TCP, routing, and multicast protocols over wired and wireless (local and satellite) networks.

NS began as the REAL network simulator in 1989 and has evolved over the past few years.

In 1995 ns development was supported by DARPA through the VINT project at LBL, Xerox PARC, UCB, and USC/ISI.

In 1996, the first version of ns2 was release.

Page 4: 1 Network Simulator (NS-2) I-Wei Ting ( 丁義偉 ) 2009/3/31

4

Version ns-2.34 pending ns-2.33 released on March 31, 2008 .. .. ns-2.30 released on Sept 26, 2006 .. ns-2.1b9 released on Sat Apr 13 16:26:33 PDT 2002 .. ns-2.0a1 Wed Nov 6 13:57:31 PST 1996

v1.0a1 Mon Jul 31 16:05:08 PDT 1995

http://www.isi.edu/nsnam/ns/CHANGES.html

Page 5: 1 Network Simulator (NS-2) I-Wei Ting ( 丁義偉 ) 2009/3/31

5

Why we use it?

New protocol is not easily implemented in real. (development, money, time, device, people)

New protocol is not easily verified in the world. (mobile IP, ad hoc…etc, more nodes or network topology)

New protocol is not easily compared others (How to convince other people?)

Network Simulator simulates protocol layers (physical, datalink, network, transport, applicatoin)

Page 6: 1 Network Simulator (NS-2) I-Wei Ting ( 丁義偉 ) 2009/3/31

6

B: Where do I get NS2?

http://www.isi.edu/nsnam/ns

Page 7: 1 Network Simulator (NS-2) I-Wei Ting ( 丁義偉 ) 2009/3/31

7

Step 1

Page 8: 1 Network Simulator (NS-2) I-Wei Ting ( 丁義偉 ) 2009/3/31

8

Step 2

Page 9: 1 Network Simulator (NS-2) I-Wei Ting ( 丁義偉 ) 2009/3/31

9

C: What platforms does NS2 run on and how to install NS2?

Operation systems (FreeBSD, Linux, SunOS, Solaris, Windows)

Setup for Linux-based system If the file is put at /root

Step 1: cd /root Step 2: tar zxvf ns-allinone-2.30.tar.gz Step 3: cd /root/ns-allinone-2.30

Step 4: ./install

Setup for win9x/2000/XP 中文教學網站 - 柯志亨 (Chih-Heng, Ke)

http://140.116.72.80/~smallko/ns2/ns2.htm 安裝流程

http://140.116.72.80/~smallko/ns2/setup.htm

註 :在裝 cygwin時,要自已勾選全部的套件,以免 lost套件,無法 compiler過去。

Page 10: 1 Network Simulator (NS-2) I-Wei Ting ( 丁義偉 ) 2009/3/31

10

D: Where can I find documentation for NS2?

http://www.isi.edu/nsnam/ns/ns-documentation.html

download

Page 11: 1 Network Simulator (NS-2) I-Wei Ting ( 丁義偉 ) 2009/3/31

11

E: Where are some tutorial I can start from?

http://www.isi.edu/nsnam/ns/tutorial/index.html

Page 12: 1 Network Simulator (NS-2) I-Wei Ting ( 丁義偉 ) 2009/3/31

12

F: What protocols does NS2 support?

Application layer: Traffic models and applications Web, FTP, telnet, constant-bit rate, real audio

Translation layer: Transport protocols Unicast: TCP(Reno,Vegas,etc.), UDP Multicast: SRM

Network layer: Routing and queueing Wired routing: Dijkstra,DV Wireless routing: mobile IP Ad hoc routing :DSR,AODV,TORA,DSDV Queueing protocols: RED, drop-tail, SFQ etc

Data link layer Ethernet, 802.11

Physical layer Wired(point-to-point, LANs), wireless (multiple propagation models)…

Page 13: 1 Network Simulator (NS-2) I-Wei Ting ( 丁義偉 ) 2009/3/31

13

Page 14: 1 Network Simulator (NS-2) I-Wei Ting ( 丁義偉 ) 2009/3/31

14

Part 2: NS2 structure

A: Why use two programming language?

B: Overview for NS2 structure

C: Directory structure

D: How to run a scenario in NS2

Page 15: 1 Network Simulator (NS-2) I-Wei Ting ( 丁義偉 ) 2009/3/31

15

A: Why using two programming language to implement?

第一 : 需要一種程式設計語言,能夠有效率的處理位元組( Byte ),封包標頭( Packet Header )等資訊,需要應用合適的演算法在大量的資料上。因此,程式內部的運行速度( run-time speed )就非常重要。 (c++)

第二 : 許多網路中的研究工作都圍繞著網路元件和環境參數的設置和改變而進行的,需要在短時間內快速的開發和模擬出所需要的網路環境( scenarios ),並且方便修改和發現、修復。在這種情形下, (run-around time) 就顯得很重要了,因為模擬環境的建立和參數資訊的配置只需要運行一次。 (Otcl)

NS2 is an object-oriented, discrete event driven network simulator developed at UC Berkely written in C++ and OTcl. C++ for “data”

Per packet action OTcl for “control”

Periodic or triggered action

Page 16: 1 Network Simulator (NS-2) I-Wei Ting ( 丁義偉 ) 2009/3/31

16

B: Overview for NS2 structure

C++ network elem ents

Otcl script ns trace fileuser

perl script results

visualisation tool diagram

nam

generates

uses

nam trace file

Page 17: 1 Network Simulator (NS-2) I-Wei Ting ( 丁義偉 ) 2009/3/31

17

Event-driven simulator

… … E9 E8 E7 E6 E5 E4 E3 E2 E1

Simulation Time

Event 1

Page 18: 1 Network Simulator (NS-2) I-Wei Ting ( 丁義偉 ) 2009/3/31

18

C: Directory structure (After install)

ns-allinone-2.30

tk8.4 bintcl8.4 ns-2.30 nam-1.12…..

Source node(C++)

Execute files

Page 19: 1 Network Simulator (NS-2) I-Wei Ting ( 丁義偉 ) 2009/3/31

19

D: How to run a scenario in NS2 (linux-based)

Step 1: cd /root/ns-allinone-2.30

Step 2: cd bin

Step 3: ./ns my_scenario.tcl

Page 20: 1 Network Simulator (NS-2) I-Wei Ting ( 丁義偉 ) 2009/3/31

20

Page 21: 1 Network Simulator (NS-2) I-Wei Ting ( 丁義偉 ) 2009/3/31

21

Part 3: Network Scenario

A: What is network scenario?

B: How to write a simple scenario

C: How to run a scenario in NS2 (linux-based)

D: How to get the trace file?

Page 22: 1 Network Simulator (NS-2) I-Wei Ting ( 丁義偉 ) 2009/3/31

22

A: What is network scenario? ( 人、事、時、地、物 )

http://www.isi.edu/nsnam/ns/tutorial/index.html

Page 23: 1 Network Simulator (NS-2) I-Wei Ting ( 丁義偉 ) 2009/3/31

23

B: How to write a simple scenario?

1.建立一個模擬器物件 (Must) set ns [new Simulator]

2.開啟一個 nam trace 檔案 (Option) set nf [open out.nam w] $ns namtrace-all $nf

3.宣告一個 finish程序 (Must) proc finish {} { global ns nf $ns flush-trace # Close the trace file close $nf

# Execute nam on the trace file exec nam out.nam & exit 0 }

Page 24: 1 Network Simulator (NS-2) I-Wei Ting ( 丁義偉 ) 2009/3/31

24

(simulation environment)

1.建立節點及其屬性 Wired node Wireless node

wireless mobile IP ad-hoc networks

2.建立節點之間的實體連線及其性質 3.建立傳輸的應用程式及其傳輸速率

Page 25: 1 Network Simulator (NS-2) I-Wei Ting ( 丁義偉 ) 2009/3/31

25

1 、建立有線的節點 (Created wired nodes)

set my_node0 [$ns node] set my_node1 [$ns node]

2 、建立實體連線 (Created physical link)

$ns duplex-link $n0 $n2 2Mb 10ms SFQ $ns simple-link $n1 $n2 3Mb 2ms RED 雙向、單向,頻寬,延遲時間,佇列的種類 (DropTail, FQ, SFQ, RED, CBQ)

3 、設定佇列的大小 (set queue length)

$ns queue-limit $my_node0 $my_node1 50

4 、設定節點及連線的 label 、顏色 (color) (Option)

$ns duplex-link-op $n0 $n1 color "green”

$ns duplex-link-op $n0 $n1 label“line1”

Page 26: 1 Network Simulator (NS-2) I-Wei Ting ( 丁義偉 ) 2009/3/31

26

5 、設定連線的成本 (link cost)

6 、設定繞路 (routing) 屬性

$ns cost $my_node1 $my_node2 10 $ns cost $my_node0 $my_node2 5

預設 :static routing 靜態 routing : $ns rtproto Static 動態 routing : $ns rtproto DV $ns rtproto DV $n1 $n2 $n3

Page 27: 1 Network Simulator (NS-2) I-Wei Ting ( 丁義偉 ) 2009/3/31

27

7 、建立 UTP 連線

set udp0 [new Agent/UDP]   # 建立 Agent$ns attach-agent $n0 $udp0 # 此 Agent 連於 n0 節點上

set cbr0 [new Application/Traffic/CBR] # 應用程式$cbr0 set packetSize_ 400 # 封包大小 (bytes)$cbr0 set interval_ 0.25 # 設定傳送的間隔$cbr0 attach-agent $udp0

set sink [new Agent/LossMonitor] # 建立接受端$ns attach-agent $n3 $sink # 接受端節點$ns connect $udp0 $sink # 將傳送端及接受端連在一起

Page 28: 1 Network Simulator (NS-2) I-Wei Ting ( 丁義偉 ) 2009/3/31

28

8 、建立 FTP 連線

set tcp [new Agent/TCP] # 建立 TCP 連線$ns attach-agent $n0 $tcp # 將此 TCP 連至 n0 節點

set ftp [new Application/FTP] # 建立一個 FTP 應用程式 $ftp attach-agent $tcp # 將此 FTP 連至 TCP 物件

set sink [new Agent/TCPSink] # 建立 TCP 的接受端 $ns attach-agent $n3 $sink # 將接受端連至 n3 節點 $ns connect $tcp $sink # 將傳送端及接受端連在一起

Page 29: 1 Network Simulator (NS-2) I-Wei Ting ( 丁義偉 ) 2009/3/31

29

此部份要安排事件發生的前後順序 例如: 第 2 秒, A節點開始傳輸UTP封包到B節點 第 3 秒, C節點開始傳輸TCP封包到D節點 第 17 秒, A節點結束傳送 第 16 秒, C 節點結束傳送

(time schedular, event occur)

$ns at 2 "$cbr0 start"

$ns at 17 “$cbr0 stop”

$ns at 3 "$ftp start"

$ns at 16 “$ftp stop”

$ns at 20 "finish"

$ns rtmodel-at 1.0 down $my_node1 $my_node

$ns rtmodel-at 2.0 up $my_node1 $my_node2

設定某連線中斷及修復

Page 30: 1 Network Simulator (NS-2) I-Wei Ting ( 丁義偉 ) 2009/3/31

30

1. set ns [new Simulator]

2. set nf [open out.nam w]3. $ns namtrace-all $nf

4. proc finish {} {5. global ns nf6. $ns flush-trace7. close $nf8. exec ./nam out.nam &9. exit 010 }

11. set n0 [$ns node]12. set n1 [$ns node]13. set n2 [$ns node]14. set n3 [$ns node]

15. $ns duplex-link $n0 $n2 2Mb 10ms DropTail16. $ns duplex-link $n1 $n2 2Mb 10ms DropTail17. $ns duplex-link $n2 $n3 1.7Mb 20ms DropTail

18. $ns queue-limit $n2 $n3 10

(Any Editor: notepad,ultra-editor…)

(Option)

(Option)

Page 31: 1 Network Simulator (NS-2) I-Wei Ting ( 丁義偉 ) 2009/3/31

31

19. set tcp [new Agent/TCP]

20. $ns attach-agent $n0 $tcp

21. set sink [new Agent/TCPSink]

22. $ns attach-agent $n3 $sink

23. $ns connect $tcp $sink

24. set ftp [new Application/FTP]

25. $ftp attach-agent $tcp

26. set udp [new Agent/UDP]

27. $ns attach-agent $n1 $udp

28. set null [new Agent/LossMonitor]

29. $ns attach-agent $n3 $null

30. $ns connect $udp $null

31. set cbr [new Application/Traffic/CBR]

32. $cbr attach-agent $udp

33. $cbr set packet_size_ 1000

34. $cbr set interval_ 0.25

Page 32: 1 Network Simulator (NS-2) I-Wei Ting ( 丁義偉 ) 2009/3/31

32

35. $ns at 0.1 "$cbr start"36. $ns at 1.0 "$ftp start"37. $ns at 4.0 "$ftp stop"38. $ns at 4.5 "$cbr stop"39. $ns at 5.0 "finish"40. $ns run

Page 33: 1 Network Simulator (NS-2) I-Wei Ting ( 丁義偉 ) 2009/3/31

33

C: How to run a scenario in NS2 (linux-based)

Step 1: cd /root/ns-allinone-2.30

Step 2: cd bin

Step 3: ./ns my_scenario.tcl

Page 34: 1 Network Simulator (NS-2) I-Wei Ting ( 丁義偉 ) 2009/3/31

34

Useful additional program

NAM: Viewing network simulation traces and real world packet traces

Page 35: 1 Network Simulator (NS-2) I-Wei Ting ( 丁義偉 ) 2009/3/31

35

Page 36: 1 Network Simulator (NS-2) I-Wei Ting ( 丁義偉 ) 2009/3/31

36

1 2 3 4 5 6 7 8 9 10 11 12

r 1.340958 3 2 ack 40 ------- 2 3.2 0.1 11 181

+ 1.340958 2 0 ack 40 ------- 2 3.2 0.1 11 181

- 1.340958 2 0 ack 40 ------- 2 3.2 0.1 11 181

+ 1.341225 2 3 cbr 210 ------- 0 0.0 3.1 84 166

- 1.341225 2 3 cbr 210 ------- 0 0.0 3.1 84 166

r 1.453111 1 0 tcp 60 ------- 2 0.1 3.2 97 81

+ 1.453111 0 2 tcp 60 ------- 2 0.1 3.2 97 81

d 1.453111 0 2 tcp 60 ------- 2 0.1 3.2 97 81

C: How to get the trace file?

set my_trace [open demo1.tr w]$ns trace-all $my_trace

Page 37: 1 Network Simulator (NS-2) I-Wei Ting ( 丁義偉 ) 2009/3/31

37

每個欄位所代表的意義如下: 1. 代表事件的類別

r :代表目的端收到 packet + :代表 packet 放入 queue 中 - :代表 packet 從 queue 中取出 d :代表 queue 已經滿了,這個 packet 被 drop 掉

2. 代表事件發生的時間 3. 代表 packet 的 source node 4. 代表 packet 的 destination node 5. 代表 packet 的類別 6. 代表 packet 的大小 (encoded in IP header) 7. 代表 packet 的 flags 8. 代表 connection(flow) 的 id 9. 代表 source address ( node.port ) 10. 代表 destinations address ( node.port ) 11. 代表 packet 的 sequence number ( network layer protocol's ) 12. 代表 packet 的 id ( unique )

Page 38: 1 Network Simulator (NS-2) I-Wei Ting ( 丁義偉 ) 2009/3/31

38

Set f1 [open demo1.record w] proc record { } {

global null f1

set ns [Simulator instance]

set time 0.1

set now [$ns now]

set bw [$null set bytes_ ]

puts $f1 “$now $bw”

$null set bytes_ 0

$ns at [expr $now+$time] “record”

} $ns at 0.0 “record”

LossMonitor nlost_ :Number of packets lost npkts_ :Number of packets received bytes_ :Number of bytes received lastPktTime_ :Time at which the last packet was received expected_ :The expected sequence number of the next packet

Page 39: 1 Network Simulator (NS-2) I-Wei Ting ( 丁義偉 ) 2009/3/31

39

Network Setting Sender : Node 1, 2, 3 Receiver : Node 7 Using CBR Packet Size : 1000(k) Time Interval : 1 (s) Simulation Time : 15 (s)

Relay Nodes Receiver

1

76

5

4

3

2

Senders

Page 40: 1 Network Simulator (NS-2) I-Wei Ting ( 丁義偉 ) 2009/3/31

40

Tcl Code#Create a simulator objectset ns [new Simulator]

#Define different colors for data flows$ns color 1 Blue$ns color 2 Red$ns color 3 Green

#Open the nam trace fileset nf [open out.nam w]$ns namtrace-all $nf

#Open the trace fileset nd [open out.tr w]$ns trace-all $nd

Page 41: 1 Network Simulator (NS-2) I-Wei Ting ( 丁義偉 ) 2009/3/31

41

Tcl Code

#Define a 'finish' procedureproc finish {} {

global ns nd nf $ns flush-trace

#Close the trace fileclose $ndclose $nf#Execute nam on the trace file

exec nam out.nam & exit 0}

Page 42: 1 Network Simulator (NS-2) I-Wei Ting ( 丁義偉 ) 2009/3/31

42

Tcl Code#Create four nodes

set s0 [$ns node]

set s1 [$ns node]

set s2 [$ns node]

set r0 [$ns node]

set r1 [$ns node]

set r2 [$ns node]

set d [$ns node]

#Create links between the nodes

$ns duplex-link $s0 $r0 10Mb 10ms DropTail

$ns duplex-link $s1 $r0 10Mb 10ms DropTail

$ns duplex-link $s2 $r1 10Mb 10ms DropTail

$ns duplex-link $r0 $r2 10Mb 10ms DropTail

$ns duplex-link $r1 $r2 10Mb 10ms DropTail

$ns duplex-link $r2 $d 10Mb 10ms DropTail

Relay Nodes Receiver

1

76

5

4

3

2

Senders

s0

s1

s2 r1

r0

r2 d

Page 43: 1 Network Simulator (NS-2) I-Wei Ting ( 丁義偉 ) 2009/3/31

43

Tcl Code

#Set position of each node$ns duplex-link-op $s0 $r0 orient right-down$ns duplex-link-op $s1 $r0 orient right-up$ns duplex-link-op $s2 $r1 orient right-up$ns duplex-link-op $r0 $r2 orient right-down$ns duplex-link-op $r1 $r2 orient right-up$ns duplex-link-op $r2 $d orient right

#Monitor the queue for the link$ns duplex-link-op $r0 $r2 queuePos 0.5$ns duplex-link-op $r1 $r2 queuePos 0.5$ns duplex-link-op $r2 $d queuePos 0.5

Page 44: 1 Network Simulator (NS-2) I-Wei Ting ( 丁義偉 ) 2009/3/31

44

Tcl Code#Set flow ID$udp0 set fid_ 1$udp1 set fid_ 2$udp2 set fid_ 3

#Schedule events for the CBR agents$ns at 0.0 "$cbr0 start"$ns at 0.0 "$cbr1 start"$ns at 0.0 "$cbr2 start"$ns at 15.0 "$cbr0 stop"$ns at 15.0 "$cbr1 stop"$ns at 15.0 "$cbr2 stop“

#Call the finish procedure after 5 seconds of simulation time$ns at 15.0 "finish"

#Run the simulation$ns run

Page 45: 1 Network Simulator (NS-2) I-Wei Ting ( 丁義偉 ) 2009/3/31

45

Simulation

Page 46: 1 Network Simulator (NS-2) I-Wei Ting ( 丁義偉 ) 2009/3/31

46

Analyze Result out.tr+ 0 1 3 cbr 1000 ------- 2 1.0 6.1 0 1- 0 1 3 cbr 1000 ------- 2 1.0 6.1 0 1+ 0 1 3 cbr 1000 ------- 2 1.0 6.1 1 2+ 0 1 3 cbr 1000 ------- 2 1.0 6.1 2 3+ 0 1 3 cbr 1000 ------- 2 1.0 6.1 3 4+ 0 1 3 cbr 1000 ------- 2 1.0 6.1 4 5+ 0 2 4 cbr 1000 ------- 3 2.0 6.1 0 6- 0 2 4 cbr 1000 ------- 3 2.0 6.1 0 6+ 0 2 4 cbr 1000 ------- 3 2.0 6.1 1 7...

Page 47: 1 Network Simulator (NS-2) I-Wei Ting ( 丁義偉 ) 2009/3/31

47

Analyze ResultEvent Time From To

nodePkt

nodePkt type

Flags size

Fid Src addr

Dst addr

Seq Num Pkt id

+ 0 1 3 cbr 1000 2 1.0 6.1 0 1

- 0 1 3 cbr 1000 2 1.0 6.1 0 1

+ 0 1 3 cbr 1000 2 1.0 6.1 1 2

+ 0 1 3 cbr 1000 2 1.0 6.1 2 3

+ 0 1 3 cbr 1000 2 1.0 6.1 3 4

+ 0 1 3 cbr 1000 2 1.0 6.1 4 5

+ 0 2 4 cbr 1000 3 2.0 6.1 0 6

- 0 2 4 cbr 1000 3 2.0 6.1 0 7

+ 0 2 4 cbr 1000 3 2.0 6.1 1 8

eventr:receive(at to_node)+:enqueue(at queue)-:dequeue(at queue)d:drop (at queue)

Src addr:(node).(port)Dst addr:(node).(port)

Page 48: 1 Network Simulator (NS-2) I-Wei Ting ( 丁義偉 ) 2009/3/31

48

awk – measure delayBEGIN { # 程式初始化,設定一變數以記錄目前最高處理封包的 ID 。 highest_packet_id = 0; } { action = $1; time = $2; from = $3; to = $4; type = $5; pktsize = $6; flow_id = $8; src = $9; dst = $10; seq_no = $11; packet_id = $12;

Page 49: 1 Network Simulator (NS-2) I-Wei Ting ( 丁義偉 ) 2009/3/31

49

awk – measure delay# 記錄目前最高的 packet ID if ( packet_id > highest_packet_id )

highest_packet_id = packet_id; # 記錄封包的傳送時間 if ( start_time[packet_id] == 0 )

start_time[packet_id] = time; # 記錄 CBR (flow_id=1) 的接收時間 if ( flow_id == 3 && action != "d" ) { if ( action == "r" ) { end_time[packet_id] = time; } } else { # 把不是 flow_id=2 的封包或者是 flow_id=2 但此封包被 drop 的時間設為 -1 end_time[packet_id] = -1; } }

Page 50: 1 Network Simulator (NS-2) I-Wei Ting ( 丁義偉 ) 2009/3/31

50

awk – measure delay

END {

# 當資料列全部讀取完後,開始計算有效封包的端點到端點延遲時間 for ( packet_id = 0; packet_id <= highest_packet_id; packet_id++ ) {

start = start_time[packet_id];

end = end_time[packet_id];

packet_duration = end - start;

# 只把接收時間大於傳送時間的記錄列出來 if ( start < end ) printf("%f %f\n", start, packet_duration);

}

Page 51: 1 Network Simulator (NS-2) I-Wei Ting ( 丁義偉 ) 2009/3/31

51

Result

Executing:$awk –f measure-delay.awk out.tr

0.010800 0.0224000.000800 0.0340000.001600 0.0348000.002400 0.0356000.003200 0.0364001.000000 0.033200.....

Page 52: 1 Network Simulator (NS-2) I-Wei Ting ( 丁義偉 ) 2009/3/31

52

Page 53: 1 Network Simulator (NS-2) I-Wei Ting ( 丁義偉 ) 2009/3/31

53

Wireless Ad hoc network

1 2 6client server

3 4 5

Page 54: 1 Network Simulator (NS-2) I-Wei Ting ( 丁義偉 ) 2009/3/31

54

my_scenario.tcl

1. set val(chan) Channel/WirelessChannel 2. set val(prop) Propagation/TwoRayGround 3. set val(netif) Phy/WirelessPhy 4. set val(mac) Mac/802_11 5. set val(ifq) Queue/DropTail/PriQueue 6. set val(ll) LL 7. set val(ant) Antenna/OmniAntenna 8. set val(ifqlen) 50 9. set val(nn) 7 10. set val(rp) AODV

11. set ns [new Simulator] 12. set tracefd [open my_scenario.tr w] 13. $ns trace-all $tracefd

Page 55: 1 Network Simulator (NS-2) I-Wei Ting ( 丁義偉 ) 2009/3/31

55

14. set nf [open my_scenario.nam w] 15. $ns namtrace-all-wireless $nf 1000 1000

16. set topo [new Topography] 17. $topo load_flatgrid 1000 1000 18. create-god $val(nn)

19. $ns node-config -adhocRouting $val(rp) \ 20. -llType $val(ll) \ 21. -macType $val(mac) \ 22. -ifqType $val(ifq) \ 23. -ifqLen $val(ifqlen) \ 24. -antType $val(ant) \ 25. -propType $val(prop) \ 26. -phyType $val(netif) \ 27. -channelType $val(chan) \ 28. -topoInstance $topo \ 29. -agentTrace ON \ 30. -routerTrace ON \ 31. -macTrace OFF \ 32. -movementTrace OFF

Page 56: 1 Network Simulator (NS-2) I-Wei Ting ( 丁義偉 ) 2009/3/31

56

33. $node_(0) set X_ 1.0 34. $node_(0) set Y_ 999.0

35. $node_(1) set X_ 100.0 36. $node_(1) set Y_ 500.0

37. $node_(2) set X_ 250.0 38. $node_(2) set Y_ 500.0

39. $node_(3) set X_ 400.0 40. $node_(3) set Y_ 500.0

41. $node_(4) set X_ 550.0 42. $node_(4) set Y_ 500.0

43. $node_(5) set X_ 700.0 44. $node_(5) set Y_ 500.0

45. $node_(6) set X_ 850.0 46. $node_(6) set Y_ 500.0

Page 57: 1 Network Simulator (NS-2) I-Wei Ting ( 丁義偉 ) 2009/3/31

57

47. set udp0 [new Agent/UDP] 48. set null0 [new Agent/Null] 49. $ns attach-agent $node_(2) $udp0 50. $ns attach-agent $node_(6) $null0 51. $ns connect $udp0 $null0 52. set cbr0 [new Application/Traffic/CBR] 53. $cbr0 set type_ CBR 54. $cbr0 set packet_size_ 500 55. $cbr0 set interval_ 0.5 56. $cbr0 attach-agent $udp0

57. $ns at 0.0 "$node_(0) setdest 1 999 10" 58. $ns at 0.0 "$node_(1) setdest 100 500 10" 59. $ns at 0.0 "$node_(2) setdest 250 500 10" 60. $ns at 0.0 "$node_(3) setdest 400 500 10" 61. $ns at 0.0 "$node_(4) setdest 550 500 10" 62. $ns at 0.0 "$node_(5) setdest 700 500 10" 63. $ns at 0.0 "$node_(6) setdest 850 500 10"

Page 58: 1 Network Simulator (NS-2) I-Wei Ting ( 丁義偉 ) 2009/3/31

58

64. $ns at 100.0 "$cbr0 start" 65. $ns at 105.0 "$cbr0 stop" 66. $ns at 110.0 "stop"

67. proc stop {} { 68. global ns tracefd nf 69. $ns flush-trace 70. exit 0 71. }

72. $ns run

Page 59: 1 Network Simulator (NS-2) I-Wei Ting ( 丁義偉 ) 2009/3/31

59

Consideration of TCL and C++

1. How to choose source and destination in different time? 2. How to configure the query action? 3. How to simulate cache operation? 4. How to apply routing protocol to create routing path? 5. How to write the caching protocol?

Topic:SimpleCache protocol

1 2 6client server

3 4 5

Page 60: 1 Network Simulator (NS-2) I-Wei Ting ( 丁義偉 ) 2009/3/31

60

A B C D

A B C D

A B C E

DSDV

DSR

AODV

A A-B A-B-C

A-B-C-DA-B-C-DA-B-C-D

D N H S

A C 3 4

D N H S

A B 2 2

E E 1 4

D N H S

E B 3 4

D N H S

A A 1 2

E C 2 4

RREQ RREQ RREQ

RREPRREPRREP

Page 61: 1 Network Simulator (NS-2) I-Wei Ting ( 丁義偉 ) 2009/3/31

61

/root/ns-allinone-2.30/ns-2.30/aodv (aodv.cc, aodv.h)

// Event-driven sequential for the basic request and response // Description 1: Each MH executes Query_Model(...) each second. // // QueryTimer trigger Query_Model(...) --> Requester_Lookup_Local_Cache(...) // If local miss, run AODV routing to create the routing path. // --> [AODV: sendRequest(...)-->...--> recvReply(...)] // // --> Begin_to_Data_Discovery_Process(index,rt->rt_dst) // --> Requester_Send_Data_Request(source, destination, query_data_id); // --> Recv_Data_Request_from_Requester(p); // --> Intermediate_Forward_Data_Request(p); // --> Recv_Data_Request_from_Intermdiate(p); // --> Intermediate_Forward_Data_Request(p); // ........... // ........... // ........... // --> Original_Server_Send_Data_Reply(p) // --> Recv_Data_Reply_from_Original_Server(p); // --> Intermediate_Forward_Data_Reply(p); // --> Recv_Data_Reply_from_Intermediate(p); // --> Intermediate_Forward_Data_Reply(p); // ........... // ........... // ........... // // --> Requester_Recv_Data_Reply(p)

Page 62: 1 Network Simulator (NS-2) I-Wei Ting ( 丁義偉 ) 2009/3/31

62

1. void QueryTimer::handle(Event*)

void QueryTimer::handle(Event*) { agent->query_model(); Scheduler::instance().schedule(this, &intr, 1); }

…. …. …. …. …. E10 E9 E8 E7 E6 E5 E4 E3 E2 E1

Simulation Time

第 1 秒第 2 秒

Page 63: 1 Network Simulator (NS-2) I-Wei Ting ( 丁義偉 ) 2009/3/31

63

2. query_model()

…. …. …. …. …. E10 E9 E8 E7 E6 E5 E4 E3 E2 E1

Simulation Time

第 1 秒第 2 秒

Page 64: 1 Network Simulator (NS-2) I-Wei Ting ( 丁義偉 ) 2009/3/31

64

Useful variable

CURRENT_TIME printf(“\n current_time=%.5f”,CURRENT_TIME);

index: printf(“\n node_id =%d”,index);

Page 65: 1 Network Simulator (NS-2) I-Wei Ting ( 丁義偉 ) 2009/3/31

65

How to compile source code?

1. cd /root/ns-allinone-2.30/ns-2.30 2. make