o tutorial-ns2 simulações

Embed Size (px)

Citation preview

  • 1

    Tutorial de NS-2

    Lucas Coelho Gonalves e Marcos Estevo de Oliveira Corra

    Julho de 2005

  • 2

    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

  • 3

    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

  • 4

    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.

  • 5

    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

  • 6

    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.

  • 7

    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

  • 8

    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 nsfor {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

  • 9

    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

  • 10

    $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, pode-

    se 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-traceclose $nfexec nam out.nam &

    exit 0

    }

  • 11

    $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.

  • 12

    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

  • 13

    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, usa-

    se 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 DVset n1 [$ns Node]$n1 set multiPath_ 1

  • 14

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

    $ns cost $ $

    Onde o valor do custo associado ao enlace entre os ns e

    . 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 down $ $

    Onde o instante em segundos no qual o enlace entre os ns e

    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,

  • 15

    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_

    Onde um nmero inteiro que representa o tamanho em bytes do

    pacote. O valor padro 1000.

  • 16

    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_

    Onde 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_

    Onde 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.

  • 17

    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_

    Onde define o tamanho da janela em nmero de pacotes. O valor padro

    20.

    Exemplo: $tcp0 set window_ 50

  • 18

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

    Sintaxe: $tcp0 set packetSize_

    Onde 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_

    Onde 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_

    Onde define o tamanho inicial da janela de congestionamento em nmero

    de pacotes. O valor padro 1.

    Exemplo: $tcp0 set windowInit_ 5

  • 19

    Tamanho mximo de rajada: Determina o nmero mximo de pacotes que o emissor pode enviar em resposta

    a um ACK.

    Sintaxe: $tcp0 set maxburst_

    Onde 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

  • 20

    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_

    Onde corresponde taxa de transferncia dos pacotes (em bits/s). O

    valor padro 448Kb.

    Exemplo:

  • 21

    $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_

    Onde 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_

    Onde 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

  • 22

    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_

    Onde 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_

    Onde 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_

  • 23

    Onde 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_

    Onde 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:

  • 24

    Nmero mximo de pacotes: Esse parmetro define o nmero mximo de pacotes gerados pela fonte

    (emissor).

    Sintaxe: $ftp0 set maxpkts

    Onde 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_

    Onde corresponde ao intervalo entre os pacotes (em segundos). O valor

    padro 1,0s.

    Exemplo: $telnet0 set interval_ 0.005

  • 25

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

    $ns at $ start - Inicia o trfego no instante denotado por

    .

    $ns at $ stop - Encerra o trfego no instante denotado

    por .

    Onde representa a varivel que referencia um protocolo de

    aplicao criado anteriormente e 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 rdio-

    propagao, protocolo de roteamento Ad-Hoc, etc. A primeira etapa a definio desses

    parmetros, que exemplificada a seguir:

    set val(chan) Channel/WirelessChannelset val(prop) Propagation/TwoRayGroundset val(netif) Phy/WirelessPhyset val(mac) Mac/802_11

  • 26

    set val(ifq) Queue/DropTail/PriQueueset val(ll) LLset val(ant) Antenna/OmniAntennaset val(ifqlen) 100set val(nn) 3set 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).

  • 27

    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

  • 28

    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

  • 29

    $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

    Onde 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 $ setdest

    Determinando que no instante o n ir se mover para a posio

    (