O que sabemos sobre TCP vs UDP? Internet, blockchain, computação em nuvem — não importa a área, os computadores são mais eficientes quando estão conectados entre si. Mas enviar dados — e garantir que cheguem íntegros ao destino — exige uma interconexão complexa de redes e nós. Antes de entrar nos detalhes dos protocolos Transport Control Protocol (TCP) e User Datagram Protocol (UDP), vale dar um passo atrás.
Todos os modelos de rede descrevem basicamente o mesmo processo: como os bits de dados percorrem cabos na forma de pulsos elétricos ou passam por fibra óptica em padrões de luz. E, do outro lado, como esses bits são recebidos e remontados.
Tecnicamente, dá para transferir dados de um aplicativo em um computador para outro usando um único protocolo. Só que esse método seria extremamente frágil: qualquer mudança de hardware exigiria alterar todo o aplicativo e o software do protocolo. Para alcançar a flexibilidade necessária na conexão entre dispositivos, as redes usam camadas empilhadas de protocolos diferentes. Cada camada tem uma função específica e interage com as camadas imediatamente acima e abaixo dela.
Hoje, o modelo mais abrangente é o Open System Interconnection (OSI). UDP e TCP recortam e reorganizam algumas dessas camadas, então começar pelo OSI é o melhor ponto de partida para se aprofundar.
O modelo OSI em poucas palavras
Camada física
No nível mais básico, essa camada reúne os elementos mecânicos do envio e da recepção de dados. É ela que determina como pinos e fios codificam os 0s e 1s em um sinal, enviado ao meio local em forma de luz, eletricidade ou ondas de rádio.
Camada de enlace de dados (DLL)
A camada de enlace funciona como intermediária entre os componentes físicos do dispositivo e os pacotes de dados da rede. Os dados da camada física não têm estrutura — e cabe a essa camada empacotá-los em quadros. O fluxo contínuo de dados enviados é agrupado em blocos, num processo chamado multiplexação. Aqui, cada pacote recebe um cabeçalho que identifica remetente e destino.
Camada de rede
Com os pacotes prontos, a camada de rede (ou de internet) consegue roteá-los de um dispositivo a outro pela rede. Para isso, atribui a cada dispositivo um endereço IP único, usado para identificá-lo e definir a rota que os pacotes devem seguir até chegar lá.
Camada de transporte
Entre a camada de rede e a de sessão, a camada de transporte cuida da entrega de mensagens a um host. Ela permite que aplicativos e serviços rodem mais rápido, já que os processos seguintes não precisam considerar as particularidades da rede de comunicação de cada dispositivo. Essa camada é a base dos protocolos UDP e TCP que veremos a seguir.
Camada de sessão
A camada de transporte não se importa se dois computadores já se comunicaram antes — ela só leva e traz pacotes. A camada de sessão organiza o tráfego com início e fim lógicos.
Camada de apresentação
O volume desses pacotes pode ser altíssimo. A camada de apresentação se concentra em codificar e comprimir os pacotes para reduzir o consumo de banda antes que saiam do dispositivo remetente.
Camada de aplicação
Por fim, os dados recebidos (ou prestes a ser enviados) precisam chegar ao usuário. O OSI é um modelo útil, mas vale lembrar: nenhum protocolo moderno segue à risca os contornos de todas as 7 camadas. Os protocolos TCP e UDP, por exemplo, tratam apenas das camadas de rede e de transporte.
O que é TCP
O Transport Control Protocol foi, essencialmente, o primeiro protocolo de rede. Criado pouco depois do surgimento da internet, em 1981, sua primeira versão se dedicava a segmentar dados em pacotes. Nas décadas seguintes, evoluiu até virar a pilha TCP/IP que é padrão hoje. No TCP, os pacotes se dividem em 4 camadas: enlace de dados, rede, transporte e aplicação.
Como o nome sugere, o TCP tem maior influência na camada de transporte. Antes de qualquer envio de dados, ele estabelece uma breve conexão entre dois endpoints da rede por meio de um handshake de três vias.
Primeiro, o cliente inicia a conexão enviando uma mensagem SYN (sincronizar), na forma de um número aleatório. Ao recebê-la, o servidor confirma com um SYN-ACK (que apenas soma 1 ao número do cliente). Por fim, o cliente confirma esse SYN-ACK com uma mensagem ACK. Esse aperto de mão virtual garante que remetente e destinatário estão prontos para se comunicar e sabem que o canal foi estabelecido. Se a porta de destino estiver offline ou indisponível, a mensagem ACK dá lugar a um pacote TCP RST (reset).
E não é só o início do processo que depende de confirmação dos dois lados: o encerramento em duas vias também confirma quando o cliente ou o servidor terminou de enviar dados. No mesmo padrão, depois que todos os dados relevantes foram transmitidos, o cliente envia um segmento FIN na forma do próprio número de sequência. De novo, o servidor confirma. Quando o servidor recebe todos os dados, é a vez dele enviar um pacote FIN, que é confirmado antes do encerramento da conexão.
A importância do IP
Algo é decisivo nesse processo: toda conexão precisa de um destino definido antes do envio. Só depois disso o handshake TCP acontece. É aí que o Internet Protocol (IP) entra como o outro lado da moeda TCP/IP.
Todo dispositivo ou domínio conectado à internet tem um endereço IP único. No cabeçalho de cada pacote está o endereço IP do destinatário pretendido, o que faz os dados chegarem aonde precisam. Identificado o endereço IP, o processo TCP pode iniciar a transferência. Mas os dados recebidos precisam chegar à porta certa — por isso os pacotes TCP incluem informações de porta. Pense no IP como o CEP e nos dados de porta do TCP como o número da casa. Os pacotes TCP também trazem um número de sequência, parecido com páginas numeradas de uma carta: ele indica em que ordem os pacotes foram enviados.
O TCP/IP virou o padrão para transmissão de dados segura e confiável pela internet, mas uma grande vantagem da abordagem do IP é a flexibilidade — e o TCP não é o único jeito de levar dados do ponto A ao ponto B.
O que é UDP
O User Datagram Protocol (UDP) é um protocolo leve de transporte de dados que funciona sobre as bases do IP. Em vez do longo handshake do TCP, o UDP envia pacotes pequenos e independentes, chamados datagramas, sem checar antes uma conexão. Pode parecer arriscado, mas o UDP foi feito para perder informação sem causar uma falha crítica de comunicação.
Cada datagrama é uma unidade autossuficiente e não carrega informação sobre os dados que vêm antes ou depois. Assim, em vez de processar uma fila de pacotes atrasados, o servidor atende às solicitações de forma totalmente linear. O tamanho dos pacotes do UDP ajuda nesse processo. Lembre que os pacotes TCP trazem verificação de erros e numeração sequencial embutidas: ao remover todos esses extras opcionais, os datagramas UDP ficam com uma fração do tamanho. Dados tão enxutos são processados em velocidade altíssima.
Por isso, o UDP aparece em serviços que precisam de processamento quase em tempo real. Pense em streaming de vídeo e jogos: podem exigir muitos datagramas UDP, mas a velocidade é essencial para uma boa experiência. E se um pacote cai ou se perde, o efeito prático é, no máximo, um pixel faltando por um quadro. Ligando um nome de domínio a um endereço web reconhecível, as consultas de Domain Name Service (DNS) também usam UDP. São requisições minúsculas, com um único par de pergunta e resposta — mas precisam ser rápidas, o que torna o UDP um caso de uso natural.
Diferenças entre TCP e UDP, recurso por recurso
| Recurso | UDP (User Datagram Protocol) | TCP (Transmission Control Protocol) |
| Conexão | Sem conexão; não estabelece uma conexão antes de enviar dados. | Orientado a conexão; estabelece um handshake de três vias antes da transferência. |
| Confiabilidade | Não garante entrega, ordem nem verificação de erros. | A arquitetura dos pacotes garante a entrega na ordem correta. |
| Velocidade | Rápida. | Mais lenta que a do UDP por causa dos mecanismos extensos de verificação de erros. |
| Controle de fluxo de dados | Sem controle de fluxo; envia dados na velocidade em que o remetente gera e a rede suporta. | O controle de fluxo é feito por técnicas de janelamento que ajustam o fluxo de dados. |
| Uso | Usado em aplicações sensíveis ao tempo, em que perder alguns dados é tolerável (por exemplo, streaming de áudio/vídeo ao vivo). | Usado quando a entrega confiável dos dados é essencial (por exemplo, navegação na web e e-mail). |
| Tamanho do cabeçalho | Cabeçalho menor (8 bytes). | Cabeçalho maior (20 bytes no mínimo). |
| Sequenciamento | Não sequencia os pacotes de dados. | Sequencia os pacotes de dados para garantir a entrega ordenada. |
Para fechar, um ponto sobre segurança
Na hora de escolher entre UDP e TCP nos seus projetos, lembre-se: a velocidade do UDP é atraente, mas ele é naturalmente mais vulnerável a problemas de segurança, como spoofing e ataques de negação de serviço. O handshake do TCP impediria que endereços IP forjados causassem estrago, só que o TCP também não é imune. Nos últimos anos, ataques de amplificação DDoS sequestraram esse mecanismo de ida e volta para deixar o servidor esperando por uma mensagem ACK final que nunca chega.
Para uma explicação visual de como TCP e UDP se diferenciam, veja TCP vs. UDP: qual é a diferença?