estrutura interna - classes kalina ramos porto 08/08/2003

39
Estrutura Interna - Classes Kalina Ramos Porto 08/08/2003

Upload: internet

Post on 18-Apr-2015

105 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Estrutura Interna - Classes Kalina Ramos Porto 08/08/2003

Estrutura Interna - Classes

Kalina Ramos Porto08/08/2003

Page 2: Estrutura Interna - Classes Kalina Ramos Porto 08/08/2003

Roteiro

Nodos Endereçamento Formato de Pacotes Filas e escalonamento de pacotes Agentes Aplicações e Geradores de Tráfego

Page 3: Estrutura Interna - Classes Kalina Ramos Porto 08/08/2003

Nodo

n0 n1

Addr Classifier

Port Classifier

classifier_

dmux_

entry_

Node entry

Unicast Node

Multicast Classifier

classifier_

dmux_

entry_

Node entry

Multicast Node

multiclassifier_

set ns_ [new Simulator –multicast on]set n1 [ns_ node]

set n0 [ns_ node]

Page 4: Estrutura Interna - Classes Kalina Ramos Porto 08/08/2003

Classificadores

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.

Page 5: Estrutura Interna - Classes Kalina Ramos Porto 08/08/2003

Endereç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

Page 6: Estrutura Interna - Classes Kalina Ramos Porto 08/08/2003

Endereç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 <# níveis hierárquicos><# bits para nível 1> ... <# bits para o nível n>

$ns set-address-format hierarchical 2 8 15

Page 7: Estrutura Interna - Classes Kalina Ramos Porto 08/08/2003

Nodo Hierárquico

n2

Nodeentry

Level 1Level 2

Level 3

Addressclassifier To Port

demux

Page 8: Estrutura Interna - Classes Kalina Ramos Porto 08/08/2003

Utilizando 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_ 2lappend cluster_num 2 2AddrParams set cluster_num_ $cluster_numlappend eilastlevel 2 3 2 3AddrParams set nodes_num_ $eilastlevel

$ns node 0.0.1

Page 9: Estrutura Interna - Classes Kalina Ramos Porto 08/08/2003

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

Page 10: Estrutura Interna - Classes Kalina Ramos Porto 08/08/2003

Formato De Pacotes (Cont.)

header

dataip header

tcp header

rtp header

trace header

cmn header

...

ts_

ptype_

uid_

size_

iface_

Page 11: Estrutura Interna - Classes Kalina Ramos Porto 08/08/2003

Cabeçalhos

A estrutura hdr_cmn é o cabeçalho “comum” a todos os pacotes.

Principais campos: ts_ -> instante em que o pacote foi criado. ptype_ -> identifica o tipo do pacote. uid_ -> identificador único de cada pacote. size_ -> tamanho simulado do pacote em bytes. iface_ -> identifica em qual link o pacote foi

recebido.

Page 12: Estrutura Interna - Classes Kalina Ramos Porto 08/08/2003

Cabeç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->access(offset_);}}

Page 13: Estrutura Interna - Classes Kalina Ramos Porto 08/08/2003

Cabeçalhos (Cont.)

static class RTPHeaderClass : public PacketHeaderClass {public:

RTPHeaderClass() : PacketHeaderClass("PacketHeader/RTP",sizeof(hdr_rtp)) {

bind_offset(&hdr_rtp::offset_);}

} class_rtphdr;

Arquivo .cc

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.

Page 14: Estrutura Interna - Classes Kalina Ramos Porto 08/08/2003

Como 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_NTYPE // This MUST be the LAST one

};

class p_info {

……

name_[PT_MESSAGE] = “message”;

name_[PT_NTYPE]= "undefined";

……

};

Page 15: Estrutura Interna - Classes Kalina Ramos Porto 08/08/2003

Como 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

Page 16: Estrutura Interna - Classes Kalina Ramos Porto 08/08/2003

Como Funciona O Cabeçalho

Packet

next_

hdrlen_

bits_ size determinedat compile time

size determinedat compile time

size determinedat compile time

……

hdr_cmn

hdr_ip

hdr_tcp

size determinedat simulatorstartup time

(PacketHeaderManager)

PacketHeader/Common

PacketHeader/IP

PacketHeader/TCP

Page 17: Estrutura Interna - Classes Kalina Ramos Porto 08/08/2003

Gerenciamento De Filas

Filas são locais de armazenamento onde pacotes são contidos (ou descartados).

No ns, filas fazem parte dos enlaces entre nodos.

enqT_ queue_ deqT_

drophead_ drpT_

link_ ttl_

Nodeentryhead_

tracing simplex link

Uso: ns_ duplex-link $n0 $n1 5Mb 2ms DropTail

Page 18: Estrutura Interna - Classes Kalina Ramos Porto 08/08/2003

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

Implementados pelas classes herdeiras.

Page 19: Estrutura Interna - Classes Kalina Ramos Porto 08/08/2003

Gerenciamento 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).

Page 20: Estrutura Interna - Classes Kalina Ramos Porto 08/08/2003

Gerenciamento 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 <trace> <intervalo>

$ns trace-queue $n0 $n1 <trace>

Page 21: Estrutura Interna - Classes Kalina Ramos Porto 08/08/2003

Agentes

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.

Page 22: Estrutura Interna - Classes Kalina Ramos Porto 08/08/2003

Agentes (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.

Page 23: Estrutura Interna - Classes Kalina Ramos Porto 08/08/2003

Agentes (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_ -> endereço do nodo ao qual o agente está conectado;

dst_ -> endereço do nodo destino; size_ -> tamanho do pacote gerado em bytes; type_ -> tipo do pacote gerado.

Page 24: Estrutura Interna - Classes Kalina Ramos Porto 08/08/2003

Agentes (Cont.)

A classe Agent provê métodos para geração e recebimento de pacotes:

Packet* allocpkt() -> aloca um novo pacote e inicializa seus campos.

Packet* allocpkt(int n) -> aloca um novo pacote com um tamanho n de dados.

void recv(Packet*, Handler*) -> primeiro método invocado quando um pacote é recebido.

Page 25: Estrutura Interna - Classes Kalina Ramos Porto 08/08/2003

Agentes (Cont.)

0

1

n0 n1

Addr Classifier

Port Classifier

classifier_

dmux_

entry_

0 Agent/TCP

agents_

Addr Classifier

Port Classifier

classifier_

dmux_

entry_

1

0Link n0-n1

Link n1-n0

0 Agent/TCPSinkagents_

dst_=1.0 dst_=0.0

Page 26: Estrutura Interna - Classes Kalina Ramos Porto 08/08/2003

Utilizando 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

Page 27: Estrutura Interna - Classes Kalina Ramos Porto 08/08/2003

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

class MeuAgente : public Agent { public:

MeuAgente(); int command(int argc, const char*const* argv); void recv(Packet*, Handler*);

};

Arquivo .h

Page 28: Estrutura Interna - Classes Kalina Ramos Porto 08/08/2003

Criando Um Novo Agente (Cont.)

MeuAgente::MeuAgente() : Agent(PT_MEUAGENTE) { bind("packetSize_", &size_);

}

int MeuAgente::command(int argc, const char*const* argv) {...

}

void MeuAgente::recv(Packet* pkt, Handler*) {...

}

Arquivo .cc

Page 29: Estrutura Interna - Classes Kalina Ramos Porto 08/08/2003

Criando Um Novo Agente (Cont.)

Cria-se classe estática para OTcl linkage

static class MeuAgenteClass : public TclClass { public:

MeuAgenteClass() : TclClass("Agent/MeuAgente") {} TclObject* create(int, const char*const*) {

return (new MeuAgente()); } } class_meuagente;

Arquivo .cc

Page 30: Estrutura Interna - Classes Kalina Ramos Porto 08/08/2003

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

Agente/MeuAgente set packetSize_ 64

Arquivo ~ns/tcl/lib/ns-default.tcl

sessionhelper.o delaymodel.o srm-ssm.o \ srm-topo.o \ ping.o \ $(LIB_DIR)int.Vec.o $(LIB_DIR)int.RVec.o

Page 31: Estrutura Interna - Classes Kalina Ramos Porto 08/08/2003

Aplicaçõ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()

Implementados pelas classes herdeiras.

Page 32: Estrutura Interna - Classes Kalina Ramos Porto 08/08/2003

Aplicaçõ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()

Page 33: Estrutura Interna - Classes Kalina Ramos Porto 08/08/2003

Aplicações (Cont.)

n0 n1

Addr Classifier

Port Classifier

classifier_

dmux_

entry_

Agent/TCP

agents_

Addr Classifier

Port Classifier

classifier_

dmux_

entry_

Agent/TCPSink

agents_

dst_=1.0 dst_=0.0Application/FTP

0

0

1

0

Page 34: Estrutura Interna - Classes Kalina Ramos Porto 08/08/2003

Geradores 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 -> geram tráfego de acordo com uma

distribuição Exponencial On/Off Pareto -> geram tráfego de acordo com uma

distribuição Pareto On/Off CBR (Constant Bit Rate) -> geram tráfego a uma

taxa constante

Page 35: Estrutura Interna - Classes Kalina Ramos Porto 08/08/2003

Geradores De Tráfego (Cont.)

Uso:

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

Page 36: Estrutura Interna - Classes Kalina Ramos Porto 08/08/2003

Geradores 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 <file>

set src [new Application/Traffic/Trace]

$src attach-tracefile $tfile

<file>:

- Formato binário

- inter-packet time (msec) e packet size (byte)

Page 37: Estrutura Interna - Classes Kalina Ramos Porto 08/08/2003

Aplicações Simuladas

ns permite a simulação de dois tipos de aplicações:

Application/FTP Application/Telnet

Page 38: Estrutura Interna - Classes Kalina Ramos Porto 08/08/2003

Aplicações Simuladas (Cont.)

Uso

set tcp1 [new Agent/TCP]$ns_ attach-agent $n0 $tcp1set sink1 [new Agent/TCPSink]$ns_ attach-agent $n1 $sink1$ns_ connect $tcp1 $sink1

set ftp1 [new Application/FTP]$ftp1 attach-agent $agent

Page 39: Estrutura Interna - Classes Kalina Ramos Porto 08/08/2003

Encaminhando Pacotes

0

1

n0 n1

Addr Classifier

Port Classifier

entry_

0 Agent/TCP Addr Classifier

Port Classifier

entry_

1

0Link n0-n1

Link n1-n0

0 Agent/TCPSink

dst_=1.0 dst_=0.0Application/FTP