O principal diferencial do TCP em relação ao UDP é que o TCP é um Protocolo de Transporte Confiável. Ele garante que os dados submetidos pela aplicação cheguem ao destino sem erros, sem duplicação e na ordem correta, mesmo que a rede IP subjacente seja instável.
1. O Mecanismo de Confirmação (ACK)
O TCP utiliza o conceito de Confirmação Positiva com Retransmissão:
- Sempre que o receptor recebe um segmento de dados, ele envia de volta um pacote de controle chamado ACK (Acknowledgment).
- O ACK contém o número do Próximo Byte Esperado pelo receptor.
- Se o emissor não receber o ACK dentro de um determinado tempo (Timeout), ele assume que o segmento foi perdido e o Retransmite automaticamente.
2. Controle de Fluxo (Janela Deslizante)
Para evitar que um emissor rápido sature um receptor lento, o TCP utiliza a Janela Deslizante (Sliding Window):
- O receptor informa no cabeçalho TCP o tamanho do seu buffer disponível (campo Window Size).
- O emissor só pode enviar a quantidade de bytes que caibam nessa janela sem receber um novo ACK.
- Se a janela chegar a zero, o emissor para de enviar e aguarda o receptor processar os dados.
3. Controle de Congestionamento
Além do fluxo entre dois hosts, o TCP protege a Rede Inteira contra congestionamentos:
- Algoritmos como Slow Start e Congestion Avoidance monitoram a perda de pacotes na rede.
- Se o TCP detectar que a rede está lenta ou perdendo pacotes, ele reduz drasticamente a taxa de envio para aliviar o tráfego global da Internet.
[!IMPORTANT]
A confiabilidade tem um custo: a Latência. O processo de handshakes, confirmações e retransmissões torna o TCP mais lento que o UDP. Por isso, aplicações de tempo real (como voz e vídeo) preferem o UDP, aceitando pequenas perdas em troca de velocidade.