2008年8月27日 星期三

ns2 - 指令格式

建立一個simple-link

$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)移動

沒有留言: