Você está na página 1de 29

Tutorial de NS-2

Lucas Coelho Gonalves e Marcos Estevo de Oliveira Corra

Julho de 2005

ndice Tutorial de NS-2 ............................................................................................................... 1 1. INTRODUO ............................................................................................................ 4 2. NETWORK SIMULATOR .......................................................................................... 5 2.1 CRIANDO UMA SIMULAO ........................................................................... 6 Criao do objeto simulador (escalonador de eventos):................................. 7 Abertura de arquivos para anlise posterior (trace):....................................... 7 Criao da topologia da rede (ns e enlaces): ................................................ 7 Criao dos agentes da camada de transporte e conexo com ns:................ 9 Criao dos geradores de trfego e conexo com os agentes da camada de transporte: ......................................................................................................... 9 Programao dos eventos da simulao (dinmica):.................................... 10 Fechamento da simulao, animao (NAM) e gerao de estatsticas:...... 10 Iniciando a simulao:.................................................................................. 11 2.2. CAMADA DE REDE E ROTEAMENTO .......................................................... 11 2.2.1. Roteamento Unicast ...................................................................................... 11 2.2.1.1. Esttico................................................................................................... 11 2.2.1.2. Dinmico................................................................................................ 12 Vetor de distncia:........................................................................................ 12 Estado de enlace: .......................................................................................... 12 2.2.1.3. Utilizando vrios caminhos simultaneamente: ...................................... 13 2.2.1.4. Atribuindo custos aos enlaces:............................................................... 14 2.2.1.5. Inserindo dinmica na simulao:.......................................................... 14 Falha de Enlace: ........................................................................................... 14 2.3 CAMADA DE TRANSPORTE............................................................................ 14 2.3.1. UDP .............................................................................................................. 14 Tamanho do pacote: ..................................................................................... 15 Identificador do fluxo de pacotes: ................................................................ 16 Tempo de vida do pacote: ............................................................................ 16 2.3.2 TCP ................................................................................................................ 16 Tamanho da janela: ...................................................................................... 17 Tamanho do pacote: ..................................................................................... 18 Tamanho da janela de congestionamento:.................................................... 18 Tamanho inicial da janela de congestionamento:......................................... 18 Tamanho mximo de rajada: ........................................................................ 19 2.3.2.1. Variaes do TCP .................................................................................. 19 TCP Tahoe:................................................................................................... 19 TCP Reno: .................................................................................................... 19 TCP Vegas:................................................................................................... 19 2.4. CAMADA DE APLICAO ............................................................................. 20 2.4.1. CBR (Constant Bit Rate) .............................................................................. 20 Taxa de envio: .............................................................................................. 20 Intervalo entre pacotes: ................................................................................ 21 Tamanho do pacote: ..................................................................................... 21 2.4.2. Exponencial .................................................................................................. 21 Taxa de envio: .............................................................................................. 22 Tamanho do pacote: ..................................................................................... 22 Tempo de transmisso:................................................................................. 22 Tempo de inatividade: .................................................................................. 23 2.4.3. FTP (File Transfer Protocol)......................................................................... 23

Nmero mximo de pacotes:........................................................................ 24 2.4.4. Telnet ............................................................................................................ 24 Intervalo entre pacotes: ................................................................................ 24 2.4.5. Gerando e finalizando trfegos ..................................................................... 25 2.5. REDES SEM FIO ................................................................................................ 25 2.5.1. Redes Ad-hoc................................................................................................ 25 Tipo de Canal: .............................................................................................. 26 Modelo de Rdio-Propagao: ..................................................................... 26 Interface de Rede:......................................................................................... 26 Subcamada MAC: ........................................................................................ 26 Tipo de Fila: ................................................................................................. 26 Camada de Enlace: ....................................................................................... 26 Antena: ......................................................................................................... 26 Nmero de ns mveis:................................................................................ 26

1. INTRODUO A disciplina de Comunicao de Dados IV tem um programa que vai desde as topologias de rede at os padres e arquiteturas (TCP/IP, IEEE e OSI). Os conceitos tericos so apresentados sem oferecer algum tipo de experimentao prtica. Isso acaba limitando o aprendizado por parte dos alunos. Os recursos visuais tradicionalmente usados no tem sido suficientes para a compreenso total dos conceitos. Por isso, estamos sugerindo uma nova ferramenta visual para ilustrar os exemplos dados em sala de aula e que poder ser utilizada como parte da disciplina no desenvolvimento de atividades extras pelos alunos. Este projeto tem por finalidade apresentar simulaes que complementem os aspectos tericos dados em sala de aula. Atravs dessas simulaes, realizadas no Network Simulator 2 (NS-2)[1], pretendemos ajudar os prximos alunos na compreenso dos conceitos dessa disciplina. No captulo 2 damos uma introduo sobre o NS-2 e apresentamos os passos para a criao de uma simulao. Neste ponto inicial explicamos a funo de cada passo na criao do script. Em seguida apresentamos algumas funes e conceitos da camada de rede, transporte e aplicao que podem ser exploradas pelo simulador. Ao fim do captulo 2 falamos sobre a implementao de redes sem fio. No captulo 3 descrevemos as simulaes desenvolvidas com sucesso neste projeto. Apresentamos sobre cada uma das simulaes os conceitos abordados por ela e feita uma breve descrio do seu funcionamento. No captulo 4 apresentamos as concluses finais do projeto, dos trabalhos realizados durante sua elaborao e do alcance dos nossos objetivos.

2. NETWORK SIMULATOR

O Network Simulator um simulador de eventos discreto resultante de um projeto conhecido como VINT (Virtual InterNetwork Testbed). Dentre outros, compem esse projeto a DARPA, USC/ISI, Xerox PARC, LBNL, e a Universidade de Berkeley. Uma grande vantagem do Network Simulator (NS) est no fato de ele ser totalmente gratuito e com cdigo fonte aberto, o que permite ao usurio fazer os ajustes que precisar. O simulador oferece suporte simulao de um grande nmero de tecnologias de rede (com e sem fio), diferentes cenrios baseados nos protocolos TCP e UDP, diversas polticas de fila, caracterizao de trfego com diversas distribuies estatsticas e muito mais. A programao do NS feita em duas linguagens: C++ para a estrutura bsica (protocolos, agentes, etc) e OTCL[2] (Object-oriented Tool Command Language) para uso como frontend. OTCL uma linguagem interpretada, desenvolvida pelo MIT. Nela sero efetivamente escritas as simulaes. O motivo para se utilizar duas linguagens de programao baseia-se em duas diferentes necessidades. De um lado existe a necessidade de uma linguagem mais robusta para a manipulao de bytes, pacotes e para implementar algoritmos que rodem um grande conjunto de dados. Nesse contexto C++, que uma linguagem compilada e de uso tradicional, mostrou-se a ferramenta mais eficaz. De outro lado fato que, durante o processo de simulao, ajustes so necessrios com certa freqncia. Muda-se o tamanho do enlace e faz-se um teste, muda-se o atraso e faz-se um teste, acrescenta-se um n e faz-se um teste. Enfim, haveria um desgaste muito grande se, a cada mudana de parmetro, e elas so muitas em uma simulao, houvesse a necessidade de se compilar o programa para test-lo. O uso da linguagem OTCL, que interpretada, evita esse desgaste por parte do usurio, pois h uma simplificao no processo interativo de mudar e re-executar o modelo. A noo de tempo no NS obtida atravs de unidades de simulao que podem ser associadas, para efeitos didticos, a segundos. A rede construda usando ns os quais so conectados por meio de enlaces. Eventos so escalonados para passar entre os ns atravs dos enlaces. Ns e enlaces podem ter vrias propriedades associadas a eles. Agentes podem ser associados aos ns e eles so responsveis pela gerao de diferentes pacotes. A fonte de trfego uma aplicao ao qual associado um agente 5

particular. Os agentes precisam de um receptor que receber seus pacotes. No caso do agente tcp (transmission control protocol) esse receptor chama-se sink (tanque) e tem a incumbncia de gerar os pacotes de reconhecimento (ACK - Acknowledge). No caso do agente udp(user datagram protocol) o receptor chama-se null (nulo).

Figura 1 Estrutura dos objetos da simulao

2.1 CRIANDO UMA SIMULAO Para criar uma simulao preciso escrever um script OTcl, que ser lido por um interpretador e gerar uma sada especfica. Para facilitar a criao desse script, recomenda-se seguir o roteiro abaixo, que representa as principais etapas de construo de uma simulao, adaptando-o de acordo com o tipo de simulao pretendida:

Criao do objeto simulador (escalonador de eventos); Abertura de arquivos para anlise posterior (trace); Criao da topologia da rede (ns e enlaces); Criao dos agentes da camada de transporte e conexo com os ns; Criao dos geradores de trfego e conexo com os agentes da camada de transporte; Programao dos eventos da simulao (dinmica); Fechamento da simulao, animao (NAM) e gerao de estatsticas.

A programao em OTcl requer conhecimentos sobre a sintaxe utilizada pelo NS. A seguir apresentaremos as principais classes que so comuns maioria das simulaes.

Criao do objeto simulador (escalonador de eventos): Para iniciar qualquer simulao, preciso ajustar a varivel que identifica o incio da simulao, conforme a linha abaixo:

set ns [new Simulator]

Esta linha define a gerao de uma instncia do objeto simulador e a associa com a varivel ns, realizando as seguintes tarefas: Inicializa o formato dos pacotes; Cria um escalonador de eventos; Seleciona o formato padro de endereamento.

Abertura de arquivos para anlise posterior (trace): A seguir, pode-se gerar um arquivo trace que servir de base para a construo de uma animao grfica, de acordo com o cenrio utilizado. Essa uma etapa opcional e pode ser eliminada, caso no seja necessrio uma simulao grfica.

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

A primeira linha acima cria um arquivo (ou abre, caso j exista um) com a extenso .nam, que ser lido pelo Network Animator (NAM), que a aplicao responsvel por gerar animaes grficas das simulaes. A segunda linha diz ao simulador para gravar os passos da simulao no formato de entrada do NAM, ou seja, no arquivo out.nam gerado na linha anterior. Similarmente, pode-se usar a funo trace-all para gravar arquivos de trace com informaes em formato geral, normalmente utilizados para anlises de simulaes. As linhas abaixo mostram a sintaxe para este tipo de sada:

set tf [open out.tr w] $ns trace-all $tf

Criao da topologia da rede (ns e enlaces): A criao da topologia da rede um dos pontos primordiais de uma simulao. preciso que se faa um planejamento cuidadoso para que os ns e enlaces representem

um cenrio mais realstico. As linhas abaixo definem a criao de 2 ns, chamados de n0 e n1.

set n0 [$ns node] set n1 [$ns node]

O parmetro [$ns node] define a criao de um n para o objeto simulador ns, criado no incio da simulao. Em seguida, necessrio criar os enlaces para que os ns possam se comunicar. A sintaxe utilizada varia de acordo com a tecnologia de rede empregada. Utillizaremos neste exemplo um enlace full-duplex entre 2 ns:

$ns duplex-link $n0 $n1 1Mb 10ms DropTail

A linha anterior define a criao de um enlace full-duplex (duplex-link) entre os ns n0 e n1, com capacidade de 1 Mbit/s e retardo de 10 ms. O ltimo parmetro define o tipo de fila utilizado, onde DropTail representa o algoritmo FIFO (First In, First Out). Para facilitar a gerao de mltiplos ns e enlaces, possvel criar um lao de repetio, conforme mostrado a seguir, onde a varivel numNode define a quantidade de ns da simulao:

set numNode 8

# Criao dos ns for {set i 0} {$i < $numNode} {incr i} { set n($i) [$ns node] }

# Criao dos enlaces for {set i 0} {$i < $numNode} {incr i} { for {set j [expr ($i + 1)]} {$j < $numNode} {incr j} { $ns duplex-link $n($i) $n($j) 1Mb 10ms DropTail } }

A gerao de trfego no NS-2 baseada em duas classes de objetos, a classe Agente e a classe Aplicao. Cada n na rede que necessite enviar ou receber dados

deve ter um agente sobre ele. No topo de um agente roda uma aplicao. A aplicao determina que tipo de trfego simulado. Criao dos agentes da camada de transporte e conexo com ns: Para que se possa realizar a implementao de protocolos de transporte (TCP e UDP) necessria a criao de agentes, que so componentes da arquitetura NS responsveis pela simulao destes protocolos. Os agentes criam um canal de comunicao entre os ns transmissor e receptor. O cdigo abaixo mostra a criao de um agente UDP, anexando-o ao n n0 (emissor).
set udp0 [new Agent/UDP] $ns attach-agent $n0 $udp0

A seguir, deve-se criar um agente receptor ( Null ), cuja funo apenas receber os pacotes enviados a ele. O cdigo abaixo mostra a sua criao, anexando-o ao n n1 (receptor).

set null0 [new Agent/Null] $ns attach-agent $n1 $null0

A linha abaixo efetivamente estabelece o canal de comunicao (sesso) entre o emissor e o receptor, a nvel de transporte.

$ns connect $udp0 $null0

Criao dos geradores de trfego e conexo com os agentes da camada de transporte: Aps o estabelecimento do canal de comunicao necessrio que um trfego de uma determinada aplicao seja gerado e transmitido por este. O cdigo abaixo exemplifica a criao de um trfego CBR (Constant Bit Rate), que geralmente utilizado para streaming de udio e/ou vdeo. Alguns parmetros so necessrios, como o tamanho do pacote (em bytes), intervalo de transmisso (em segundos), entre outros.

set cbr0 [new Application/Traffic/CBR] $cbr0 set packetSize_ 500

$cbr0 set interval_ 0.005

Feito isso, necessrio anexar a aplicao criada a um agente da camada de transporte, conforme mostra a linha abaixo:

$cbr0 attach-agent $udp0

Programao dos eventos da simulao (dinmica): Uma das etapas mais importantes em uma simulao definir o comportamento que esta ter durante a sua execuo (ou seja, os eventos que ocorrero na simulao). Como o NS um simulador orientado a eventos, a definio da dinmica da simulao pode ser feita mais facilmente. Para isso, atribui-se um tempo total de simulao e, durante este perodo, podese invocar eventos especficos, como incio de trfegos, quedas ou perdas de dados nos enlaces, entre outros. No cdigo a seguir, a aplicao CBR iniciada no tempo 0.5s e finalizada em 4.5s. Aps 5.0s, chamado o procedimento finish, que encerra a simulao.

$ns at 0.5 "$cbr0 start" $ns at 4.5 "$cbr0 stop" $ns at 5.0 "finish"

Fechamento da simulao, animao (NAM) e gerao de estatsticas: Concludas as etapas acima, necessrio declarar o fim da simulao, atravs do procedimento abaixo, que responsvel por fechar e limpar os arquivos de traces j existentes com o mesmo nome, abrir o NAM (caso este seja utilizado) e encerrar efetivamente a simulao. A ltima linha ($ns run) responsvel por executar a simulao e iniciar o escalonador de eventos do NS.

proc finish {} { global ns nf $ns flush-trace close $nf exec nam out.nam & exit 0 }

10

$ns run

Iniciando a simulao: Para executar a simulao usa-se o comando, abaixo, que executa a simulao e abre o NAM, caso este seja usado.

$ ns nome_do_script.tcl

2.2. CAMADA DE REDE E ROTEAMENTO Para que ocorra a transferncia de pacotes de um n emissor para um n receptor existe a necessidade de se determinar que caminho os pacotes devem seguir. Essa tarefa realizada na camada de rede, mais precisamente pelos protocolos de roteamento da camada de rede. O ncleo do protocolo de roteamento o algoritmo de roteamento, que tem a funo de determinar uma rota adequada entre a origem e o destino dos datagramas. O NS permite a simulao de diversos protocolos de roteamento, dentre os quais sero mostrados os mais utilizados atualmente, como o roteamento esttico e os algoritmos dinmicos, chamados de vetor de distncia e estado de enlace.

2.2.1. Roteamento Unicast O roteamento unicast utilizado na comunicao ponto-a-ponto, quando um emissor cria um canal de comunicao separado para cada destinatrio. Por exemplo, se a transmisso feita entre um emissor e trs destinatrios, o emissor enviar trs vezes o mesmo arquivo, um para cada destinatrio. Analisando como esta comunicao feita, percebe-se que h uma sobrecarga do emissor. medida que o nmero de receptores cresce, o congestionamento e o atraso de dados ficaro mais intensos.

2.2.1.1. Esttico No roteamento esttico as rotas no mudam com muita freqncia e na maioria das vezes uma mudana ocasionada pela interveno humana. O roteamento esttico o mecanismo de definio de rotas padro do NS, que utiliza o algoritmo SPF (Shortest Path First) de Dijkstra. A computao das rotas feita uma nica vez no incio da simulao e para isso, o algoritmo utiliza uma matriz de adjacncias e os valores de custos de todos os enlaces da topologia.

11

Para utilizar o roteamento esttico, usa-se a sintaxe mostrada abaixo. Porm, esse comando opcional j que esse algoritmo o padro usado no NS.

$ns rtproto Static

2.2.1.2. Dinmico No roteamento dinmico as rotas podem ser alteradas quando h mudanas nas cargas de trfego ou na topologia da rede. Esses algoritmos podem rodar periodicamente ou na ocorrncia de mudanas na rede como, por exemplo, a topologia ou os custos dos enlaces. Sero abordados dois algoritmos de roteamento dinmicos, o algoritmo de vetor de distncias e o algoritmo de estado de enlace.

Vetor de distncia: Nesse algoritmo, conhecido tambm como algoritmo de Bellman-Ford, cada roteador mantm uma tabela (vetor) que armazena a melhor distncia para se chegar at cada destino e a rota correspondente. Inicialmente um roteador possui apenas informaes de custos de enlaces at seus vizinhos diretamente conectados. Periodicamente, o roteador distribui seu vetor de distncias aos seus vizinhos, atualizando, dessa forma, as tabelas de roteamento dos mesmos. Quando todas as tabelas de distncias ficarem completas ocorre o que chamado de convergncia e o algoritmo entra em inatividade at que alguma mudana na rede acontea. O algoritmo vetor de distncias dito descentralizado, pois um n no tem conhecimento sobre os custos de todos os enlaces da rede, mas somente daqueles diretamente ligados a ele. Para utilizar o roteamento por vetor de distncia, usa-se a sintaxe mostrada abaixo:

$ns rtproto DV

Esse algoritmo apresenta problemas como o fato de poder convergir lentamente caso aconteam alteraes na rede, como por exemplo, o aumento no custo de um enlace ou a falha de um enlace.

Estado de enlace: O algoritmo de estado de enlace um algoritmo global, uma vez que todos os custos de enlace so conhecidos por todos os ns. Cada n da rede distribui informaes

12

sobre os enlaces conectados diretamente ele a todos os outros ns da rede atravs de uma transmisso broadcast. Em seguida, um algoritmo de estado de enlace, como o algoritmo de Dijkstra, calcula o caminho de menor custo entre um n e todos os outros ns da rede. Caso ocorra uma mudana na rede o algoritmo executado novamente. O algoritmo de estado de enlace converge mais rapidamente que o algoritmo vetor de distncia em caso de alteraes na rede. Para utilizar o roteamento por estado de enlace, usa-se a sintaxe mostrada abaixo:

$ns rtproto LS

2.2.1.3. Utilizando vrios caminhos simultaneamente: Se partindo de um n existem vrias rotas possveis para um destino particular, possvel fazer com que um trfego seja dividido entre essas rotas. Para isso, deve-se, primeiramente, utilizar o algoritmo de roteamento vetor de distncia. Em seguida, usase a sintaxe abaixo:

Node set multiPath_ 1

A linha acima define que todos os ns da topologia utilizaro esse mecanismo de roteamento, caso seja possvel.

De forma alternativa, pode-se desejar que apenas um n possua esse mecanismo. Se este for o caso, usamse os comandos abaixo:

set n1 [$ns Node] $n1 set multiPath_ 1

De acordo com o cdigo acima apenas o n n1 enviar dados para vrias rotas simultaneamente.

Exemplo:
$ns set [new Simulator] $ns rtproto DV set n1 [$ns Node] $n1 set multiPath_ 1

13

2.2.1.4. Atribuindo custos aos enlaces: Para atribuir valores de custo a um enlace, utiliza-se o seguinte comando:

$ns cost $<node1> $<node1> <value>

Onde <value> o valor do custo associado ao enlace entre os ns <node1> e <node2>. O valor padro para os custos 1.

Exemplo:
$ns cost $n1 $n2 10

2.2.1.5. Inserindo dinmica na simulao: Esta seo mostra como simular eventos que podem ocorrer em uma rede real, como a falha de um enlace.

Falha de Enlace: Para quebrar um enlace usa-se o seguinte comando:

$ns rtmodel-at <time> down $<node1> $<node2>

Onde <time> o instante em segundos no qual o enlace entre os ns <node1> e <node2> vai falhar.

Exemplo:
$ns rtmodel-at 1.0 down $n0 $n1

2.3 CAMADA DE TRANSPORTE Para simular protocolos da camada de transporte, o NS faz uso de agentes como o agente UDP e o agente TCP, este ltimo podendo ser escolhido diversas variaes (como Tahoe, Reno e Vegas) [3]. A seguir, sero abordados com mais detalhes os aspectos de configurao de cada um desses agentes.

2.3.1. UDP O UDP um protocolo da camada de transporte no orientado a conexo que no oferece garantias para a entrega de dados entre um emissor e um receptor, ou seja,

14

ele no suporta controle de fluxo ou congestionamento, correo de erros ou retransmisso. Para criar um agente UDP, usa-se a seguinte sintaxe:
set udp0 [new Agent/UDP] $ns attach-agent $n0 $udp0

A primeira linha cria um agente UDP referenciado pela varivel 'udp0'. A linha seguinte associa o agente criado a um n chamado 'n0', que ser o n emissor de pacotes. Em seguida, necessrio configurar um receptor, que pode ser feito de acordo com o exemplo abaixo:

set null0 [new Agent/Null] $ns attach-agent $n1 $null0

O agente Null responsvel por apenas receber pacotes sem realizar nenhum tratamento adicional, e este associado ao n 'n1'. Por fim, faz-se a conexo entre os dois agentes caracterizando a construo de um canal de comunicao entre o n emissor e o n receptor. O cdigo abaixo ilustra exatamente essa conexo:

$ns connect $udp0 $null0

A classe Agent/UDP possui uma variedade de parmetros que podem ser configurados, que variam desde o tamanho do pacote at o tipo de classe a qual ele pertence. A seguir mostramos alguns dos principais parmetros utilizados no NS: Tamanho do pacote: Esse parmetro configura o tamanho do pacote.

Sintaxe:
$udp0 set packetSize_ <pktsize>

Onde <pktsize> um nmero inteiro que representa o tamanho em bytes do pacote. O valor padro 1000.

15

Exemplo:
$udp0 set packetSize_ 500

Identificador do fluxo de pacotes: Serve para identificar o fluxo de pacotes que originado de um agente UDP.

Sintaxe:
$udp0 set fid_ <fid-value>

Onde <fid-value> denota o valor que ser o identificador do fluxo de pacotes. O valor padro 0.

Exemplo:
$udp0 set fid_ 1

Tempo de vida do pacote: Define o nmero mximo de ns por onde o pacote pode passar antes de ser descartado.

Sintaxe:
$udp0 set ttl_ <time-to-live>

Onde <time-to-live> um inteiro que representa o valor do campo TTL. O valor padro 32.

Exemplo:
$udp0 set ttl_ 64

2.3.2 TCP O protocolo TCP foi projetado para oferecer um fluxo de bytes fim-a-fim confivel. O TCP realiza controle de fluxo e congestionamento, retransmisso, entre outras funes. Ele ainda garante que os dados chegaro de forma correta e ordenada ao seu destino.

16

Para criar um agente TCP, usa-se a seguinte sintaxe:

set tcp0 [new Agent/TCP] $ns attach-agent $n0 $tcp0

A primeira linha cria um agente TCP referenciado pela varivel 'tcp0'. A linha seguinte associa o agente criado a um n chamado 'n0', que ser o n emissor de pacotes. Em seguida, necessrio configurar um receptor. Para o protocolo TCP o receptor um agente do tipo TCPSink e o exemplo abaixo mostra como cri-lo:

set sink0 [new Agent/TCPSink] $ns attach-agent $n1 $sink0

Um agente do tipo TCPSink, que responsvel por enviar um ACK para cada pacote recebido ao emissor do trfego TCP, servir de destino para os pacotes e associado ao n 'n1'.

Assim como no UDP, tambm necessria a conexo entre os dois agentes (TCP e TCPSink), conforme exemplificada abaixo:

$ns connect $tcp0 $sink0

A seguir sero abordados alguns dos principais parmetros de configurao que compem a classe Agent/TCP:

Tamanho da janela: Define o tamanho mximo da janela da conexo TCP.

Sintaxe:
$tcp0 set window_ <size>

Onde <size> define o tamanho da janela em nmero de pacotes. O valor padro 20.

Exemplo:
$tcp0 set window_ 50

17

Tamanho do pacote: Esse parmetro configura o tamanho que o pacote vai possuir.

Sintaxe:
$tcp0 set packetSize_ <pktsize>

Onde <pktsize> um nmero inteiro que representa o tamanho em bytes do pacote. O valor padro 1000.

Exemplo:
$tcp0 set packetSize_ 500

Tamanho da janela de congestionamento: Define o tamanho mximo da janela de congestionamento da conexo TCP.

Sintaxe:
$tcp0 set cwnd_ <size>

Onde <size> define o tamanho mximo da janela de congestionamento em nmero de pacotes. O valor padro 0.

Exemplo:
$tcp set cwnd_ 10

Tamanho inicial da janela de congestionamento: Define o tamanho inicial da janela de congestionamento da conexo TCP.

Sintaxe:
$tcp0 set windowInit_ <size>

Onde <size> define o tamanho inicial da janela de congestionamento em nmero de pacotes. O valor padro 1. Exemplo:
$tcp0 set windowInit_ 5

18

Tamanho mximo de rajada: Determina o nmero mximo de pacotes que o emissor pode enviar em resposta a um ACK.

Sintaxe:
$tcp0 set maxburst_ <size>

Onde <size> define o nmero mximo de pacotes que um emissor pode enviar em resposta a um ACK. O valor padro 0. Exemplo:
$tcp0 set maxburst_ 50

2.3.2.1. Variaes do TCP O NS permite a simulao de diversas variaes do protocolo TCP. A seguir, sero abordadas 3 das principais variaes.

TCP Tahoe: Essa verso do TCP tem como caracterstica trabalhar com a tcnica de partida lenta, ou seja, quando h uma perda, ele comea a retransmitir a uma taxa inicial lenta e vai crescendo exponencialmente. Essa a variao padro adotada pelo Agente TCP do NS e trabalha de forma similar verso de TCP lanada com o sistema BSD4.3. A sintaxe utilizada para declarar essa variao Agent/TCP.

TCP Reno: O agente TCP Reno muito similar ao agente TCP Tahoe, exceto pelo fato de incluir uma recuperao rpida, onde a janela de congestionamento corrente inflada pelo nmero de ACKs duplicados que o emissor TCP recebeu antes de receber um novo ACK. Esse novo ACK se refere a qualquer ACK com valor superior ao maior j visto at o momento. Alm do mais, o agente TCP Reno no retorna ao estado de partida lenta durante uma retransmisso rpida. Ao invs disso, ele reduz a sua janela de congestionamento metade da janela atual. A sintaxe utilizada para declarar essa variao Agent/TCP/Reno. TCP Vegas: O TCP Vegas uma proposta que surgiu para melhorar o desempenho das transmisses, aumentando a vazo do enlace em at 70% em alguns casos, alm de

19

poder reduzir at metade a quantidade de perdas se comparado ao TCP Reno. Ele tenta conseguir isso alterando o funcionamento de 3 mecanismos bsicos: retransmisso, controle de congestionamento e partida lenta. A sintaxe utilizada para declarar essa variao Agent/TCP/Vegas.

2.4. CAMADA DE APLICAO O NS possui diversas classes que simulam protocolos da camada de aplicao responsveis por gerar esse trfego. A seguir sero abordados os principais protocolos disponveis no NS, de acordo com o protocolo de transporte utilizado (UDP ou TCP):

2.4.1. CBR (Constant Bit Rate) O servio CBR aplicado a conexes que necessitam de banda fixa (esttica) devido aos requisitos de tempo bastante limitados entre a origem e o destino. Aplicaes tpicas deste servio so: udio interativo (telefonia), distribuio de udio e vdeo, udio e vdeo on demand, e jogos interativos. Para criar uma aplicao CBR, usa-se a seguinte sintaxe:

set cbr0 [new Application/Traffic/CBR] $cbr0 attach-agent $udp0

A primeira linha responsvel por gerar um trfego CBR referenciado pela varivel cbr0. A linha seguinte associa a aplicao criada a um protocolo da camada de transporte, que geralmente o UDP, chamado de udp0. A classe Application/Traffic/CBR possui uma variedade de parmetros que podem ser configurados, conforme mostrados abaixo:

Taxa de envio: Esse parmetro configura a taxa de envio dos pacotes.

Sintaxe:
$cbr0 set rate_ <value>

Onde <value> corresponde taxa de transferncia dos pacotes (em bits/s). O valor padro 448Kb.

Exemplo: 20

$cbr0 set rate_ 64Kb

Intervalo entre pacotes: Esse parmetro configura o intervalo de envio entre os pacotes e no deve ser usado em conjunto com a taxa de envio (rate_).

Sintaxe:
$cbr0 set interval_ <value>

Onde <value> corresponde ao tempo do intervalo entre os pacotes (em segundos).

Exemplo:
$cbr0 set interval_ 0.005

Tamanho do pacote: Esse parmetro configura o tamanho que o pacote vai possuir.

Sintaxe:
$cbr0 set packetSize_ <pktsize>

Onde <pktsize> um nmero inteiro que representa o tamanho em bytes do pacote. O valor padro 210.

Exemplo:
$cbr0 set packetSize_ 48

2.4.2. Exponencial O servio Exponencial gera trfegos em perodos pr-determinados, chamados de ligado e desligado. No perodo ligado, os pacotes so gerados a uma taxa constante, enquanto que no desligado no gerado trfego. Para criar uma aplicao Exponencial, utiliza-se a seguinte sintaxe:

set exponencial0 [new Application/Traffic/Exponential] $exponencial0 attach-agent $udp0

21

A primeira linha responsvel por gerar um trfego Exponencial referenciado pela varivel exponencial0. A linha seguinte associa a aplicao criada a um protocolo da camada de transporte, que nesse caso o UDP, chamado de udp0. A classe Application/Traffic/Exponential possui uma variedade de parmetros que podem ser configurados, conforme mostrados abaixo:

Taxa de envio: Esse parmetro configura a taxa de envio dos pacotes.

Sintaxe:
$exponencial0 set rate_ <value>

Onde <value> corresponde taxa de transferncia dos pacotes (em bits/s). O valor padro 64Kb.

Exemplo:
$exponencial0 set rate_ 128Kb

Tamanho do pacote: Esse parmetro configura o tamanho que o pacote vai possuir.

Sintaxe:
$exponencial0 set packetSize_ <pktsize>

Onde <pktsize> um nmero inteiro que representa o tamanho em bytes do pacote. O valor padro 210.

Exemplo:
$exponencial0 set packetSize_ 500

Tempo de transmisso: Esse parmetro configura a mdia de tempo em que o gerador de trfego permanece no perodo ligado.

Sintaxe:
$exponencial0 set burst_time_ <value>

22

Onde <value> corresponde ao tempo de gerao de trfego (em segundos). O valor padro 0,5s.

Exemplo:
$exponencial0 set burst_time_ 0.5

Tempo de inatividade: Esse parmetro configura a mdia de tempo em que o gerador de trfego permanece no perodo desligado.

Sintaxe:
$exponencial0 set idle_time_ <value>

Onde <value> corresponde ao tempo sem gerao de trfego (em segundos). O valor padro 0,5s.

Exemplo:
$exponencial0 set idle_time_ 0.5

2.4.3. FTP (File Transfer Protocol) O servio FTP aplicado a transferncia confivel de arquivos, uma vez que requer garantias de entrega dos pacotes. Para criar uma aplicao FTP, usa-se a seguinte sintaxe:

set ftp0 [new Application/ FTP] $ftp0 attach-agent $tcp0

A primeira linha responsvel por gerar um trfego FTP referenciado pela varivel ftp0. A linha seguinte associa a aplicao criada a um protocolo da camada de transporte, que o TCP, chamado de tcp0. Dentre os parmetros que podem ser configurados na classe Application/FTP, pode-se destacar:

23

Nmero mximo de pacotes: Esse parmetro define o nmero mximo de pacotes gerados pela fonte (emissor).

Sintaxe:
$ftp0 set maxpkts <value>

Onde <value> corresponde quantidade de pacotes.

Exemplo:
$ftp0 set maxpkts 1000

2.4.4. Telnet O servio Telnet utilizado para acesso remoto e exige uma transferncia confivel de dados. Para criar uma aplicao Telnet, utiliza-se a seguinte sintaxe:

set telnet0 [new Application/Telnet] $telnet0 attach-agent $tcp0

A primeira linha responsvel por gerar um trfego Telnet referenciado pela varivel telnet0. A linha seguinte associa a aplicao criada a um protocolo da camada de transporte, que nesse caso o TCP, chamado de tcp0. A classe Application/Telnet possui apenas um parmetro que pode ser configurado, conforme mostrado abaixo:

Intervalo entre pacotes: Esse parmetro configura o tempo mdio entre chegadas de pacotes.

Sintaxe:
$telnet0 set interval_ <value>

Onde <value> corresponde ao intervalo entre os pacotes (em segundos). O valor padro 1,0s.

Exemplo:
$telnet0 set interval_ 0.005

24

2.4.5. Gerando e finalizando trfegos Para iniciar e parar os trfegos das aplicaes, utiliza-se os comandos abaixo:

$ns at <tempo> $<protocolo> start -

Inicia o trfego no instante denotado por

<tempo>.

$ns at <tempo> $<protocolo> stop -

Encerra o trfego no instante denotado

por <tempo>.

Onde <protocolo> representa a varivel que referencia um protocolo de aplicao criado anteriormente e <tempo> refere-se a um determinado tempo de simulao em segundos.

Exemplo:
$ns at 0.5 "$cbr0 start" $ns at 4.5 "$cbr0 stop"

2.5. REDES SEM FIO O NS permite simulao de redes sem fios sendo possvel configurar diversos parmetros, como tipo de antena, propagao, protocolo de roteamento, entre outros.

2.5.1. Redes Ad-hoc As redes Ad-Hoc no possuem um controle centralizado, com pontos de acesso, e so formadas quando existe uma necessidade de comunicao entre ns prximos. A seguir ser mostrado como configurar parmetros e funes necessrias simulao desse tipo de rede. Um n mvel constitudo de diversos componentes de rede, como tipo de camada de enlace, tipo de fila, subcamada MAC, o canal sem fio, antena, tipo de rdiopropagao, protocolo de roteamento Ad-Hoc, etc. A primeira etapa a definio desses parmetros, que exemplificada a seguir:

set val(chan) Channel/WirelessChannel set val(prop) Propagation/TwoRayGround set val(netif) Phy/WirelessPhy set val(mac) Mac/802_11

25

set val(ifq) Queue/DropTail/PriQueue set val(ll) LL set val(ant) Antenna/OmniAntenna set val(ifqlen) 100 set val(nn) 3 set val(rp) AODV

Uma descrio desses parmetros explicada abaixo:

Tipo de Canal: Define o meio fsico que vai ser utilizado. Para redes sem fio utiliza-se Channel/WirelessChannel.

Modelo de Rdio-Propagao: Pode assumir os tipos: FreeSpace e TwoRayGround. O modelo FreeSpace adequado para distncias curtas enquanto que o modelo TwoRayGround geralmente usado para distncias longas.

Interface de Rede: Atua como uma interface de hardware atravs da qual o n mvel acessa o canal e implementada pela classe Phy/WirelessPhy.

Subcamada MAC: Usa-se o protocolo IEEE 802.11 implementado pela classe Mac/802_11.

Tipo de Fila: Geralmente utiliza-se uma fila de prioridade (Queue/Droptail/PriQueue), onde os pacotes de roteamento possuem uma prioridade maior. No exemplo acima, define-se o tamanho mximo da fila em 100 pacotes.

Camada de Enlace: Usa-se o valor padro LL.

Antena: Uma antena omni-direcional (Antenna/OmniAntenna) usada pelos ns mveis.

Nmero de ns mveis: Neste exemplo, foi utilizado o valor trs (trs ns mveis). 26

Simulaes de redes sem fio necessitam da criao de um arquivo de trace genrico, mostrada abaixo:

set tf [open out.tr w] $ns trace-all $tf

Neste exemplo, criado um arquivo de trace denominado out.tr referenciado pela varivel tf. O arquivo de trace do NAM precisa registrar os movimentos dos ns. Para isso, usa-se o comando namtrace-all-wireless exemplificado abaixo:

set nf [open out.nam w] $ns namtrace-all-wireless $nf 500 500

As linhas acima definem a criao de um arquivo de trace do NAM chamado out.nam referenciado pela varivel nf que conter todas as informaes de mobilidade em uma rede que possui uma rea de atuao de 500m x 500m. Em seguida, definem-se as dimenses da rea de atuao dos ns mveis (topografia), como no exemplo abaixo:

set topo [new Topography] $topo load_flatgrid 500 500

Neste caso, foi criada uma topografia de 500m x 500m. O prximo passo a criao de um objeto denominado GOD (General Operations Director), mostrada a seguir:

create-god $val(nn)

Onde $val(nn) representa o nmero de ns mveis que foi definido anteriormente. O GOD responsvel por armazenar informaes sobre o ambiente, a rede, os ns. um observador onipresente, mas que no conhecido pelos outros participantes da simulao. Para criar os ns mveis necessrio redefinir a maneira como um objeto n construdo, ou seja, ajustar a API de configurao do n onde se

27

pode determinar o tipo de endereamento, o protocolo de roteamento Ad-Hoc, camada de enlace, camada MAC, etc. Esse processo ilustrado a seguir:

$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) \ -topoInstance $topo \ -agentTrace ON \ -routerTrace ON \ -macTrace ON \ -movementTrace OFF \ -channel [new $val(chan)]`

Os valores desses parmetros sero substitudos pelos valores das variveis $val e outras definidas anteriormente. Depois, criam-se os ns:

set n(0) [$ns node] set n(1) [$ns node] set n(2) [$ns node]

Em seguida, os ns so inicializados desabilitando movimentos aleatrios nos mesmos:

$n(0) random-motion 0 $n(1) random-motion 0 $n(2) random-motion 0

As posies iniciais dos ns so determinadas a seguir e exemplificadas abaixo:

$n(0) set X_ 200.0 $n(0) set Y_ 100.0 $n(0) set Z_ 0.0 $n(1) set X_ 100.0 $n(1) set Y_ 100.0

28

$n(1) set Z_ 0.0 $n(2) set X_ 100.0 $n(2) set Y_ 10.0 $n(2) set Z_ 0.0

necessrio definir a posio inicial dos ns no NAM. Isso feito de acordo com a seguinte sintaxe:

$ns initial_node_pos <node> <size>

Onde <size> define o tamanho do n no NAM. Exemplo:

for {set i 0} {$i < $val(nn)} {incr i} { $ns initial_node_pos $n($i) 50 }

Para dar mobilidade aos ns usa-se a sintaxe abaixo que modelada como um evento:

$ns at <time> $<node> setdest <pos_x> <pos_y> <vel>

Determinando que no instante <time> o n <node> ir se mover para a posio (<pos_x> <pos_y) uma velocidade de <vel> m/s.

Exemplo:

$ns at 0.4 "$n(2) setdest 300.0 350.0 600.0"

preciso indicar ao NAM o instante em que a simulao termina, utilizando a sintaxe abaixo (na forma de evento):

$ns at <time> "$ns nam-end-wireless <stop_time>"

Onde <time> um instante de tempo qualquer e <stop_time> o tempo onde a simulao vai terminar.

29

Você também pode gostar