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.
Fontes:
0 comentários:
Postar um comentário