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
Lengthmaior 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:
- Ineficiência: Se um fragmento se perder, todo o datagrama UDP é descartado.
- Custo de Processamento: A remontagem consome recursos do receptor.
- 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
Lengthexplí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
Lengthdo UDP é, tecnicamente, redundante, pois o receptor poderia calcular o tamanho subtraindo o tamanho do cabeçalho IP doTotal Lengthdo IP. - Justificativa: A RFC 768 definiu o campo
Lengthpara 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 (oLengthdo UDP deve ser igual aoTotal Lengthdo IP menos o tamanho do cabeçalho IP).