1 / 39

Estrutura Interna - Classes

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. n0. n1. Port Classifier. Multicast Node. dmux_. Addr Classifier. classifier_. Node entry.

melodie
Download Presentation

Estrutura Interna - Classes

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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. n0 n1 Port Classifier Multicast Node dmux_ Addr Classifier classifier_ Node entry Node entry dmux_ entry_ entry_ Multicast Classifier classifier_ multiclassifier_ Nodo 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 nodoe 32 bits para o idda 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

  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 2 8 15

  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 2 3 2 3 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.

  10. ts_ cmn header ptype_ ip header uid_ tcp header size_ rtp header iface_ trace header ... Formato De Pacotes (Cont.) 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 • 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. static class RTPHeaderClass : public PacketHeaderClass { public: RTPHeaderClass() : PacketHeaderClass("PacketHeader/RTP", sizeof(hdr_rtp)) { bind_offset(&hdr_rtp::offset_); } } class_rtphdr;

  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. PacketHeader/Common next_ hdrlen_ bits_ PacketHeader/IP PacketHeader/TCP Como 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 ……

  17. Node entry head_ enqT_ queue_ deqT_ link_ ttl_ drophead_ drpT_ tracing simplex link 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. Uso:ns_ duplex-link $n0 $n1 5Mb 2ms DropTail

  18. Implementados pelas classes herdeiras. 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.

  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. dst_=0.0 dst_=1.0 Agent/TCP Agent/TCPSink agents_ agents_ 0 1 1 0 Agentes (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

  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. Implementados pelas classes herdeiras. 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()

  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. Application/FTP dst_=0.0 dst_=1.0 Aplicações (Cont.) n0 n1 Port Classifier Port Classifier Agent/TCPSink Addr Classifier Addr Classifier Agent/TCP 0 0 agents_ agents_ 0 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. dst_=0.0 dst_=1.0 0 1 1 0 Encaminhando Pacotes n0 n1 Application/FTP Port Classifier Port Classifier Agent/TCPSink Addr Classifier Addr Classifier Agent/TCP 0 0 Link n0-n1 entry_ entry_ Link n1-n0

More Related