O campo Length (Comprimento) é um campo de 16 bits localizado no cabeçalho UDP. Sua função é especificar o tamanho total, em bytes, do datagrama UDP, incluindo tanto o cabeçalho quanto os dados (payload).

Este campo é essencial para que o receptor saiba exatamente onde o datagrama termina e onde os dados da aplicação começam, já que o UDP não possui um campo indicador de “fim de dados” como o TCP possui em seu fluxo contínuo.

1. Escopo do Cálculo: Cabeçalho + Payload

Diferente de alguns protocolos onde o campo de comprimento indica apenas o tamanho dos dados, no UDP o valor do campo Length inclui tudo o que está dentro da estrutura UDP:

  • Cabeçalho UDP (fixo 8 bytes): Sempre contado.
  • Payload (Dados da Aplicação): Variável.

Portanto, a fórmula básica é:
$$ \text{Length} = 8 \text{ (cabeçalho)} + \text{Tamanho do Payload} $$

Exemplo Prático:
Se uma aplicação envia 500 bytes de dados via UDP:
* Payload = 500 bytes.
* Cabeçalho UDP = 8 bytes.
* Campo Length = 508 bytes.

2. Faixa de Valores e Limites Teóricos

Como o campo possui 16 bits, ele pode representar valores de 0 a 65.535.

  • Valor Mínimo (8): O menor valor possível é 8. Isso representa um datagrama UDP válido contendo apenas o cabeçalho e zero bytes de dados (payload vazio). Isso é utilizado em alguns protocolos de sinalização ou para “keep-alive” (manter a conexão ativa em túneis).
  • Valor Máximo Teórico (65.535): O limite matemático do campo é 65.535 bytes. Isso incluiria 65.527 bytes de dados.
  • Limitação de IP: É importante notar que o datagrama UDP é encapsulado dentro de um datagrama IP. O IP tem seu próprio limite de 65.535 bytes. Portanto, o datagrama UDP nunca pode ser maior que o datagrama IP que o carrega.

3. Limitação Prática: MTU e Fragmentação

Embora o campo Length permita teoricamente valores enormes, na prática, o tamanho dos datagramas UDP é severamente limitado pela MTU (Maximum Transmission Unit) da Camada de Enlace (Camada 2).

  • MTU Padrão: Em redes Ethernet (as mais comuns), a MTU é de 1500 bytes.
  • Custo do Encapsulamento: Para enviar o datagrama UDP pela rede, ele é colocado dentro de um quadro IP.
    • Cabeçalho IP (IPv4) = 20 bytes.
    • Cabeçalho UDP = 8 bytes.
    • Espaço disponível para dados (Payload UDP) = $1500 - 20 - 8 = \mathbf{1472 \text{ bytes}}$.
  • Fragmentação IP: Se a aplicação tentar enviar um datagrama UDP com Length maior que 1472 bytes (em uma Ethernet padrão), o pacote IP será fragmentado pela Camada de Rede. O datagrama UDP original será partido em múltiplos pacotes IP menores para atravessar a rede e remontado no destino.
  • Problemas da Fragmentação:
    1. Ineficiência: Se um fragmento se perder, todo o datagrama UDP é descartado.
    2. Custo de Processamento: A remontagem consome recursos do receptor.
    3. Firewalls: Alguns firewalls bloqueiam fragmentos IP por motivos de segurança.

Por isso, aplicações UDP de alta performance (como DNS, VoIP ou jogos) geralmente limitam seus payloads a menos de 1472 bytes (ou usam Path MTU Discovery para encontrar o tamanho ideal) para evitar que o IP fragmente os pacotes.

4. Diferença em Relação ao TCP

O campo Length destaca uma diferença fundamental na arquitetura entre UDP e TCP:

  • UDP (Mensagem Orientada): Tem um campo Length explícito. O receptor lê esse campo para saber exatamente onde termina essa mensagem específica.
  • TCP (Fluxo Orientado): NÃO tem um campo de comprimento no cabeçalho (tem um campo de tamanho de cabeçalho, mas não de dados). O TCP trata os dados como um fluxo contínuo de bytes. O receptor sabe onde a mensagem termina contando os bytes ou baseando-se na lógica da aplicação, não olhando para um campo de tamanho no pacote.

5. Redundância com o IP

O cabeçalho IP (que envolve o UDP) também possui um campo chamado Total Length, que indica o tamanho total do pacote IP (Cabeçalho IP + Cabeçalho UDP + Dados).

  • Redundância Intencional: O campo Length do UDP é, tecnicamente, redundante, pois o receptor poderia calcular o tamanho subtraindo o tamanho do cabeçalho IP do Total Length do IP.
  • Justificativa: A RFC 768 definiu o campo Length para tornar o UDP independente do IP. Teoricamente, o UDP poderia ser usado sobre outros protocolos de rede que não o IP, onde o cálculo baseado no cabeçalho IP não seria possível. Na prática, os dois valores devem ser consistentes (o Length do UDP deve ser igual ao Total Length do IP menos o tamanho do cabeçalho IP).