$ns simplex-link <node1> <node2> <bandwidth> <delay> <queue type> <args>
建立一個duplex-link
$ns duplex-link <node1> <node2> <bandwidth> <delay> <queue type> <args>
<queue type> := DropTail | RED | CBQ | FQ | SFQ | DRR
設定simple-link的屬性
$ns simplex-link-op <n1> <n2> <op> <args>
設定duplex-link的屬性
$ns duplex-link-op <n1> <n2> <op> <args>
<op> := orient | color | queuePos | label
為nam定義color index, 後面可以這個index來指名顏色。
$ns color <color-id> <color>
[UDP Agent]
Maximum Segment Size (MSS)
$udp set packetSize_ <pksize>
目的地IP
$udp set dst_addr_ <address>
目的地Port number
$udp set dst_port_ <portnum>
Time-To-Live
$udp set ttl_ <time-to-live>
[TCP Agent]
TCP Agent被實作在tcp.{cc, h}中,主要有兩種TCP agent:one-way agent和 two-way agent。One-way就是單純只扮演Sender或是 Receiver,Two-way同時是Sender也是Receiver。
[One-Way Sender]
Agent/TCP:a "tahoe" TCP sender
Agent/TCP/Reno: a "Reno" TCP sender
Agent/TCP/Newreno:a "Reno" TCP sender with a modification
Agent/TCP/Sack1:TCP with selective repeat (follows RFC2018)
Agent/TCP/Vegas:TCP Vegas
Agent/TCP/Fack:Reno TCP with "forward acknowledgement"
One-Way Receiver
Agent/TCPSink:TCP sink with one ACK per Packet
Agent/TCPSink/DelAck:TCP sink with configurable delay per ACK
Agent/TCPSink/Sack1:selective ACK sink (follows RFC2018)
Agent/TCPSink/Sack1/DelAck:Sack1 with DelAck
Two-way只有支援Reno:Agent/TCP/FullTcp
[Wireless]
wireless model主要是由MobileNode所組成,MobileNode由Node這個類別繼承而來,因此MobileNode除了有基本的Node能力,還有移動和無線傳送接收的能力。目前ad-hoc routing protocol有支援四種Destination Sequence Distance Vector (DSDV)、 Dynamic Source Routing (DSR) 、 Temporally Ordered Routing Algorithm (TORA)以及 Ad-hoc On-demand Distance Vector (AODV)。
在建立Mobile Node之前,我們必須定義Mobile Node所活動的topology大小。
set topo [ new Topography ]
$topo load_flatgrid $opt(x) $opt(y)
接著我們要建立一個God instance,這是用來建立一個矩陣,用以儲存topology的連線資訊。
create-god $opt(nn)
舊的API建立Mobile Node根據使用的routing protocol,而新的 API則是藉由$ns node-config這個instproc來設定,接著就使用產生一般的node的方式產生Mobile Node。
$ns_ node-config -adhocRouting $opt(adhocRouting)
-llType $opt(ll)
-macType $opt(mac)
-ifqType $opt(ifq)
-ifqLen $opt(ifqlen)
-antType $opt(ant)
-propInstance [new $opt(prop)]
-phyType $opt(netif)
-channel [new $opt(chan)]
-topoInstance $topo
-wiredRouting OFF
-agentTrace ON
-routerTrace OFF
-macTrace OFF
for { set i 0 } { $i < $opt(nn) } { incr i } {
set node($i) [ $ns node ]
$node($i) random-motion 0 ;# disable random motion
}
雖然Mobile Node被設計成可以在三維空間中移動(X,Y,Z),但是Z尚未被使用,因此我們假設只在平面上移動,也就是Z永遠等於0。我們藉由設定X,Y,Z來初始Mobile Node的初始位置,並且使用setdest來移動Mobile Node,也可以使用$node start來做random的移動,不過不建議使用此方式,如果要做random的scenario可以使用CMU提供的tool -- setdest (放在~ns/indep-utils/cmu-scen-gen/中)。
$node set X_ <x1>
$node set Y_ <x2>
$node set Z_ 0
$ns at <time> $node setdest <x2> <y2> <speed> ;# 在時間time秒, 以速度speed往(x2,y2)移動
沒有留言:
張貼留言