Protocolo de Congestionamento





Controle de Congestionamento TCP


O protocolo TCP (Transmission Control Protocol) faz parte do conjunto de protocolos TCP/IP, tendo como objetivo a diminuição do congestionamento no núcleo da rede.

O TCP utiliza o reconhecimento positivo com retransmissão, na qual o destinatário de um pacote de dados transmite uma mensagem (Acknowledgement ou ACK) de volta para cada pacote entregue a ele, dizendo que os dados chegaram. 


Da mesma forma, se a fonte receber três ACKs (ACK duplicado) solicitando pelo número sequencial do último pacote transmitido o TCP também considerará o pacote perdido e o retransmitirá.

Com essa informação o TCP implementa um mecanismo de controle de congestionamento fim a fim deduzida a partir da observação dos pacotes perdidos ou recebidos com atraso. A partir disso o TCP diminui o fluxo de pacotes enviado, visando colaborar com a diminuição do possível congestionamento no núcleo da rede.

Os atrasos ocorrem quando há atrasos significativos em filas nos roteadores.

A perda de pacotes ocorre quando estoura a capacidade de armazenamento nos roteadores devido ao congestionamento e os novos pacotes que chegam são descartados.




Janela de congestionamento


O controle de fluxo no TCP depende do tamanho da janela do receptor, a qual o receptor informa ao emissor a cada troca de pacotes, usando o campo Window do cabeçalho TCP.
No caso do controle de congestionamento, o emissor usa uma variável adicional chamada janela de congestionamento, a qual limita a transmissão em função do congestionamento percebido na rede.



A janela deslizante é utilizada também para controle de fluxo na conexão TCP através de alterações em seu tamanho. Em cada ACK transmitido o destinatário informa a fonte quantos pacotes ele é capaz de receber. Esta informação faz com que a fonte ajuste o tamanho da sua janela deslizante de forma a não enviar mais pacotes que o destinatário consiga processar.

O congestionamento em uma rede de pacotes ocorre quando o desempenho da rede é diminuído pelo excesso de pacotes.

O congestionamento pode ter várias causas, como quando vários pacotes chegam nas outras entradas de um roteador e todos devem sair pela mesma porta, ou quando os roteadores demoram para processar os pacotes e a fila encher mesmo tendo largura de faixa disponível no link. Quando a fila encher e a memória do roteador não suportar a quantidade, há um descarte de pacotes.




Funcionamento do controle de congestionamento TCP


A ideia do controle de congestionamento é permitir que o TCP transmita o mais rápido possível, desde que não perda segmentos. Para isto, a conexão TCP começa com uma janela de congestionamento de tamanho pequeno, visando sondar a existência de banda, e vai aumentando o tamanho da janela até que ocorra uma perda. Quando isto acontece, o TCP reduz o tamanho da janela para um nível seguro, e volta a aumentá-la, sondando novamente a existência de banda.







Algoritmos de controle de congestionamento do TCP


O controle de congestionamento do TCP é realizado por quatro algoritmos: Slow Start, Congestion Avoidance, Fast Retransmit e Fast Recovery. Apesar de serem independentes, esses algoritmos são geralmente implementados de forma conjunta.



Algoritmo Slow Start


Slow start é um mecanismo do TCP desenvolvido para iniciar ou reiniciar uma transmissão. A ideia básica desse algoritmo consiste em elevar gradualmente a taxa de transmissão de tráfego na rede até que uma situação de equilíbrio seja atingida.

O TCP envia um segmento e espera por um reconhecimento. Se este segmento foi reconhecido antes do estouro do temporizador, o TCP dobra o tamanho da janela de congestionamento, passando a enviar dois segmentos. Se receber reconhecimentos novamente, volta a dobrar o tamanho da janela para quatro e assim continua até a janela de congestionamento estar acima do valor de limiar ou os reconhecimentos chegarem depois do estouro do temporizador.






Algoritmo Congestion Avoidance


Durante a fase inicial de transferência de dados, o algoritmo slow start é utilizado. Entretanto, se durante o slow start for necessário descartar um ou mais pacotes devido a congestionamento, o algoritmo congestion avoidance é utilizado para diminuir a taxa de transmissão.

Já que a perda de pacote é um indício de ocorrência de congestionamento entre a fonte e o destino, a detecção de congestionamento pode acontecer de duas formas diferentes. A primeira através da expiração do tempo de transmissão e a segunda através do recebimento de ACK`s duplicados.

Os algoritmos congestion avoidance e slow start são independentes e têm objetivos distintos, mas quando ocorre um congestionamento é necessário diminuir a taxa de transmissão dos pacotes ajustados para a metade do valor corrente da janela e utilizar o algoritmo slow start para reiniciar o processo de transmissão de partida lenta. Na prática, esses algoritmos são implementados em conjunto.


Algoritmos Fast Retransmit e Fast Recovery


O protocolo TCP gera um ACK duplicado para informar à fonte que um segmento foi recebido fora de ordem no receptor. A chegada de segmentos fora de ordem pode ocorrer quando há atraso de um dos segmentos (provavelmente por ter seguido um caminho distinto dos outros durante o roteamento) ou quando há perda de um segmento. Para distinguir uma situação da outra, observa-se o número de ACK’s duplicados que são recebidos. Para o primeiro caso, apenas um ou dois ACK’s duplicados são tolerados. A partir do terceiro é considerada a perda do segmento.






Quando o algoritmo de fast retransmit estiver sendo utilizado, o recebimento de três reconhecimentos duplicados faz com que a fonte imediatamente retransmita o segmento correspondente sem que se espere pelo estouro do temporizador, aumentando consequentemente a vazão da conexão. Em seguida, o algoritmo congestion avoidance é executado e não o slow start.

O porquê de não usar o slow start neste caso é que o recebimento de ACKs duplicados diz que o segmento deixou a camada física e está no buffer do nó de destino. Isso diz que ainda temos dados trafegando entre os dois nós, então não é necessário reduzir o fluxo abruptamente usando o slow start.















About Anônimo

    Blogger Comment
    Facebook Comment

0 comentários:

Postar um comentário