Transmission Control Protocol TCP
Controle de fluxo
Janela deslizante
• O protocolo básico usado pelo TCP é chamado Janela Deslizante.• Quando envia um segmento, o TCP dispara um temporizador.
– O tempo em que ele aguardará por uma confirmação.
– Com que frequência os pacotes são retransmitidos.
• Quando o segmento chega, o receptor retorna um segmento com número de confirmação igual ao valor do próximo byte que ele espera receber.– Esse segmento pode conter dados ou não de acordo com a
circunstância.
• Desvincula a confirmação da alocação de buffers pelo receptor.
Impasses
– Suponha que o receptor tenha uma janela de 4.096 bytes.
• Se o transmissor enviar um segmento de 2048 bytes e este for recebido de forma correta, o receptor confirmará o segmento e anunciará uma janela de 2048 bytes.
Impasses (2)
• Agora o transmissor envia outros 2048 bytes que são confirmados e a janela passa a ter tamanho zero.
• O transmissor deve esperar até que o processo da aplicação receptora retire alguns bytes do buffer e anuncie o novo tamanho para que o transmissor possa enviar mais bytes.
Exceções
• Janela de tamanho zero.– Duas exceções:
• Dados urgentes.– Exemplo: Encerramento da conexão.
• Windows Probe.– Transmissor envia um segmento de um byte para forçar
o receptor a anunciar novamente o tamanho da janela.
Confirmações adiadas
• Retardar as confirmações (e atualizações de janelas) em 500 ms esperando algum dado que lhe dê carona.
Algoritmo de Nagle
• Como sabemos, o comando telnet envia um único byte de dados por pacote transmitido.– Mais um cabeçalho TCP de 20 bytes.– Mais um cabeçalho IP de 20 bytes.
• 41 bytes de dados.
• Normalmente isto não representa um problema em redes pequenas, porém, em redes grandes há uma tendência de congestionamento.
• Pacotes pequenos podem representar um problema.
• Uma solução simples e elegante foi proposta em Nagle [1984].
11/04/23 André Luiz Silva 8
Conceito do Nagle
• Este algoritmo afirma que somente um único pequeno segmento pode ser enviado até o recebimento do ACK correspondente.– Um segmento TCP pequeno é aquele que não
preenche o espaço inteiro do payload (campo de dados).
• Nenhum próximo pequeno segmento pode ser enviado até a chegada do ACK do primeiro segmento enviado.
• Pequenas porções de dados são coletadas pelo TCP e enviadas em um único segmento simples, quando o ACK do primeiro segmento é recebido.
11/04/23 André Luiz Silva 9
Desabilitando o Nagle
• Em certos casos, torna-se necessário desabilitar o algoritmo Nagle.– X windows.
• Pequenos movimentos do mouse.
– Teclas de funções.• Vários comandos são enviados.
• Os soquetes API usam a opção TCP_NODELAY para desabilitar o algoritmo. Mogul e Minshall (2001).
11/04/23 André Luiz Silva 10
Síndrome do Janelamento inútil
• Clark, 1982.
• Dados são passados para o transmissor em grandes blocos, mas o receptor lê os dados somente um byte por vez.– Aplicação interativa.
• Inicialmente o buffer do receptor está cheio.– Janela zero e o transmissor sabe disso.
Síndrome do Janelamento inútil (2)
Síndrome do Janelamento inútil (3)
• Em seguida a aplicação lê um caractere.– Receptor envia uma confirmação com janela
de um byte.
• Transmissor envia um byte e o buffer enche outra vez.– Receptor confirma e anuncia janela = 0.
• Situação se repete indefinidamente.
Solução
• A solução é evitar que o receptor envie uma atualização de janela de um byte.– O receptor passa a esperar:
• Um tamanho de janela de um segmento (conforme foi acordado no início) para confirmar o segmento recebido ou,
• Que o seu buffer tenha metade de sua capacidade livre.
• O que for menor.
Conclusões
• O algoritmo de Nagle e a solução de Clark são complementares.
• Nagle tenta resolver o problema da aplicação enviar apenas um byte por vez.
• Clark tenta resolver o problema da aplicação retirar apenas um byte por vez.
Segmentos fora de ordem
• Receptor armazena os segmentos até que possam ser passados para a aplicação em ordem.
• Se o receptor receber os segmentos 1, 2, 4, 5, 6 e 7, ele confirma até o último byte do segmento 2.
• Quando o transmissor sofrer um timeout, ele retransmite o segmento 3.
• O receptor ao recebe-lo poderá confirmar até o segmento 7.
Tráfego de dados
• Taxa média de dados– Quantidade de bits enviados dividida pelo
intervalo de tempo decorrido durante a transmissão x 100.
11/04/23 Profº André Luiz Silva 17
Congestionamento
• O congestionamento pode ocorrer se a carga (quantidade de pacotes enviados para a rede) superar a capacidade da rede (quantidade de pacotes que uma rede consegue controlar).
• O congestionamento ocorre em sistemas que envolvem algum tipo de espera.
11/04/23 Profº André Luiz Silva 18
Soluções
• A solução é diminuir a taxa de transmissão dos dados.– A idéia é não incluir um novo pacote na rede
até que o anterior a tenha deixado.
• O TCP tenta alcançar esse objetivo manipulando dinamicamente o tamanho da janela.
11/04/23 Profº André Luiz Silva 19
Detectando o congestionamento
• O primeiro passo é detectar o congestionamento– Pacotes perdidos devido a ruídos na rede.– Esgotamento de buffers nos roteadores.
– Atualmente todos os algoritmos TCP que atuam na Internet presumem que os timeouts são provocados por congestionamentos.
11/04/23 Profº André Luiz Silva 20
Atrasos em uma rede
• De empacotamento
• De processamento
• De propagação
11/04/23 Profº André Luiz Silva 21
Mecanismos de controle de congestionamento
• Fim-a-fim– A camada de rede não oferece nenhum
suporte explícito à camada de transporte– A perda de segmentos TCP é tomada como
uma indicação de congestionamento.
• Assistido pela rede– A rede informa sobre o congestionamento
• Roteador envia ao remetente um pacote de congestionamento (choke packet).
• Roteador marca um campo em um pacote indicando o congestionamento.
11/04/23 Profº André Luiz Silva 22
Controle de congestionamento em malha aberta
• Evitam o congestionamento antes que ele ocorra.– Política de retransmissão– Política de janelas– Política de confirmação imposta pelo receptor– Política de descarte de pacotes– Política de admissão (qualidade de serviço)
11/04/23 Profº André Luiz Silva 23
Reação do TCP à congestionamentos
• No momento do estabelecimento da conexão (apresentação em três vias) o tamanho da janela é escolhido.
• O receptor especifica o tamanho da janela de acordo com o espaço livre em seu buffer.
• Se o transmissor se mantiver dentro do tamanho da janela, não haverá problemas causados por sobrecargas nos buffers do receptor.
11/04/23 Profº André Luiz Silva 24
Causas dos congestionamentos
• Dois problemas potenciais:– A capacidade da rede– A capacidade do receptor
• Duas soluções:• A janela de recepção (RcvWindow)• A janela de congestionamento
(CongWin)
11/04/23 Profº André Luiz Silva 25
Duração do temporizador
• RTT (Round Trip Time).– Tempo de viagem de ida e volta do
pacote.
• RTO (Retransmission Timeout).– Temporizador de retransmissão.
• SRTT (Smoothed Round-Trip Time).– Melhor estimativa atual do tempo de ida e
volta ao destino.
11/04/23 Profº André Luiz Silva 26
SRTT (Smoothed Round Trip Time)
• Estimativa relacionada ao RTT.
• SRTT = α SRTT + (1 – α) RTT.
• α é um fator de nivelamento que determina a rapidez com que os valores antigos são esquecidos.
– Ou seja, uma média ponderada que leva em consideração principalmente os últimos RTTs.
• Normalmente α = 7/8.