o tutorial-ns2 simulações
Post on 02-Mar-2016
26 Views
Preview:
TRANSCRIPT
-
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
(
top related