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]. 05/11/2015 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. 05/11/2015 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). 05/11/2015 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. 05/11/2015 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. 05/11/2015 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. 05/11/2015 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. 05/11/2015 Profº André Luiz Silva 20 Atrasos em uma rede • De empacotamento • De processamento • De propagação 05/11/2015 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. 05/11/2015 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) 05/11/2015 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. 05/11/2015 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) 05/11/2015 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. 05/11/2015 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.