A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Estrutura Interna - Classes

Apresentações semelhantes


Apresentação em tema: "Estrutura Interna - Classes"— Transcrição da apresentação:

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

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

3 Nodo n0 n1 Multicast Node Unicast Node
Addr Classifier Port Classifier classifier_ dmux_ entry_ Node entry Multicast Classifier classifier_ dmux_ entry_ Node entry Multicast Node multiclassifier_ Unicast Node set ns_ [new Simulator –multicast on] set n1 [ns_ node] set n0 [ns_ node]

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

5 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 ou se multicast é especificado 32 bits para o id da porta

6 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

7 Nodo Hierárquico n2 Address classifier To Port demux Node entry
Level 3 Level 2 Level 1

8 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_ 2 lappend cluster_num 2 2 AddrParams set cluster_num_ $cluster_num lappend eilastlevel AddrParams set nodes_num_ $eilastlevel $ns node 0.0.1

9 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. A classe Packet contém um campo denominado next_ que se aponta para o próximo pacote em uma lista.

10 Formato De Pacotes (Cont.)
ts_ ptype_ uid_ size_ iface_ ip header tcp header rtp header trace header cmn header ... header data

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

12 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_);} }

13 Cabeçalhos (Cont.) Arquivo .cc
static class RTPHeaderClass : public PacketHeaderClass { public: RTPHeaderClass() : PacketHeaderClass("PacketHeader/RTP", sizeof(hdr_rtp)) { bind_offset(&hdr_rtp::offset_); } } 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.

14 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";

15 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

16 Como Funciona O Cabeçalho
Packet PacketHeader/Common PacketHeader/IP PacketHeader/TCP next_ hdrlen_ bits_ size determined at compile time hdr_cmn size determined at simulator startup time (PacketHeaderManager) size determined at compile time hdr_ip size determined at compile time hdr_tcp ……

17 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_ Node entry head_ tracing simplex link Uso: ns_ duplex-link $n0 $n1 5Mb 2ms DropTail

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

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

20 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>

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

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

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

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

25 Agentes (Cont.) n0 n1 1 1 Port Classifier Port Classifier dst_=1.0
Addr Classifier Agent/TCP agents_ Addr Classifier Agent/TCPSink agents_ 1 1 dmux_ dmux_ Link n0-n1 entry_ entry_ classifier_ classifier_ Link n1-n0

26 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

27 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. Arquivo .h class MeuAgente : public Agent { public: MeuAgente(); int command(int argc, const char*const* argv); void recv(Packet*, Handler*); };

28 Criando Um Novo Agente (Cont.)
Arquivo .cc MeuAgente::MeuAgente() : Agent(PT_MEUAGENTE) { bind("packetSize_", &size_); } int MeuAgente::command(int argc, const char*const* argv) { ... void MeuAgente::recv(Packet* pkt, Handler*) {

29 Criando Um Novo Agente (Cont.)
Cria-se classe estática para OTcl linkage Arquivo .cc static class MeuAgenteClass : public TclClass { public: MeuAgenteClass() : TclClass("Agent/MeuAgente") {} TclObject* create(int, const char*const*) { return (new MeuAgente()); } } class_meuagente;

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

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

32 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()

33 Aplicações (Cont.) n0 n1 1 Port Classifier Application/FTP
dst_=1.0 dst_=0.0 Addr Classifier Agent/TCP Addr Classifier Agent/TCPSink agents_ agents_ 1 dmux_ dmux_ entry_ entry_ classifier_ classifier_

34 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

35 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

36 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)

37 Aplicações Simuladas ns permite a simulação de dois tipos de aplicações: Application/FTP Application/Telnet

38 Aplicações Simuladas (Cont.)
Uso 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

39 Encaminhando Pacotes n0 n1 1 1 Port Classifier Application/FTP
dst_=1.0 dst_=0.0 Addr Classifier Agent/TCP Addr Classifier Agent/TCPSink 1 1 Link n0-n1 entry_ entry_ Link n1-n0


Carregar ppt "Estrutura Interna - Classes"

Apresentações semelhantes


Anúncios Google