Você está na página 1de 19

Introduoaosimuladorderedes

TheNetworkSimulatorns2

RodolfoOliveira
rado@fct.unl.pt

Contedo

1.

Introduo

2.

DescriodoSimulador

3.

OrganizaodasCamadasdeProtocolos

4.

Exemplosdeparametrizaodesimulaes

5.

4.1

Definiodevariveis

4.2

Configuraodeumnmvelsemfios

4.3

ConfiguraodeMovimentodosNs

4.4

Estabelecimentodefluxosdetrfego

10

4.5

Controlodasimulao

10

4.6

ExecuodoscriptTcl

11

4.7

Geraodepadrodemovimentodosns

11

4.8

Outrasconfiguraes

12

Definiodoalcancedetransmissodosns

12

Definiodopadresdegeraodetrfego

12

Anlisedosficheirosdetrace

12

5.1

Tracesdosprotocolos

12

5.2

Namvisualizadordarede

13

Bibliografia

14

Anexo1ficheiromy_first_script.tcl

15

Anexo2InstalaodoSimulador

18

Anexo3IntegraodocdigodosimuladornoambientededesenvolvimentoECLIPSE

19

1. Introduo

OsimuladorTheNetworkSimulatorns2[1](consultaroanexo2parainstruesdeinstalao),
abreviadonestedocumentoporns2,umsimuladoropensourcebaseadoemeventosdiscretose
especialmentevocacionadopara simulaoderedes. Oprojectoquelhe deuorigemcomeouem
1989. Porm, nos ltimos anos, evoluiu substancialmente, sendo o simulador mais popular na
comunidadedeinvestigao,utilizadonasprincipaisuniversidadeseinstitutosdeinvestigao.
Osimuladortrabalhaaonveldopacote/trama,sendomuitopopularasuautilizaoemtrabalhos
queincluamosseguintestemas:

Protocolos de transporte, nomeadamente o TCP (inclui mdulos com as verses Reno,


Tahoe,VegaseSack,etc.);
Protocolos decontrolode acesso ao meio(inclui mdulos de TDMA, norma 802.3,norma
802.11,etc.);
Encaminhamentopararedesadhoc(incluiosprotocolosAODV,DSDV,DSReTORA,etc.);
Protocolosespecficospararedesdesensoressemfios(incluiosprotocolosdiffusionegaf,
etc);
ProtocolosMulticast;
Protocolosparacomunicaesviasatlites;
etc.

Dado que o simulador open source e se encontra devidamente documentado, facilmente se


analisam as realizaes dos protocolos j includos na distribuio e se desenvolvem novos
protocolos. Embora a distribuio do simulador no inclua alguns protocolos interessantes, tais
comooprotocolodeencaminhamentoBGP,oudoprotocolodeencaminhamentoOLSR,nodifcil
encontrar mltiplas realizaes de mdulos que implementam os protocolos, principalmente nas
pginas dos diversos grupos de investigao ligados a empresas ou a universidades. Estas so as
principaisrazesquejustificamasuagrandepopularidade.

2. DescriodoSimulador

O simulador foi inicialmente escrito no ambiente Unix, baseandose num sistema de eventos
discretos.Basicamente,todasas actividades de interaco originadas pelos nsso traduzidasem
eventos.Esteseventospodemrepresentaroexpirardeumrelgio,oinciodeenviodeumatrama
paraocanal,oaumentodajaneladecongestodoTCP,etc.Umavezoriginadososeventos,estes
so guardados numa fila de espera na ordem pela qual so agendados para serem executados. O
tempodesimulaoavanadeacordocomoseventosexecutados.
Afigura1pretendeexemplificarasituaoemqueon1enviaumpacoteparaon2noinstante
desimulao1.5segundose,on2recebeopacotenoinstante1.7s.Apsisso,on2enviaum
pacotedereconhecimento(Acknowledge)paraon1noinstante1.8s,oqualrecebidopelon1
no instante 2.0 s. Neste exemplo, so gerados 4 eventos nos instantes temporais referidos. Esses

eventos so colocados na fila de eventos de forma ordenada, ficando os eventos com instantes
menoresnacabeadafilaparaquesejamosprimeirosaseremexecutados.

Figura1Exemplodemonstrativodageraodeeventos.

Quandoon1enviaopacote,executandoumeventodeenviodepacotenoinstante1.5s,agenda
umeventodereceponon2paraoinstante1.7s.Aps seterexecutadooeventodoinstante
1.5s,osimuladorretiraodalistadeeventoseiniciaoprximo,quenesteexemplooeventode
receponoinstante1.7s.Destaforma,osimuladoravanaotempodesimulaode1.5spara1.7s,
pois no existem eventos agendados na fila de espera entre estes dois instantes. A simulao
terminaquandonoexistiremmaiseventosnafiladeespera.

Osimuladorutilizaduaslinguagensdeprogramao:

AlinguagemC++utilizadaparaprogramarosmdulosresponsveispelaexecuodos
protocolos ou aplicaes. O comportamento detalhado do protocolo exige uma
linguagemdeprogramaodesistemasdebaixonvele,nesteaspecto,autilizaoda
linguagem C++ permite a manipulao de Bytes, processamento de pacotes, e
implementao dos algoritmos. Alm disso apresenta um tempo de execuo
computacionalmuitobaixo.

A linguagem Tcl utilizada para definir de uma forma rpida as parametrizaes dos
mdulos programados em C++. Dessa forma, possvel parametrizar, atravs de um
scriptTcl,umconjuntodemduloscontidosnosdiversosnsdaredenumcurtoespao
de tempo. Alm disso, como o Tcl acede directamente aos atributos dos objectos
programados em C++, a alterao de um parmetro no script Tcl no implica a
compilaodetodoocdigoC++.

Deumaformageral,alinguagemC++utilizadaquandosedesejaalterarocomportamentodeum
mdulo existente ou alguma outra operao em que seja necessria a manipulao de
pacotes/tramas(consultaroanexo3paraintegrarocdigodosimuladornumprojectoemambiente
ECLIPSE).Paraaconfigurao/modificaodocenrioasimularutilizasealinguagemTcl.
A figura 2 ilustra o exemplo apresentado na figura 1, onde se pretendem simular uma rede
constitudapor2ns.OscriptTclcomeapordefinirumainstnciadosimuladorrepresentadapela
varivelns_.Apsissodefineoarraynode_comdoisns,inserindonasposies0e1doarray
uma instanciao da classe MobileNode, a qual executa o comportamento do protocolo de
comunicao utilizado pelos ns. Os objectos MobileNode so programados em C++. fcil criar
novos ns num script Tcl utilizado para executar as simulaes. Enquanto os objectos C++ so

programados uma nica vez e integrados no simulador, os scripts Tcl permitem utilizar esses
objectosemmltiploscenriosdesimulao.

Figura2AmbientedeSimulao.

3. OrganizaodasCamadasdeProtocolos

Nesta seco descrevemse as camadas que constituem a pilha de protocolos utilizada pelo
simulador. nestas camadas que se devem incluir as classes que implementam os mdulos dos
protocolosasimular.Daqueosimuladorapresenteclassesmequeconstituemainterfaceparaas
camadas,sendocadamduloprogramadoatravsdeummtododeheranadaclasseme.
Descrevemse de seguida cada uma das camadas de protocolos do simulador, para as quais se
podem desenvolver novos mdulos (programados em C++). As camadas encontramse
esquematizadas na figura 3, apresentandose as relaes entre elas para o caso especfico do
protocolodeencaminhamentoDSDV.

Figura3Esquematizaodapilhadeprotocolosdosimuladorns2.
5

Comeando pela camada de mais baixo nvel denominada Radio Propagation Model, esta
responsvelporsimularomodelodepropagaoderdio,casosesimulemredessemfios.nesta
camadaquesepodemutilizarmodelosrelacionadoscomotipodeantenasutilizadasnasimulao.
Esta camada decide ainda quando que uma trama pode ser recebida por um determinado n,
dadoqueoemissorotransmitiucomumadadapotncia,seencontraaumadadadistnciae,utiliza
uma dada frequncia de rdio. Esta deciso possvel porque a camada utiliza modelos para
quantificarasperdasdepropagao,incluindoosmodelosfreespaceetworay.
As interfaces de hardware utilizadas por um n para aceder ao canal so modeladas na camada
NetIf. Estas tratam dos parmetros relacionados com a integridade do sinal, colises e erros de
transmisso. Alm disso, associam a cada transmisso osvaloresdepotncia, frequncia e outros
utilizadosnasimulao.
Aterceiracamadadapilhaimplementaoprotocolodeacessoaomeio(MAC).Ocdigodasclasses
que implementam esta camada pode muitas vezes ser uma transcrio para C++ do firmware das
placasdecomunicaes,responsveispelaimplementaorealdoprotocolodeacessoaomeio.O
simuladorjincluialgunsprotocolosdevidamentetestados,taiscomoanormaIEEE802.11.
AcamadaIFqinterfacequeueumafiladeespera.Estaexisteparadarprioridadeaospacotes
deencaminhamento.Casosejautilizadoumprotocolonestacamada,denominadoPriQueue,todos
os pacotes de encaminhamento so inseridos na cabea da lista de espera, de forma a serem os
primeirosaseremservidos.Estacamadapermiteaindaaconfiguraodefiltroscomendereosde
pacotesquesedesejemremoverdafila.
Acamadaresponsvel pelonvel de ligao (LL link layer) executa osprotocolosde ligao de
dados. Basicamente os protocolos definidos nesta camada so responsveis pela fragmentao e
reagrupamento dos pacotes. Esta camada est ligada ao protocolo ARP (Address Resolution
Protocol),utilizadopararealizararesoluodosendereosIPassociadosaosendereosMAC.
OsprotocolosdeencaminhamentosoespecificadosnacamadaRTagent.Nacamadaagentso
especificadas as aplicaes geradoras de trfego. Esta camada pode ser vista como a camada
aplicao da pilha OSI. O simulador j distribudo com geradores clssicos de trfego
implementadosparaestacamada,taiscomoaplicaesCBR,TCP,Sink,FTP,etc.

4. Exemplosdeparametrizaodesimulaes

NestasecoexemplificaseadefiniodeumscriptTclparaexecutarumasimulaodedoisns
mveisligadossemfios.Pretendesequeon0enviedadosutilizandoumaaplicaoFTPparaon
1.Osnsencontramsenumareade500x500metroseambossemovimentam.Afigura4ilustraa
simulaoadefinir.


Figura4Simulaopretendida.

4.1

Definiodevariveis

boa prtica comear por definir todas as variveis que so utilizadas na simulao. Em Tcl o
comandosetvalatribui um valor aumavarivel (val). Talcomo se poder observar no cdigoTcl
apresentadoaseguir,comeasepordefiniravarivelchanquerepresentaotipodecanalutilizado.
Neste caso, a varivel definida com um identificador de canal do tipo sem fios. As restantes
variveisrepresentam,porordem,otipodemodelodepropagaordio,otipodeantena,otipo
de nvel de ligao, o tipo de fila de espera IFq, o comprimento dessa fila de espera, o tipo de
interfacefsicautilizada,oprotocolodeacessoaomeio,oprotocolodeencaminhamento,onmero
de ns simulados e, finalmente, a definio do comprimento e da largura da regio a simular
(definidaemmetros).
#======================================================================
# Define options
#======================================================================
set val(chan) Channel/WirelessChannel
;# channel type
set val(prop) Propagation/TwoRayGround
;# radio-propagation model
set val(ant) Antenna/OmniAntenna
;# Antenna type
set val(ll) LL
;# Link layer type
set val(ifq) Queue/DropTail/PriQueue
;# Interface queue type
set val(ifqlen) 50
;# max packet in ifq
set val(netif) Phy/WirelessPhy
;# network interface type
set val(mac) Mac/802_11
;# MAC type
set val(rp) DSDV
;# ad-hoc routing protocol
set val(nn) 2
;# number of mobilenodes
set val(x) 500
;
set val(y) 500
;# x-y simulation's area

Seguidamente,atribuisevarivelns_umainstanciaodaclasseSimulator.ns_passaaserum
objectoqueserveparacontrolarasoperaesdosimulador.

setns_[newSimulator]

Quando as simulaes acabam, o ns2 possibilita o acesso aos dados reportados pelos distintos
ns/protocoloscontidosnasimulao(tracedata)bemcomoatodoopercursorealizadoporcada
um dos ns mveis. Para se definir o ficheiro para onde os dados dos protocolos so escritos,
comease por abrirum ficheiropara escrita simple.tr,oqualassociado aumobjectotracefd.
Posteriormenteindicaseaoobjectosimuladorns_oobjectoficheirotracefd(linha2).Adefiniodo
ficheirodetracedemovimentos(objectonamtrace)executadodeformasemelhante.
#======================================================================
# Define trace files
#======================================================================
set tracefd [open simple.tr w]
$ns_ trace-all $tracefd
set namtrace [open movement.nam w]
$ns_ namtrace-all-wireless $namtrace $val(x) $val(y)

Paradefinirareaondeosnsdepodemmovimentar,instanciaseumobjectodotipoTopography.
Este objecto depois informado acerca da rea de simulao, atravs da invocao do mtodo
load_flatgrid.Noexemploabaixodefineseoquadradocom500metrospor500metros.
settopo[newTopography]
$topoload_flatgrid$val(x) $val(y)

Ocomandocreategodrecebecomoargumentoonmerodenseusadoporumdeus(God)para
criarumamatrizcominformaodaconectividadedatopologia.
setgod_[creategod$opt(nn)]

4.2

Configuraodeumnmvelsemfios

Um n configurado atravs da especificao do tipo de protocolos que utiliza nas diferentes


camadas que constituem a pilha de protocolos. Para o efeito, invocase no objecto ns_ o mtodo
nodeconfig, o qual permite especificar os protocolos usados em cada camada. No exemplo
representadoaseguir,comeasepordefiniroprotocolodeencaminhamento,otipodecamadaLL,
otipodefiladeesperaIFq,oseucomprimento,otipodeantena,omodelodepropagao,otipode
interface fsica, e o tipo de canal, pela ordem representada. Posteriormente indicase a topologia
definida na seco 4.1 e representada na varivel "topo. Nas linhas seguintes, indicase o estado
dos traces nas diferentes camadas. O comando agentTrace ON activa a capacidade dos agentes
definidos poderem reportar os seus estados (no ficheiro de trace) medida que a simulao
decorre. Da mesma forma existem os comandos routerTrace e macTrace que servem para
activar/inibirapossibilidadedonveldeencaminhamentooudosubnvelmacreportaremassuas
operaes. J o comando movementTrace, utilizado para o registo do movimentos dos ns
simulados.
No ciclo for instanciamse os diferentes ns incluindo as referencias para os objectos no array
node_.inibidaarealizaodemovimentosaleatriosatravsdocomandorandommotion0.

$ns_nodeconfigadhocRouting$val(rp)\
llType$val(ll)\
macType$val(mac)\
ifqType$val(ifq)\
ifqLen$val(ifqlen)\
antType$val(ant)\
propType$val(prop)\
phyType$val(netif)\
channelType$val(chan)\
topoInstance$topo\
agentTraceON\
routerTraceON\
macTraceON\

movementTraceON

for{seti0}{$i<$val(nn)}{incri}{

setnode_($i)[$ns_node]

$node_($i)randommotion0;#disablerandommotion
}}

4.3

ConfiguraodeMovimentodosNs

Existem basicamente duas formas de obter o movimento dos ns: atravs de uma configurao
estticadefinida no scriptTcl, ou atravs deum ficheiroobtido automaticamente atravs de uma
aplicaoquerealizeumdeterminadomodelodemobilidade.
Nasduasformasapresentadasanteriormenteutilizaseomesmomtodoparaespecificaodo
movimento.Omtodo,apresentadonosprximosdoisexemplos,comeapordefiniraposio
inicialdosdiferentesnsdaseguinteforma:
$node_(0)setX_5.0
$node_(0)setY_2.0
$node_(0)setZ_0.0
$node_(1)setX_390.0
$node_(1)setY_385.0
$node_(1)setZ_0.0

Posteriormente,definemsemovimentosparacadaumdosns.Noexemploseguinte,aprimeira
linhaindicaquenoinstantedesimulao50son1semoveparaaposio(x=25.0,y=20.0)com
umavelocidadede15.0m/s.Asseguinteslinhaspodemserlidasdamesmaforma,emboracom
outrasparametrizaes.
#Node_(1)startstomovetowardsnode_(0)
$ns_at50.0"$node_(1)setdest25.020.015.0"
$ns_at10.0"$node_(0)setdest20.018.01.0"

#Node_(1)thenstartstomoveawayfromnode_(0)
$ns_at100.0"$node_(1)setdest490.0480.015.0

4.4

Estabelecimentodefluxosdetrfego

Afigura5exemplificaofluxodedadosquesepretendedefinirentreosdoisns0e1.On0dever
simularoprotocoloFTP(FileTransferProtocol),utilizandoparaissooprotocolodetransporteTCP
(TransmissionControlProtocol).

Figura5Fluxodetrfegoadefinirentreosdoisns.
Exemplificase abaixo a especificao do fluxo de trfego apresentado na figura 5. Comease por
instanciar um objecto responsvel por realizar o protocolo TCP, o qual denominado de tcp
(linhas1e2).On1necessitadereceberinformaovindadon0.Daserdefinidoumobjectode
recepodedados(denominadosink)(linha4).Osobjectostcpesinksoassociadosaosns
mveis atravs do comando attachnode (linhas 3 e 5). Posteriormente realizada a conexo
entreosagentestcpdon0aosinkdon1atravsdomtodoconnect(linha6).
A aplicao FTP instanciada, sendo representada pelo objecto ftp. Aps ser associada ao
protocoloTCP,jassociadoaon1(linha8),aaplicaoFTPiniciaageraodedadosnoinstante
10.0s.Estasoperaesencontramserealizadasnasduasltimaslinhasdoexemplo.
#======================================================================
#DefineTrafficGenerators
#======================================================================
settcp[newAgent/TCP]
$tcpsetclass_1#TCPTahoe
$ns_attachagent$node_(0)$tcp
setsink[newAgent/TCPSink]
$ns_attachagent$node_(1)$sink
$ns_connect$tcp$sink
setftp[newApplication/FTP]
$ftpattachagent$tcp
$ns_at10.0"$ftpstart"

4.5

Controlodasimulao

A simulao controlada pelos comandos inseridos no prprio script Tcl. No exemplo abaixo,
executamse todos os procedimentos para finalizar a simulao quando estiverem decorridos
150.0001segundosdesimulao.Comeaseporinvocaromtodoresetemtodososns,oque
invocarodestrutordetodasasclassesdosmdulosqueconstituemapilhadeprotocolos(linhas1

a 3). Na linha 4 invocase o comando stop no objecto simulador ns, afixando na consola no
instante 150.0002 a mensagem NS EXITING (linha 5). Nas linhas 6 a 13, definese um
procedimentoTclqueinvocadoquandoasimulaoparada.
#======================================================================
#SimulationControl
#======================================================================
for{seti0}{$i<$val(nn)}{incri}{
$ns_at150.0"$node_($i)reset";
}
$ns_at150.0001"stop"
$ns_at150.0002"puts\"NSEXITING...\";$ns_halt"
procstop{}{

globalns_tracefd

globalns_namtrace

$ns_flushtrace

close$tracefd

close$namtrace

exit0
}

No final do script inserese o comando responsvel pelo incio da simulao, o que realizado
atravsdainvocaodomtodorunnoobjectons_.
puts"StartingSimulation..."
$ns_run

4.6

ExecuodoscriptTcl

O anexo 1 apresenta o script Tcl final do exemplo descrito my_first_script.tcl, o qual dever ser
executadonalinhadecomandosatravsdocomando:
nsmy_first_script.tcl

4.7

Geraodepadrodemovimentodosns

No exemplo anterior os movimentos dos ns foram especificados atravs de uma configurao


estticadefinidanoscriptTcl.Abordasenestasecooutraformadeespecificao:atravsdeum
ficheiroobtidoautomaticamenteatravsdeumaaplicaoquerealizeumdeterminadomodelode
mobilidade.
A aplicao setdest contida na pasta indeputils/cmuscengen/setdest/ uma realizao do
modelo Randomwaypoint, a qual gera automaticamente um ficheiro de mobilidade de ns a
partir da parametrizao pretendida. Aconselhase a parametrizao segundo a Universidade de
Michigan (verso 2), pois permite obter resultados mais precisos. A parametrizao da aplicao
setdestrealizadaatravsdoparmetrosdefinidosaseguir.
<modified2003U.Michiganversion(version2)>
./setdest
v<2>n<nodes>s<speedtype>m<minspeed>M<maxspeed>

t<simulationtime>P<pausetype>p<pausetime>x<maxX>y<maxY>
11

Criadooficheirocontendoopadrodemovimentodosns(aquidenominadoscen_xpto),nose
declara no script a especificao esttica apresentada na seco 4.3. Em vez disso, realizase a
inserodocontedodoficheirodepadrodemovimentosnoespaodeexecuoTcl.

setval(sc)
"scen_xpto";#scenariofile
##loadingscenariofile
source$val(sc)

4.8

Outrasconfiguraes

Definiodoalcancedetransmissodosns
A definio do alcance de rdio dos ns, quando especificado o mac IEEE 802.11, realizada
atravsdainserodeumadasseguinteslinhasnoscriptTcl(consoanteoalcancedesejado):
#100meters../indeputils/propagation
#Phy/WirelessPhysetRXThresh_1.92278e06;#10meters
#Phy/WirelessPhysetRXThresh_7.69113e08;#50meters
#Phy/WirelessPhysetRXThresh_3.00435e08;#80meters
Phy/WirelessPhysetRXThresh_1.42681e08;#100meters
#Phy/WirelessPhysetRXThresh_8.91754e10;#200meters
#Phy/WirelessPhysetRXThresh_1.76149e10;#300meters
#Phy/WirelessPhysetRXThresh_5.57346e11;#400meters
#Phy/WirelessPhysetRXThresh_2.28289e11;#500meters

Asparametrizaesacimasoobtidascomaaplicaocontidanapastaindeputils/propagation.
Paramaisinformaesacercadestaaplicaodeveconsultaromanual[2].
Definiodepadresdegeraodetrfego
possvel gerar automaticamente padres de gerao de trfego, tal como no caso da gerao
automticademovimentosapartirdeummodelo.Paramaisinformaesacercadestaconfigurao
deveconsultaromanual[2].

5. Anlisedosficheirosdetrace
5.1

Tracesdosprotocolos

O ficheiro simple.tr, gerado quando se executa o script de exemplo apresentado no anexo 1,


contm informao dos traces activos no script Tcl. Descrevese neste captulo o significado dos
dadoscontidosnesseficheiro.Osdadosseguintesapresentamasprimeiraslinhasdoficheiro.

s
s
s
s
M
s
r
s
s
s
r
s
s
s
r
s
s

0.029290548 _1_ RTR --- 0 message 32 [0 0 0 0] ------- [1:255 -1:255 32 0]


0.029365548 _1_ MAC --- 0 message 90 [0 ffffffff 1 800] ------- [1:255 -1:255 32 0]
1.119926192 _0_ RTR --- 1 message 32 [0 0 0 0] ------- [0:255 -1:255 32 0]
1.120361192 _0_ MAC --- 1 message 90 [0 ffffffff 0 800] ------- [0:255 -1:255 32 0]
10.00000 0 (5.00, 2.00, 0.00), (20.00, 18.00), 1.00
10.000000000 _0_ AGT --- 2 tcp 40 [0 0 0 0] ------- [0:0 1:0 32 0] [0 0] 0 0
10.000000000 _0_ RTR --- 2 tcp 40 [0 0 0 0] ------- [0:0 1:0 32 0] [0 0] 0 0
12.941172739 _1_ RTR --- 3 message 32 [0 0 0 0] ------- [1:255 -1:255 32 0]
12.941787739 _1_ MAC --- 3 message 90 [0 ffffffff 1 800] ------- [1:255 -1:255 32 0]
13.000000000 _0_ AGT --- 4 tcp 40 [0 0 0 0] ------- [0:0 1:0 32 0] [0 0] 0 0
13.000000000 _0_ RTR --- 4 tcp 40 [0 0 0 0] ------- [0:0 1:0 32 0] [0 0] 0 0
13.242656084 _0_ RTR --- 5 message 32 [0 0 0 0] ------- [0:255 -1:255 32 0]
13.242891084 _0_ MAC --- 5 message 90 [0 ffffffff 0 800] ------- [0:255 -1:255 32 0]
19.000000000 _0_ AGT --- 6 tcp 40 [0 0 0 0] ------- [0:0 1:0 32 0] [0 0] 0 0
19.000000000 _0_ RTR --- 6 tcp 40 [0 0 0 0] ------- [0:0 1:0 32 0] [0 0] 0 0
24.799296167 _1_ RTR --- 7 message 32 [0 0 0 0] ------- [1:255 -1:255 32 0]
24.799571167 _1_ MAC --- 7 message 90 [0 ffffffff 1 800] ------- [1:255 -1:255 32 0]

s 27.719583723 _0_ RTR --- 8 message 32 [0 0 0 0] ------- [0:255 -1:255 32 0]


s 27.720098723 _0_ MAC --- 8 message 90 [0 ffffffff 0 800] ------- [0:255 -1:255 32 0]
s 31.000000000 _0_ AGT --- 9 tcp 40 [0 0 0 0] ------- [0:0 1:0 32 0] [0 0] 0 0
r 31.000000000 _0_ RTR --- 9 tcp 40 [0 0 0 0] ------- [0:0 1:0 32 0] [0 0] 0 0
s 39.083332528 _1_ RTR --- 10 message 32 [0 0 0 0] ------- [1:255 -1:255 32 0]
s 39.083947528 _1_ MAC --- 10 message 90 [0 ffffffff 1 800] ------- [1:255 -1:255 32 0]
s 40.918940913 _0_ RTR --- 11 message 32 [0 0 0 0] ------- [0:255 -1:255 32 0]
s 40.919375913 _0_ MAC --- 11 message 90 [0 ffffffff 0 800] ------- [0:255 -1:255 32 0]
M 50.00000 1 (390.00, 385.00, 0.00), (25.00, 20.00), 15.00

D 76.430670539 _0_ IFQ ARP 4 tcp 80 [0 0 0 800] ------- [0:0 1:0 32 1] [0 0] 0 0

Aprimeiraletradecadalinhaespecificaotipodeoperaodescritanotrace.Asoperaesdeenvio
soidentificadaspelaletras,aletraridentificaumarecepo,aletraDidentificaumDROP(retirada
indevida do pacote da fila de espera), a letra f identifica uma situao de reencaminhamento
(forward) e a letra c descreve uma coliso na camada MAC. A letra M utilizada para reportar
posiesdeumdeterminadon.

Para as linhas do tipo s, f, r, D e c, logo aps cada letra, existe um espao que divide o prximo
campo.Tendocomoexemploalinhaabaixo,descrevesedeseguidacadaumdoscamposdalinha,
osquaissoseparadosporumespao.

s 0.029365548 _1_ MAC

--- 0 message 90 [0 ffffffff 1 800] ------- [1:255 -1:255 32 0]

Ocampo0.029365548especificaotempoemqueaoperaoocorreu.Apsotemposurgeon
ondefoiexecutadoaoperao(_1_indicaquefoiexecutadanon1).Oprximocampo(MAC,
RTR,AGT,etc.)identificaacamadaquegerouaoperao.Ocamporepresentadoporjustificaa
razopeloqualfoirealizadootrace.Segueseumcampoidentificadordopacote(0nalinhaacima)
sendoseguidosdonome(message,tcp,etc.)edotamanho(90bytes)dopacote.Ocampo[0ffffffff
1800]identificaotempodeduraodopacotecontidonocabealhoMAC(0),oendereodeMAC
dedestino(ffffffffendereobroadcast),endereoMACdequemenviouopacote(1),eotipode
cabealhoMACdopacote(800ARP).Deseguida,representadooestadodas7flagsdopacote
,sendoseguidodocabealhoIP[1:2551:255320].Estecabealhoidentificaoendereode
IP do n que originou o pacote 1 seguido do porto de origem :255. Da mesma forma se
representaoendereoeoportodedestino1:255.Ocampo32representaocampoTTL(time
tolive),sendoseguidoocampo0queindicaqueoprximohop(0indicaon0ouumasituao
debroadcast;casosejadiferentede0estecampoindicaoendereodoprximohop).

5.2

Namvisualizadordarede

Oficheiromovement.nam,geradoquandoseexecutaoscriptdeexemploapresentadonoanexo
1, apresenta a informao relativa s posies e movimentos efectuados pelo n. Este ficheiro
utilizadopelaaplicaoNAM(executandoocomandodelinhanammovement.nam),queintegrao
pacote de aplicaes da distribuio do simulador ns2. Este visualizador permite observar os
movimentos/posiesefectuadospelosns.

13


Figura6AspectodovisualizadorderedeNAM.

Bibliografia
[1]

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

[2]

Manualdosimulador.Disponvelemhttp://www.isi.edu/nsnam/ns/

Anexo1ficheiromy_first_script.tcl
#======================================================================
# My first Tcl script
#
# Rodolfo Oliveira - Sept 2009
#
#======================================================================
#======================================================================
# Define options
#======================================================================
set val(chan) Channel/WirelessChannel
;# channel type
set val(prop) Propagation/TwoRayGround
;# radio-propagation model
set val(ant) Antenna/OmniAntenna
;# Antenna type
set val(ll) LL
;# Link layer type
set val(ifq) Queue/DropTail/PriQueue
;# Interface queue type
set val(ifqlen) 50
;# max packet in ifq
set val(netif) Phy/WirelessPhy
;# network interface type
set val(mac) Mac/802_11
;# MAC type
set val(rp) DSDV
;# ad-hoc routing protocol
set val(nn) 2
;# number of mobilenodes
set val(x) 500
;
set val(y) 500
;# x-y simulation's area
#======================================================================
# New ns2 instance
#======================================================================
set ns_ [new Simulator]
#======================================================================
# Define trace files
#======================================================================
set tracefd [open simple.tr w]
$ns_ trace-all $tracefd
set namtrace [open movement.nam w]
$ns_ namtrace-all-wireless $namtrace $val(x) $val(y)
#======================================================================
# Define Topology
#======================================================================
set topo [new Topography]
$topo load_flatgrid $val(x) $val(y)
create-god $val(nn)
#======================================================================
# Configure nodes
#======================================================================
$ns_ node-config -adhocRouting $val(rp) \
-llType $val(ll) \
-macType $val(mac) \
-ifqType $val(ifq) \
-ifqLen $val(ifqlen) \
-antType $val(ant) \
-propType $val(prop) \
-phyType $val(netif) \

15

-channelType $val(chan) \
-topoInstance $topo \
-agentTrace ON \
-routerTrace ON \
-macTrace ON \
-movementTrace ON
for {set i 0} {$i < $val(nn) } {incr i} {
set node_($i) [$ns_ node ]
$node_($i) random-motion 0 ;# disable random motion
}
#======================================================================
# Define Node's Movement
#======================================================================
$node_(0) set X_ 5.0
$node_(0) set Y_ 2.0
$node_(0) set Z_ 0.0
$node_(1) set X_ 390.0
$node_(1) set Y_ 385.0
$node_(1) set Z_ 0.0
# Node_(1) starts to move towards node_(0)
$ns_ at 50.0 "$node_(1) setdest 25.0 20.0 15.0"
$ns_ at 10.0 "$node_(0) setdest 20.0 18.0 1.0"
# Node_(1) then starts to move away from node_(0)
$ns_ at 100.0 "$node_(1) setdest 490.0 480.0 15.0"
#======================================================================
# Define Traffic Generators
#======================================================================
## TCP
set tcp [new Agent/TCP]
$tcp set class_ 1
#TCP Tahoe
$ns_ attach-agent $node_(0) $tcp
set sink [new Agent/TCPSink]
$ns_ attach-agent $node_(1) $sink
$ns_ connect $tcp $sink
## FTP
set ftp [new Application/FTP]
$ftp attach-agent $tcp
$ns_ at 10.0 "$ftp start"
#======================================================================
# Simulation Control
#======================================================================
for {set i 0} {$i < $val(nn) } {incr i} {
$ns_ at 150.0 "$node_($i) reset";
}
$ns_ at 150.0001 "stop"
$ns_ at 150.0002 "puts \"NS EXITING...\" ; $ns_ halt"
proc stop {} {
global ns_ tracefd
global ns_ namtrace
$ns_ flush-trace
close $tracefd
close $namtrace
exit 0
}

puts "Starting Simulation..."


$ns_ run

17


Anexo2InstalaodoSimulador

EnumeramsedeseguidaospassosnecessriosparainstalarosimuladoremambienteLinux:
1. Realizarodownloaddosimulador(ficheironsallinone2.xx.tar.gz)apartirdoendereo:
http://sourceforge.net/projects/nsnam/files/allinone/nsallinone2.34/

2. Descompactaroficheiroparaumapasta;

3. Executaroscriptinstallnointeriordapastans2.xx;

4. Validarainstalaoexecutandooscriptvalidatenointeriordapastans2.xx.

Anexo3Integraodocdigodosimuladornoambientede
desenvolvimentoECLIPSE

Enumeramsedeseguidaospassosnecessriosparaconstituirumprojectonoambientede
desenvolvimentoECLIPSEquecontmocdigofontedosimulador:

1. InstalaroambientededesenvolvimentoECLIPSEcomopacoteCDT;

2. Instalarosimuladorns2(veranexoanterior);

3. Definirocaminhoraizdons2(pastans2.xx)comooworkspacepathdoECLIPSEquando
estelanado;

4. NoECLIPSEdeveutilizarseaperspectivaC/C++;

5. Criarumnovoprojectonoeclipseparaons2:New-->C++Project;

6. SelecionarMakefileproject--> EmptyProject,atribuindoonomedamesma
subdirectorians2.xxaonomedoprojecto;

7. Executarocomando"Project">"BuildAll";

8. ApartirdeagorapodeutilizarseoambienteECLIPSEpararealizarcdigo,compilare
realizardebugnosdiversosmdulosqueconstituemosimulador.

19