No contexto do protocolo UDP, a unidade de transferência de dados é chamada de Datagrama. Diferente do TCP, que utiliza o termo “Segmento” e opera com um fluxo contínuo de bytes, o UDP opera com blocos de dados distintos e isolados.
O Datagrama UDP é a PDU (Protocol Data Unit) da Camada de Transporte quando se utiliza o protocolo UDP. Ele consiste em um cabeçalho UDP seguido imediatamente pelos dados da aplicação (payload). Este datagrama é, por sua vez, encapsulado dentro de um datagrama IP para ser enviado através da rede.
1. Natureza da Unidade: Independência e Autonomia
A característica mais importante do Datagrama UDP é sua autonomia.
- Sem Relacionamento: Se uma aplicação envia três Datagramas UDP consecutivos (A, B e C) para o mesmo destino, a rede não sabe que eles estão relacionados. Eles são tratados como três mensagens separadas e independentes.
- Self-Contained: Cada datagrama carrega todas as informações necessárias para ser entregue e processado (portas de origem e destino, comprimento e checksum). Ele não depende de informações contidas em datagramas anteriores ou posteriores.
2. Preservação dos Limites de Mensagem (Message Boundaries)
O uso do Datagrama como unidade tem uma implicação direta na forma como a aplicação envia e recebe dados: os limites são preservados.
- Contraste com o TCP: No TCP (modelo de fluxo), se a aplicação escrever 100 bytes e depois escrever mais 200 bytes, o TCP pode fundir isso em um pacote de 300 bytes ou dividi-lo em pedaços de 50 bytes. A aplicação receptor lê um fluxo contínuo e não sabe onde uma “escrita” terminou e a próxima começou.
- Comportamento do UDP: No UDP, o que é enviado é o que é recebido como uma unidade distinta. Se a aplicação enviar um datagrama de 100 bytes, a aplicação receptor receberá um datagrama de 100 bytes (se ele chegar). Se enviar outro de 200 bytes, receberá outro de 200 bytes.
- Leitura (Read): Na programação com sockets UDP, uma chamada de leitura (
recvfrom) lê exatamente um datagrama completo. Se o buffer da aplicação for menor que o tamanho do datagrama UDP recebido, o excesso é truncado e perdido (dependendo do sistema operacional), mas nunca é combinado com o próximo datagrama.
3. Estrutura do Datagrama UDP
O Datagrama UDP é composto por duas partes principais:
- Cabeçalho UDP (8 bytes): Contém as informações de controle.
- Porta de Origem (16 bits): Identifica o processo remetente.
- Porta de Destino (16 bits): Identifica o processo receptor.
- Comprimento (16 bits): Tamanho total do cabeçalho + dados.
- Checksum (16 bits): Verificação de erros.
- Dados (Payload): A informação real da aplicação.
- Tamanho Variável: O payload pode ter tamanho variável, de 0 bytes até um máximo teórico de 65.507 bytes (65.535 bytes do datagrama IP menos 20 bytes do cabeçalho IP e 8 bytes do cabeçalho UDP). Na prática, o tamanho é limitado pelo MTU da rede física (geralmente 1500 bytes), resultando em um payload máximo seguro de cerca de 1472 bytes.
4. Encapsulamento
Para viajar pela rede, o Datagrama UDP é encapsulado dentro de um datagrama IP:
+-------------------+
| Cabeçalho IP | (Camada 3)
| (Src/Dest Addr) |
+-------------------+
| Cabeçalho UDP | <-- Início do Datagrama UDP (Camada 4)
| (Src/Dest Port) |
+-------------------+
| Dados (Payload) |
| (Aplicação) |
+-------------------+
O protocolo IP vê todo o bloco (Cabeçalho UDP + Payload) apenas como dados. Ele não analisa as portas; essa é a função exclusiva da Camada de Transporte no destino.
5. Unicidade na Terminologia
É importante distinguir as unidades em diferentes camadas para evitar confusão:
- Camada 2 (Enlace): A unidade é o Quadro (Frame).
- Camada 3 (Rede - IP): A unidade é o Datagrama IP.
- Camada 4 (Transporte - UDP): A unidade é o Datagrama UDP (ou simplesmente datagrama, quando o contexto é transporte).
- Camada 4 (Transporte - TCP): A unidade é o Segmento.
O termo “Datagrama” é compartilhado entre IP e UDP porque ambos seguem a filosofia de “melhor esforço” sem conexão, mas o Datagrama UDP é um subconjunto lógico contido dentro do Datagrama IP.