O Controle de Erro e o Controle de Fluxo são os dois mecanismos de regulação mais críticos implementados pelo serviço de Circuito Virtual (especialmente o TCP) na Camada de Transporte. Enquanto ambos envolvem a regulação da transmissão de dados, eles resolvem problemas diferentes:
- O Controle de Erro lida com a confiabilidade: garante que os dados enviados cheguem íntegros e na ordem correta, apesar da rede subjacente ser não confiável.
- O Controle de Fluxo lida com a velocidade: garante que o remetente não envie dados mais rápido do que o receptor consegue processar, evitando o congestionamento do buffer de memória do receptor.
Juntos, esses mecanismos criam um canal de comunicação onde a integridade dos dados é preservada e o sistema opera estável, sem sobrecargas localizadas.
1. Controle de Erro (Error Control)
O objetivo do controle de erro é transformar o serviço não confiável da Camada de Rede (IP) em um canal livre de erros para a aplicação. Ele deve detectar pacotes corrompidos, recuperar pacotes perdidos, reordenar pacotes que chegaram fora de sequência e eliminar duplicatas.
A. Detecção de Erros: Checksum
A primeira linha de defesa é a detecção. O cabeçalho TCP possui um campo Checksum de 16 bits.
- Escopo: Diferente do IP (que verifica apenas o cabeçalho), o TCP calcula o checksum sobre um pseudo-cabeçalho (que inclui endereços IP origem/destino), o cabeçalho TCP e os dados (payload).
- Ação: Se o receptor calcula o checksum e o valor não corresponde, o segmento é corrompido. O receptor o descarta silenciosamente. A recuperação ocorrerá via ausência de ACK (retransmissão).
B. Numeração de Sequência (Sequence Numbers)
Para ordenar os dados e detectar perdas, cada byte do fluxo de dados é numerado sequencialmente.
- Função: O número de sequência do cabeçalho TCP indica o número do primeiro byte de dados contido naquele segmento.
- Remontagem: Se o receptor recebe o segmento com os bytes 1000-1499, mas ainda não recebeu o 500-999, ele sabe que existe uma “lacuna” (hole). Ele guarda o segmento 1000-1499 no buffer e aguarda o anterior.
C. Confirmação de Recebimento (ACK - Acknowledgment)
O receptor envia feedback contínuo para o remetente sobre o que recebeu com sucesso.
- ACK Cumulativo: O TCP usa um mecanismo de ACK cumulativo. Se o receptor envia um ACK com número de confirmação
2001, ele está dizendo: “Recebi todos os bytes até o 2000 com sucesso. Estou aguardando o byte 2001”. Isso confirma implicitamente o recebimento de todos os bytes anteriores.
D. Retransmissão (Retransmission)
A parte ativa do controle de erro é a recuperação de falhas. O remetente deve reenviar o que foi perdido.
- Retransmissão por Timeout (RTO - Retransmission Timeout):
- O remetente inicia um temporizador sempre que envia um segmento.
- Se o temporizador expirar antes de o ACK chegar, o remetente assume que o segmento foi perdido e o reenvia.
- O valor do timeout é dinâmico e se ajusta baseado no RTT (Round Trip Time) medido da rede.
- Retransmissão Rápida (Fast Retransmit):
- Se o remetente recebe 3 ACKs duplicados consecutivos (ex: três ACKs para o byte 1000 quando ele já esperava o 1500), ele infere que o segmento 1500 foi perdido.
- Ele retransmite o segmento 1500 imediatamente, sem esperar o timer expirar. Isso acelera a recuperação em redes rápidas.
2. Controle de Fluxo (Flow Control)
O objetivo do controle de fluxo é evitar que o receptor seja sobrecarregado. Mesmo que a rede seja rápida e o remetente tenha muita largura de banda, o computador receptor pode ter uma CPU lenta ou pouca memória RAM disponível para processar os dados recebidos.
Se o remetente enviar dados mais rápido do que o receptor pode ler, o buffer de recepção do receptor encherá e começará a descartar novos pacotes, desperdiçando largura de banda com dados que seriam perdidos de qualquer forma.
A. O Mecanismo de Janela Deslizante (Sliding Window)
O controle de fluxo no TCP é implementado através do protocolo de Janela Deslizante. O remetente só pode enviar um certo número de bytes sem ter recebido confirmação (ACK). Esse número é o tamanho da “janela”.
- rwnd (Receiver Window): O receptor anuncia em todo segmento TCP (no campo
Window Size) quantos bytes de espaço livre ele ainda tem no seu buffer de recepção. Este valor é orwnd.
B. O Processo de Regulação
- Anúncio de Capacidade: O receptor diz ao remetente: “Eu tenho espaço para mais
Xbytes”. - Envio Limitado: O remetente mantém uma variável
cwnd(congestion window - controle de congestionamento) e respeita a regra:Tamanho do Envio = min(rwnd, cwnd). O remetente nunca envia mais dados do que o receptor disse que pode aguentar. - Esvaziamento do Buffer: Quando a aplicação no receptor lê dados do buffer, espaço é liberado.
- Atualização: O receptor envia novos ACKs com o valor atualizado do
rwnd, aumentando a janela e permitindo que o remetente acelere novamente.
C. O Problema da Janela Zero (Zero Window)
Se a aplicação no receptor estiver muito lenta e o buffer encher completamente, o receptor enviará um rwnd = 0.
- Bloqueio: O remetente deve parar de enviar novos dados de usuário imediatamente.
- Manutenção da Conexão: O remetente entra em modo de persistência. Ele envia pequenos segmentos de teste chamados Zero Window Probes (sondas de janela zero) para verificar se o receptor já liberou algum espaço.
- Desbloqueio: Assim que o receptor tiver espaço, ele responde à sonda com um novo
rwnd > 0, e o remetente retoma a transmissão normal.
Resumo Comparativo
| Característica | Controle de Erro (Error Control) | Controle de Fluxo (Flow Control) |
|---|---|---|
| Foco | Confiabilidade dos dados | Velocidade de transmissão |
| Protege contra | Perda de pacotes, corrupção, desordem | Sobrecarga do buffer do receptor |
| Mecanismo Principal | ACKs, Números de Sequência, Timers | Janela Deslizante (rwnd) |
| Quem controla? | Acordo mútuo ( ACKs indicam sucesso/falha) | Receptor (dita a velocidade ao remetente) |
| Feedback | “Recebi até X” ou “Faltou Y” | “Tenho espaço para Z bytes” |
Ambos os mecanismos operam em conjunto no cabeçalho TCP. O remetente envia dados baseando-se no menor valor entre o que a rede aguenta (Controle de Congestionamento) e o que o receptor aguenta (Controle de Fluxo), enquanto o Controle de Erro garante que o que chegou é o que foi enviado.