Title: Estrutura Interna - Classes
1Estrutura Interna - Classes
- Kalina Ramos Porto
- 08/08/2003
2Roteiro
- Nodos
- Endereçamento
- Formato de Pacotes
- Filas e escalonamento de pacotes
- Agentes
- Aplicações e Geradores de Tráfego
3Nodo
Unicast Node
set ns_ new Simulator multicast on set n1 ns_
node
set n0 ns_ node
4Classificadores
- Classificadores são responsáveis por encaminhar
pacotes para outros objetos de simulação de
acordo com um critério lógico. - Cada classificador contém uma tabela de objetos
de simulação indexados por números de slot. - Os classificadores determinam o número de slot
(de acordo com um critério lógico) associado com
o pacote recebido e o encaminham para o objeto
indexado pelo número de slot específico.
5Endereçamento
- Dois estilos básicos de endereçamento
disponíveis flat e hierárquico - Endereço flat padrão 32 bits para o id do nodo e
32 bits para o id da porta - Endereço hierárquico padrão
- 3 níveis de hierarquia
- 10 11 11 ou 1 9 11 11 se multicast é
especificado - 32 bits para o id da porta
6Endereçamento (Cont.)
- O seguinte comando é utilizado para especificar
endereçamento hierárquico - O comando anterior permite configurar diferentes
números de níveis hierárquicos com seus
respectivos números de bits - Exemplo
ns set-address-format hierarchical
ns set-address-format hierarchical lt níveis
hierárquicosgt lt bits para nível 1gt ... lt bits
para o nível ngt
ns set-address-format hierarchical 2 8 15
7Nodo Hierárquico
n2
Address classifier
To Port demux
Node entry
Level 3
Level 2
Level 1
8Utilizando Endereçamento Hierárquico
- Habilita-se o modo hierárquico
- Definem-se o número de domínios, o número de
clusters em cada domínio e o número de nodos em
cada cluster - Criam-se os nodos com os endereços hierárquicos
ns set-address-format hierarchical
AddrParams set domain_num_ 2 lappend cluster_num
2 2 AddrParams set cluster_num_
cluster_num lappend eilastlevel 2 3 2
3 AddrParams set nodes_num_ eilastlevel
ns node 0.0.1
9Formato De Pacotes
- Objetos da classe Packet são a unidade
fundamental de troca entre objetos na simulação. - A classe Packet
- Provê informações para ligar um pacote a uma
lista (PacketQueue, por exemplo) - Faz referência a uma área de armazenamento
contendo os cabeçalhos do pacote (por protocolo) - Faz referência a uma área de armazenamento
contendo dados do pacote.
10Formato De Pacotes (Cont.)
header
data
11Cabeçalhos
- A estrutura hdr_cmn é o cabeçalho comum a todos
os pacotes. - Principais campos
- ts_ -gt instante em que o pacote foi criado.
- ptype_ -gt identifica o tipo do pacote.
- uid_ -gt identificador único de cada pacote.
- size_ -gt tamanho simulado do pacote em bytes.
- iface_ -gt identifica em qual link o pacote foi
recebido.
12Cabeçalhos (Cont.)
- É comum que cada protocolo implemente o seu
próprio cabeçalho. - Exemplo Arquivo .h
struct hdr_rtp u_int32_t srcid_ int
seqno_ u_int32_t srcid() return (srcid_)
int seqno() return (seqno_) / Packet
header access functions / static int
offset_ inline static int offset() return
offset_ inline static hdr_rtp access(const
Packet p) return (hdr_rtp)
p-gtaccess(offset_)
13Cabeçalhos (Cont.)
Arquivo .cc
static class RTPHeaderClass public
PacketHeaderClass public RTPHeaderClass()
PacketHeaderClass("PacketHeader/RTP", sizeof(hdr
_rtp)) bind_offset(hdr_rtpoffset_)
class_rtphdr
- A estrutura hdr_rtp define o layout do cabeçalho.
Usada pelo compilador apenas para definir o
tamanho em bytes do cabeçalho (offset). - A variável offset_ é usada para encontrar a
posição do cabeçalho rtp na área de memória em
que o pacote é armazenado.
14Como Criar Um Novo Cabeçalho
- Criar a estrutura do cabeçalho
- Permitir tracing do novo cabeçalho (packet.h)
enum packet_t PT_TCP, , PT_MESSAGE, PT_NTYP
E // This MUST be the LAST one class p_info
name_PT_MESSAGE message name_PT_
NTYPE "undefined"
15Como Criar Um Novo Cabeçalho (Cont.)
- Criar classe estática para OTcl linkage
- Registrar o novo cabeçalho em OTcl
(tcl/lib/ns-packet.tcl) - Estes passos não se aplicam quando adicionamos um
novo campo a um cabeçalho existente!
- foreach prot
- Common off_cmn_
-
- Message off_msg_
-
- add-packet-header prot
16Como Funciona O Cabeçalho
Packet
size determined at compile time
hdr_cmn
size determined at compile time
size determined at simulator startup
time (PacketHeaderManager)
hdr_ip
size determined at compile time
hdr_tcp
17Gerenciamento De Filas
- Filas são locais de armazenamento onde pacotes
são contidos (ou descartados). - No ns, filas fazem parte dos enlaces entre nodos.
Uso ns_ duplex-link n0 n1 5Mb 2ms DropTail
18Gerenciamento De Filas (Cont.)
- A classe Queue implementa as funcionalidades
básicas de uma fila. - Principais métodos
- void enque(Packet)
- Packet deque()
- void block()
- void unblock()
- Os métodos block() e unblock() são utilizados
para bloquear e desbloquear a fila. Este
mecanismo é utilizado para simular atraso de
transmissão.
19Gerenciamento De Filas (Cont.)
- O ns disponibiliza diferentes tipos de fila
- DropTail
- Fair Queueing (FQ), Stochastic Fair Queueing
(SFQ) e Deficit Round Robin (DRR) - Gerenciamento de buffer RED
- Class-Based Queueing (CBQ) e CBQ/WRR (Weighted
Round-Robin).
20Gerenciamento De Filas (Cont.)
- Objetos QueueMonitor são usados para monitorar um
conjunto de informações como chegada e partida de
pacotes e contadores de descartes em filas, além
de gerar estatísticas como tamanho médio de fila. - Uso
- O ns permite criar um trace específico de uma
fila pertencente a um enlace através do comando
ns monitor-queue n0 n1 lttracegt ltintervalogt
ns trace-queue n0 n1 lttracegt
21Agentes
- Agentes são endpoints onde pacotes são
construídos e consumidos. - São usados na implementação de protocolos em
várias camadas - Protocolos da camada de transporte, por exemplo
UDP e variações do TCP. - Protocolos de roteamento, por exemplo
Distance-Vector.
22Agentes (Cont.)
- Vários agentes são disponibilizados pelo ns. Os
mais conhecidos são - TCP e suas variações (Vega, Reno, Newreno...)
- TCPSink, um receptor TCP Reno ou Tahoe
- UDP
- LossMonitor, um receptor de pacotes que produz
estatísticas de perda de pacotes - Null, um agente que descarta pacotes
- rtProto/DV, que simula o protocolo de roteamento
distance-vector.
23Agentes (Cont.)
- Agentes são modelados pela classe Agent,
implementada em C e OTcl (ns/agent.h,.cc e
ns/tcl/lib/ns-agent.tcl). - Apresenta algumas variáveis utilizadas para
inicializar campos dos pacotes criados - addr_ -gt endereço do nodo ao qual o agente está
conectado - dst_ -gt endereço do nodo destino
- size_ -gt tamanho do pacote gerado em bytes
- type_ -gt tipo do pacote gerado.
24Agentes (Cont.)
- A classe Agent provê métodos para geração e
recebimento de pacotes - Packet allocpkt() -gt aloca um novo pacote e
inicializa seus campos. - Packet allocpkt(int n) -gt aloca um novo pacote
com um tamanho n de dados. - void recv(Packet, Handler) -gt primeiro método
invocado quando um pacote é recebido.
25Agentes (Cont.)
n0
n1
Port Classifier
Port Classifier
Addr Classifier
Addr Classifier
0
0
dmux_
dmux_
Link n0-n1
entry_
entry_
classifier_
classifier_
Link n1-n0
26Utilizando Agentes
- Cria-se agente emissor e o conecta ao nodo fonte
- Cria-se agente receptor e o conecta ao nodo
sorvedouro - Conectam-se os agentes emissor e receptor
set tcpSource new Agent/TCP ns attach-agent
n0 tcpSource
set tcpSink new Agent/TCPSink ns attach-agent
n1 tcpSink
ns connect tcpSource tcpSink
27Criando Um Novo Agente
- Cria-se o cabeçalho do novo protocolo (conforme
instruções anteriores). - Cria-se uma classe em C que estende a classe
Agent.
Arquivo .h
class MeuAgente public Agent
public MeuAgente() int command(int argc,
const charconst argv) void recv(Packet,
Handler)
28Criando Um Novo Agente (Cont.)
Arquivo .cc
MeuAgenteMeuAgente() Agent(PT_MEUAGENTE)
bind("packetSize_", size_) int
MeuAgentecommand(int argc, const charconst
argv) ... void MeuAgenterecv(Packet
pkt, Handler) ...
29Criando Um Novo Agente (Cont.)
- Cria-se classe estática para OTcl linkage
Arquivo .cc
static class MeuAgenteClass public TclClass
public MeuAgenteClass() TclClass("Agent/MeuA
gente") TclObject create(int, const
charconst) return (new MeuAgente())
class_meuagente
30Criando Um Novo Agente (Cont.)
- Inserir valores default para as variáveis do
agente. - Adicionar o arquivo .o gerado na lista de
arquivos objeto do ns no arquivo Makefile.in e
executar ./configure.
Arquivo ns/tcl/lib/ns-default.tcl
Agente/MeuAgente set packetSize_ 64
sessionhelper.o delaymodel.o srm-ssm.o \
srm-topo.o \ ping.o \ (LIB_DIR)int.Vec.o
(LIB_DIR)int.RVec.o
31Aplicações
- Aplicações são construídas no topo dos protocolos
de transporte. - Modeladas através da classe Application.
- Principais métodos
- void send(int nbytes)
- void recv(int nbytes)
- void start()
- void stop()
32Aplicações (Cont.)
- Utilizam os serviços dos protocolos de transporte
através de chamadas para os seguintes métodos - send(int nbytes)
- sendmsg(int nbytes, const char flags 0)
- close()
- listen()
33Aplicações (Cont.)
n0
n1
Port Classifier
Port Classifier
Agent/TCPSink
Addr Classifier
Agent/TCP
Addr Classifier
0
0
agents_
agents_
0
1
dmux_
dmux_
entry_
entry_
classifier_
classifier_
34Geradores De Tráfego
- Tráfego é gerado em intervalos, que podem seguir
uma determinada distribuição ou não. - Geradores de tráfego disponíveis
- Exponencial -gt geram tráfego de acordo com uma
distribuição Exponencial On/Off - Pareto -gt geram tráfego de acordo com uma
distribuição Pareto On/Off - CBR (Constant Bit Rate) -gt geram tráfego a uma
taxa constante
35Geradores De Tráfego (Cont.)
set src new Agent/UDP set sink new
Agent/UDP ns_ attach-agent n0 src ns_
attach-agent n1 sink ns_ connect src
sink set e new Application/Traffic/Exponential
e attach-agent src e set packetSize_ 210 e
set burst_time_ 500ms e set idle_time_ 500ms e
set rate_ 100k
36Geradores De Tráfego Trace Driven
- ns permite geração de tráfego a partir de
arquivos de trace. - Uso
- set tfile new Tracefile
- tfile filename ltfilegt
- set src new Application/Traffic/Trace
- src attach-tracefile tfile
- ltfilegt
- - Formato binário
- - inter-packet time (msec) e packet size (byte)
37Aplicações Simuladas
- ns permite a simulação de dois tipos de
aplicações - Application/FTP
- Application/Telnet
38Aplicações Simuladas (Cont.)
set tcp1 new Agent/TCP ns_ attach-agent n0
tcp1 set sink1 new Agent/TCPSink ns_
attach-agent n1 sink1 ns_ connect tcp1
sink1 set ftp1 new Application/FTP ftp1
attach-agent agent
39Encaminhando Pacotes
n0
n1
Application/FTP
Port Classifier
Port Classifier
Agent/TCPSink
Addr Classifier
Agent/TCP
Addr Classifier
0
0
Link n0-n1
entry_
entry_
Link n1-n0