Curso de Redes – Protocolo TCP – Controle de Fluxo e Controle de Erros

Protocolo TCP - Controle de Fluxo e Controle de Erros

Controle de Fluxo

Sempre que um dispositivo de comunicação produz informação que será consumida por um outro dispositivo de comunicação, deve haver um balanço entre a taxa de produção de um e a taxa de consumo do outro. Se um dos dispositivos transmite informações em uma taxa superior à taxa de consumo do outro dispositivo, provavelmente mensagens terão de ser descartadas. O contrário também pode ocorrer - um dispositivo transmissor enviando informações em uma taxa muito inferior à taxa que o dispositivo de destino pode suportar - fazendo com que nesse caso haja desperdício de capacidade do sistema. Deve haver um balanço para que o sistema seja eficiente. No que tange à taxa de transmissão do primeiro caso, o balanço pode ser alcançado usando-se técnicas de Controle de Fluxo, para que seja evitada a perda de dados no dispositivo de destino da transmissão.

O Controle de Fluxo deve ser empregado quando a transmissão de dados entre dois dispositivos se dá da forma que denominamos Push, na qual o transmissor simplesmente envia dados para o receptor assim que eles estão disponíveis, sem que o receptor os tenha requisitado. Neste caso, o receptor pode acabar recebendo dados em uma taxa muito superior à que ele suporta, e então dados acabam por serem descartados. Para que isso não ocorra, o receptor precisa pedir ao transmissor que pare de enviar dados momentaneamente, até que os dados recebidos sejam processados, e o receptor esteja pronto para receber mais dados. Quando o receptor requisita os dados não há a necessidade de controle de fluxo, e chamamos essa forma de transmissão de modo Pull.

Controle de Fluxo via Push na camada de transporte TCP

Para que o controle de fluxo possa ser implementado, são usados Buffers. Um Buffer é um local na memória que armazena pacotes conforme são recebidos. Existem dois buffers para realização de controle de fluxo: uma na camada de transporte do host transmissor, e outro na camada de transporte do host receptor. O primeiro buffer armazena dados provenientes da camada de aplicação do mesmo host, e o segundo buffer armazena os dados recebidos a partir da rede, no host receptor (de destino). Quando o buffer da camada de transporte do host de destino está cheio, ele informa à camada de transporte do transmissor que ela deve parar de enviar pacotes. Quando o buffer começa a se esvaziar, ele informa à camada de transporte do transmissor que ele pode continuar a enviar dados.

O mesmo ocorre com o buffer da camada de transporte do transmissor: Quando ele está cheio, informa à camada de aplicação do transmissor que ela deve parar de enviar mensagens. Quando o buffer começa a se esvaziar, ele informa à camada de aplicação que pode continuar a enviar as mensagens.

Controle de Erros

A camada de Internet (Rede) é dita como "não-confiável", o que significa que não há garantia da entrega de pacotes entre dois hosts que se comunicam entre si. Para que uma comunicação possa ser considerada confiável, a camada de transporte pode implementar mecanismos para garantir a entrega desses pacotes durante uma transmissão. Chamamos a esse processo de "Controle de Erros", e ele consiste, basicamente, em detectar e descartar pacotes corrompidos, acompanhar pacotes descartados e perdidos (para reenviá-los), verificar a existência de pacotes duplicados (e descartá-los), e guardar em buffer pacotes que cheguem fora de ordem, até que seja possível reordená-los.

O controle de erros é realizado pela camada de transporte do host de destino dos dados, e funciona informando à camada de transporte do transmissor a repeito de problemas que venham a ocorrer. Uma das informações que são usadas para realizar o controle de erros são o Números de Sequência, que são números usados para numerar os segmentos enviados. Esse número é gravado em um dos campos do cabeçalho do segmento na camada de transporte, e quando um pacote é corrompido ou perdido, a camada de transporte do receptor detecta a falta do segmento respectivo e pode informar ao transmissor para que ele reenvie o segmento faltante. Já segmentos duplicados são facilmente detectados, pois tem o mesmo número de sequência. E para colocá-los em ordem basta também observar esse número, pois os segmentos são numerados sequencialmente.

Quando um ou mais segmentos chegam corretamente ao seu destino, o host receptor pode enviar uma mensagem ACK (acknowledgement / confirmação) para o host transmissor, informando que recebeu os pacotes. Pacotes perdidos podem ser detectados pelo próprio transmissor com o uso de um timer, que é ativado ao enviar um pacote. Quando esse timer expira, se uma mensagem ACK não tiver sido recebida de volta, o transmissor reenvia o pacote.

Na próxima lição veremos como os controles de fluxo e de erros podem ser combinados e para que serve essa combinação.

Próximo: Janela Deslizante (Sliding Window)

 

Sobre Fábio dos Reis (1256 Artigos)
Fábio dos Reis trabalha com tecnologias variadas há mais de 25 anos, tendo atuado nos campos de Eletrônica, Telecomunicações, Programação de Computadores e Redes de Dados. É um entusiasta de Unix, Linux e Open Source em geral, adora Eletrônica e Música, e estuda idiomas, além de ministrar cursos e palestras sobre diversas tecnologias em São Paulo e outras cidades do Brasil.
Contato: Website

Escreva um comentário

Seu e-mail não será divulgado


*