na camada de rede na camada de transporte Redes de Computadores Aula 4: 24 de março de 2010
na camada de rede na camada de transporte 1 Princípios Causas e custos do congestionamento 2 Princípios gerais de controle de congestionamento Poĺıticas de prevenção de congestionamento 3 na camada de rede em redes de circuitos virtuais em redes de datagramas Algoritmo RED Controle do jitter 4 na camada de transporte no transporte no TCP 5
na camada de rede na camada de transporte Princípios Causas e custos do congestionamento Princípios de congestionamento nas redes Nas redes cabeadas, as perdas de pacotes ocorrem tipicamente como resultado da saturação dos buffers dos roteadores quando a rede fica congestionada A perda de pacotes é um sintoma do congestionamento da rede
na camada de rede na camada de transporte Princípios Causas e custos do congestionamento Demanda excedente à capacidade da rede Figura: Fonte: Computer Networks, Tanenbaum, 4ed, 2003.
na camada de rede na camada de transporte Princípios Causas e custos do congestionamento Fatores que causam congestionamento nas redes Processamento lento ou largura de banda baixa Processadores lentos nos roteadores e/ou enlaces com largura de banda baixa geram filas nos buffers Enlaces de saída compartilhados Pacotes que chegam de vários enlaces de entrada e devem compartilhar um enlace de saída: 1 se o buffer é pequeno, pacotes serão perdidos 2 se aumentar o buffer, mais timeouts acontecerão até todos os pacotes serem transmitidos com sucesso, gerando duplicações
na camada de rede na camada de transporte Princípios Causas e custos do congestionamento Cenário 1: dois emissores e buffers infinitos Figura: Fonte: Computer Networking, Kurose-Ross, 5ed, 2010.
na camada de rede na camada de transporte Princípios Causas e custos do congestionamento Cenário 1: dois emissores e buffers infinitos Figura: Fonte: Computer Networking, Kurose-Ross, 5ed, 2010. Custo da rede congestionada Grandes atrasos de fila de buffer quando a taxa de chegada de pacotes é próxima da capacidade do enlace
na camada de rede na camada de transporte Princípios Causas e custos do congestionamento Cenário 2: dois emissores e buffers finitos Figura: Fonte: Computer Networking, Kurose-Ross, 5ed, 2010.
na camada de rede na camada de transporte Princípios Causas e custos do congestionamento Cenário 2: dois emissores e buffers finitos Figura: Fonte: Computer Networking, Kurose-Ross, 5ed, 2010.
na camada de rede na camada de transporte Princípios Causas e custos do congestionamento Cenário 2: dois emissores e buffers finitos Custo da rede congestionada 1 O emissor precisa fazer retransmissões para compensar a perda de pacotes devido ao estouro dos buffers 2 Se há retransmissões prematuras, o receptor irá receber pacotes duplicados, gerando tráfego desnecessário na rede 3 O enlace da rede é usado com cópias desnecessárias de pacotes
na camada de rede na camada de transporte Princípios Causas e custos do congestionamento Cenário 3: quatro emissores, buffers finitos e vários caminhos Figura: Fonte: Computer Networking, Kurose-Ross, 5ed, 2010.
na camada de rede na camada de transporte Princípios Causas e custos do congestionamento Cenário 3: quatro emissores, buffers finitos e vários caminhos Figura: Fonte: Computer Networking, Kurose-Ross, 5ed, 2010. Custo da rede congestionada Quando um pacote é perdido ao longo do caminho de roteamento, os recursos já usados nos saltos anteriores foram desperdiçados
na camada de rede na camada de transporte Princípios Causas e custos do congestionamento X controle de fluxo Questão que envolve o comportamento dos terminais e roteadores da rede, com o objetivo de garantir que a rede seja capaz de dar conta do tráfego gerado Controle de fluxo Questão que envolve apenas tráfego ponto-a-ponto, entre um emissor e um receptor, com o objetivo de garantir que o emissor não gere dados a uma taxa que o receptor não é capaz de consumir
na camada de rede na camada de transporte Princípios Causas e custos do congestionamento X controle de fluxo Figura: Fonte: Computer Networks, Tanenbaum, 4ed, 2003.
na camada de rede na camada de transporte Princípios gerais de controle de congestionamento Poĺıticas de prevenção de congestionamento Princípios gerais de controle de congestionamento Estratégias de prevenção Tomam decisões a priori (programadas), sem levar em conta o estado da rede Usam ferramentas para: 1 decidir quando aceitar novo tráfego 2 decidir quando descartar pacotes e quais pacotes descartar 3 tomar decisões de escalonamento em vários pontos da rede
na camada de rede na camada de transporte Princípios gerais de controle de congestionamento Poĺıticas de prevenção de congestionamento Princípios gerais de controle de congestionamento Estratégias de detecção e correção 1 Monitoram o sistema para detectar a ocorrência de congestionamento 2 Passam essa informação para os locais onde as ações devem ser executadas 3 Ajustam a operação do sistema para corrigir o problema
na camada de rede na camada de transporte Estratégias de detecção e correção Princípios gerais de controle de congestionamento Poĺıticas de prevenção de congestionamento Métricas para o monitoramento Percentual de pacotes descartados nos buffers Tamanho médio das filas dos buffers Número de pacotes retransmitidos por timeout Atraso médio dos pacotes Desvio padrão de atraso dos pacotes
na camada de rede na camada de transporte Estratégias de detecção e correção Princípios gerais de controle de congestionamento Poĺıticas de prevenção de congestionamento Aviso de congestionamento Reservar um campo nos cabeçalhos dos pacotes para os roteadores preencherem caso detectem congestionamento Terminais e roteadores enviarem pacotes probe periodicamente para perguntar explicitamente sobre congestionamento
na camada de rede na camada de transporte Estratégias de detecção e correção Princípios gerais de controle de congestionamento Poĺıticas de prevenção de congestionamento Técnicas para correção do problema Existem vários algoritmos de controle de congestionamento: Yang and Reddy, A taxonomy for congestion control algorithms in packet switching networks, 1995. Uma técnica é aumentar os recursos da rede (acionar roteadores de backup, aumentar número de enlaces alternativos, aumentar largura de banda dos enlaces) Outra técnica é diminuir a carga de dados (negar ou degradar serviços dos usuários, reescalonar as demandas dos usuários) Podem ser aplicadas em redes de circuitos virtuais ou na camada de trasnporte
na camada de rede na camada de transporte Princípios gerais de controle de congestionamento Poĺıticas de prevenção de congestionamento Poĺıticas de prevenção de congestionamento nas camadas Figura: Fonte: Computer Networks, Tanenbaum, 4ed, 2003.
na camada de rede na camada de transporte Princípios gerais de controle de congestionamento Poĺıticas de prevenção de congestionamento Poĺıticas de prevenção de congestionamento nas camadas Prevenção de congestionamento no enlace A poĺıtica de retransmissão de pacotes SR (Selective Repeat) é melhor para controle de congestionamento que GBN (Go-Back-N) A poĺıtica de aproveitar o tráfego reverso (piggback) para confirmar os pacotes recebidos (ACKs) é melhor para controle de congestionamento que gerar pacotes ACKs para cada pacote recebido (para isso, faz-se necessário um esquema de controle de fluxo com janela pequena para reduzir o número de pacotes sem confirmação do lado do emissor)
na camada de rede na camada de transporte Princípios gerais de controle de congestionamento Poĺıticas de prevenção de congestionamento Poĺıticas de prevenção de congestionamento nas camadas Prevenção de congestionamento na rede Circuitos virtuais ou datagramas (algoritmos de controle de congestionamento apenas em redes de circuitos virtuais) Estratégia de enfileiramento de pacotes (uma fila para cada enlace de entrada, ou de saída, ou ambos) Ordem de processamento dos pacotes (FIFO, prioridade) e poĺıtica de descarte de pacotes Algoritmo de roteamento (distribuição eficiente do tráfego em todas os enlaces) Gerência do tempo de vida dos pacotes (timeouts antes da chegada dos pacotes ao destino geram retransmissões desnecessárias)
na camada de rede na camada de transporte Princípios gerais de controle de congestionamento Poĺıticas de prevenção de congestionamento Poĺıticas de prevenção de congestionamento nas camadas Prevenção de congestionamento no transporte Além de questões similares àquelas da camada de enlace, o desafio é encontrar um bom intervalo de timeout para evitar retransmissões desnecessárias
na camada de rede na camada de transporte em redes de circuitos virtuais em redes de datagramas Algoritmo RED Controle do jitter em redes de circuitos virtuais (CVs) Estratégias de controle de admissão 1 Uma vez que o congestionamento foi sinalizado, não é permitido estabelecer novos circuitos virtuais até o problema ser resolvido (tentativas para criar novas conexões de transporte irão falhar) 2 Uma alternativa é permitir novos CVs, mas desciar suas rotas para áreas fora do congestionamento (redesenha o grafo da rede, excluindo os pontos de congestionamento) 3 Outra alternativa é negociar acordo entre terminal e a subrede quando o CV é estabelecido (volume e tipo de tráfego, etc.), requer reserva de recursos ao longo do CV
na camada de rede na camada de transporte Alternativa de desvio de rotas em CVs em redes de circuitos virtuais em redes de datagramas Algoritmo RED Controle do jitter Figura: Fonte: Computer Networks, Tanenbaum, 4ed, 2003.
na camada de rede na camada de transporte em redes de circuitos virtuais em redes de datagramas Algoritmo RED Controle do jitter em redes de datagramas Cada roteador pode manter uma variável u, para cada enlace, refletindo o percentual de utilização desse enlace Se o valor de u passar um limite estabelecido (threshold), o enlace entra em estado de alerta Quando um pacote chega em um enlace em estado de alerta, uma ação deve ser tomada
na camada de rede na camada de transporte Ações em enlaces em estado de alerta em redes de circuitos virtuais em redes de datagramas Algoritmo RED Controle do jitter Bit de alerta Seta um bit especial no cabeçalho da mensagem No receptor, a entidade de transporte copia o bit no ACK enviado de volta para o emissor (problema dessa estratégia: tempo necessário para a informação retornar ao emissor)
na camada de rede na camada de transporte Ações em enlaces em estado de alerta em redes de circuitos virtuais em redes de datagramas Algoritmo RED Controle do jitter Pacotes chocos (choke packets) O roteador envia um pacote choco de volta para o emissor diretamente (com a informação de quem era o destinatário) O pacote é rotulado (bit no cabeçalho) para não gerar mais pacotes desse tipo no caminho de volta O emissor reduz a taxa de envio de pacotes para esse destino até as condições melhorarem Uma variação é usar outros sinais (ao invés do percentual de utilização do enlace): tamanho da fila do buffer ou utilização do buffer
na camada de rede na camada de transporte Ações em enlaces em estado de alerta em redes de circuitos virtuais em redes de datagramas Algoritmo RED Controle do jitter Pacotes chocos (choke packets) Outra alternativa é o pacote choco ter efeito em todo o hop que ele passa, aumentando o tamanho dos buffers nesses hops (aĺıvio mais imediato do ponto de congestionamento, similar a um analgésico para dor enquanto a doença não é tratada)
na camada de rede na camada de transporte Envio e efeitos de pacotes chocos em redes de circuitos virtuais em redes de datagramas Algoritmo RED Controle do jitter
na camada de rede na camada de transporte Descarte de pacotes em redes de circuitos virtuais em redes de datagramas Algoritmo RED Controle do jitter Load shedding (cortes no serviço) Um roteador inundado, escolhe os pacotes que irá redirecionar A decisão sobre quais pacotes descartar pode depender da aplicação: em aplicações de transferência de arquivos, um pacote velho é mais importante que um pacote novo em aplicações de áudio e vídeo é o contrário, um pacote novo é mais importante que um pacote velho em aplicações de transferência de documentos com imagens e texto, perder uma linha de pixels de uma figura é melhor que perder uma linha de texto
na camada de rede na camada de transporte RED (Random Early Detection) em redes de circuitos virtuais em redes de datagramas Algoritmo RED Controle do jitter Descarte antecipado de pacotes Idéia: tratar o problema de congestionamento assim que ele apresentar sinais, descartando pacotes antes que o espaço do buffer fique saturado Leva em conta o fato de ser aplicado em redes cabeadas, onde a perda de pacotes acontece principalmente devido ao estouro dos buffers, ao invés de erros de transmissão, e a resposta normalmente é reduzir a taxa de envio
na camada de rede na camada de transporte RED (Random Early Detection) em redes de circuitos virtuais em redes de datagramas Algoritmo RED Controle do jitter A idéia de antecipar o descarte de pacotes é ter tempo para a ação causar efeito a tempo de resolver o problema Mas, como avisar o emissor que o seu pacote foi descartado? uma forma é enviar um choke de alerta (o problema é que ele gera mais tráfego no momento em que se deseja reduzi-lo) uma alternativa é descartar o pacote e não avisar (o emissor irá detectar a falta e tomar as ações devidas, como ele sabe que o pacote foi descartado por conta do controle de congestionamento, a resposta deverá ser reduzir o tráfego, ao invés de aumentá-lo)
na camada de rede na camada de transporte Controle do jitter em redes de circuitos virtuais em redes de datagramas Algoritmo RED Controle do jitter Para aplicações de áudio e vídeo não faz muito diferença se o tempo de entrega dos pacotes é de 10mseg ou 20mseg, desde que seja constante A variação, ou desvio padrão, no tempo de entrega dos pacotes é chamada jitter Valores altos de jitter (ex., variações entre 10mseg e 20mseg) ocasionam perda da qualidade da informação recebida
na camada de rede na camada de transporte Controle de jitter em redes de circuitos virtuais em redes de datagramas Algoritmo RED Controle do jitter Figura: Fonte: Computer Networks, Tanenbaum, 4ed, 2003.
na camada de rede na camada de transporte Estratégia para controle de jitter em redes de circuitos virtuais em redes de datagramas Algoritmo RED Controle do jitter Quando um pacote chega no roteador, o seu tempo é verificado e o pacote é rotulado com o tempo que ele está adiantado ou atrasado em relação ao tempo previsto O roteador dá prioridade para os pacotes atrasados e posterga a transmissão de pacotes adiantados Em aplicações de video sob demanda, o jitter pode ser eliminado bufferizando os dados no receptor e repassando-os em seguida para a aplicação Em aplicações de tempo real (ex., video conferência), essa estratégia não é diretamente aplicável
na camada de rede na camada de transporte no transporte no TCP no transporte Questões a tratar: Cada emissor deve limitar a taxa de envio em função do congestionamento percebido na rede, tratando as seguintes questões: 1 Como limitar a taxa de envio? 2 Como perceber o congestionamento? 3 Qual algoritmo o emissor deve usar para mudar a sua taxa de transmissão como função do congestionamento percebido?
na camada de rede na camada de transporte no TCP no transporte no TCP Como o TCP limita o tráfego? O mecanismo de controle de congestionamento do TCP do lado do emissor mantem uma variável adicional chamada janela de congestionamento (cwnd) Essa variável impõe restrições sobre a taxa na qual o emissor TCP pode gerar tráfego na rede A quantidade de dados não confirmados (acked) não pode exceder o mínimo entre (cwnd, rwnd), onde rwnd é o tamanho da janela de recebimento do receptor: LastByteSent LastByteAcked min{cwnd, rwnd}
na camada de rede na camada de transporte no TCP no transporte no TCP Como o TCP percebe o congestionamento? A perda de um datagrama (contendo um segmento TCP) causa um evento de perda (timeout ou três ACKs duplicados) no emissor, o que indica congestionamento Como o TCP determina a taxa de envio de pacotes? O objetivo é não congestionar a rede e ao mesmo tempo usar toda a largura de banda disponível
na camada de rede na camada de transporte no TCP no transporte no TCP Como o TCP determina a taxa de envio de pacotes? A estratégia do TCP para ajustar sua taxa de transmissão é aumentá-la em resposta à chegada de ACKs até que ocorra um evento de perda, nesse ponto a taxa é reduzida Não há uma sinalização expĺıcita da rede sobre o estado de congestionamento: ACKs e eventos de perda são sinais impĺıcitos! Cada emissor TCP age sobre as informações locais de forma assíncrona em relação aos outros emissores TCP
na camada de rede na camada de transporte no transporte no TCP Algoritmo de controle de congestionamento no TCP (RFC2581) Composto de três partes: 1 Início lento (slow start): mandatório na implementação TCP 2 Prevenção de congestionamento (congestion avoidance): mandatório na implementação TCP 3 Recuperação rápida (fast recovery): recomendado na implementação TCP
na camada de rede na camada de transporte Primeira parte: início lento no transporte no TCP 1 Começa com um valor para cwnd de 1MSS (Maximum Segment Size), resultando em uma taxa de transmissão de 1MSSbytes/RTTmseg 2 A cada segmento confirmado, o valor de cwnd aumenta de 1 (crescimento exponencial)
na camada de rede na camada de transporte Primeira parte: início lento no transporte no TCP Figura: Fonte: Computer Networking, Kurose-Ross, 5ed, 2010.
na camada de rede na camada de transporte Primeira parte: início lento no transporte no TCP 1 Se ocorrer um evento de perda, o emissor seta cwnd de volta para 1MSS e recomeça o processo 2 Além disso, a variável ssthresh (slow start threshold) é setada para cwnd/2 (metade do valor da janela de congestionamento quando o congestionamento foi detectado) 3 Quando o valor de cwnd alcança o valor de ssthresh, a parte início lento termina sua execução e o algoritmo passa para a parte prevenção de congestionamento (incrementa o valor de cwnd de um único MSS a cada RTT)
na camada de rede na camada de transporte no transporte no TCP Segunda parte: prevenção do congestionamento 1 Incrementa o valor de cwnd de forma mais conservadora: um MSS a cada RTT 2 Quando um timeout ocorre, o valor de cwnd é setado de volta para 1MSS e o valor de ssthresh é atualizado para cwnd/2 (quando o evento de perda ocorreu)
na camada de rede na camada de transporte no transporte no TCP Algoritmo de controle de congestionamento do TCP Figura: Fonte: Computer Networking, Kurose-Ross, 5ed, 2010.
na camada de rede na camada de transporte no transporte no TCP Exemplo de funcionamento do algoritmo do TCP Figura: Fonte: Computer Networks, Tanenbaum, 4ed, 2003.
na camada de rede na camada de transporte Terceira parte: recuperação rápida no transporte no TCP 1 Se três ACKs duplicados são recebidos, a parte início lento é encerrada imediatamente e o TCP executa uma retransmissão rápida (retransmite o segmento perdido antes do timeout expirar)
na camada de rede na camada de transporte Terceira parte: recuperação rápida no transporte no TCP Figura: Fonte: Computer Networking, Kurose-Ross, 5ed, 2010.
na camada de rede na camada de transporte Terceira parte: recuperação rápida no transporte no TCP 1 O pacote perdido é retransmitido e o valor de cwnd é incrementado de 1MSS a cada ACK duplicado recebido para o segmento que fez o TCP entrar nesse modo 2 Quando o ACK desse segmento é recebido, o TCP volta ao modo de prevenção de congestionamento 3 Se um timeout ocorre, o TCP vai para o modo início lento depois de fazer cwnd voltar a 1MSS e ssthresh para metade do valor corrente de cwnd
na camada de rede na camada de transporte no transporte no TCP Algoritmo de controle de congestionamento do TCP Figura: Fonte: Computer Networking, Kurose-Ross, 5ed, 2010.
na camada de rede na camada de transporte no transporte no TCP Algoritmo de controle de congestionamento do TCP Figura: Fonte: Computer Networking, Kurose-Ross, 5ed, 2010.
na camada de rede na camada de transporte Área de pesquisa atual Desenvolver mecanismos de controle de congestionamento para a Internet que leve em conta o tráfego UDP (não segue as regras de controle de congestionamento) 1 Kohler et al, DDCP: designing DCCP: congestion control without reliability, 2006 2 (ver RFCs mais recentes que tratam de controle de congestionamento)
na camada de rede na camada de transporte Outras referências sobre controle de congestionamento RFC 2581, TCP Congestion Control, 1999 Gevros et al, Congestion Control mechanisms and the best effort service model, 2001 Srikant, The mathematics of Internet congestion control, 2004 Ha et al, CUBIC: a new TCP friendly high speed TCP variant, 2008 Floyd, References on RED (Randon Early Detection) queue management, 2009
na camada de rede na camada de transporte 1 KUROSE and ROSS, Computer Networking, 5ed, 2010. 2 TANENBAUM, Computer Networks, 4ed, 2003.