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.

Quer aprender tudo sobre Redes de Computadores? Minha dica é o livro Redes de Computadores – 2ª Edição, de Gabriel Torres, que você pode adquirir em formato digital com preço promocional clicando na capa do livro a seguir:Curso de Redes de Computadores - Gabriel Torres

 

Colabore com a Bóson Treinamentos

Ajude o canal adquirindo meus cursos na Udemy:

Adquira também livros e outros itens na loja da Bóson Treinamentos na Amazon e ajude o canal a se manter e crescer: https://www.amazon.com.br/shop/bosontreinamentos

 

Sobre Fábio dos Reis (1195 Artigos)
Fábio dos Reis trabalha com tecnologias variadas há mais de 30 anos, tendo atuado nos campos de Eletrônica, Telecomunicações, Programação de Computadores e Redes de Dados. É um entusiasta de Ciência e Tecnologia em geral, adora Viagens 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.

Escreva um comentário

Seu e-mail não será divulgado


*