02 - Destination Port
video: https://youtu.be/... no frontmatter da nota.Destination Port (Porta de Destino)
1. Definição e Posicionamento no Cabeçalho
O campo Destination Port (Porta de Destino) é o segundo campo de 16 bits do cabeçalho UDP, logo após o Source Port. Sua função é absolutamente crítica: ele identifica o processo (aplicação) receptor para o qual o datagrama está destinado.
Enquanto a Porta de Origem ajuda na resposta, a Porta de Destino é o que torna a entrega possível. É através deste campo que o sistema operacional do host receptor sabe se deve entregar os dados para o servidor Web, o cliente de DNS, o jogo ou qualquer outro aplicativo que esteja aguardando comunicações.
Layout do cabeçalho UDP (8 bytes fixos):
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Port | Destination Port | <-- este campo
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Length | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2. A Função de Desmultiplexação (Demultiplexação)
O conceito técnico central associado à Porta de Destino é a Desmultiplexação.
2.1 O Problema da Chegada
Um computador (host) possui um único endereço IP (ou poucos), mas pode rodar dezenas ou centenas de processos de rede ao mesmo tempo. Quando um datagrama IP chega ao computador, a Camada de Rede (IP) cumpriu sua parte (entregou até a máquina). Agora, a Camada de Transporte (UDP) deve decidir o que fazer com esses dados.
2.2 A Solução
A Camada de Transporte lê o campo Destination Port. Ela consulta sua tabela de soquetes internos para ver se existe algum processo (aplicação) que solicitou permissão para "escutar" (aguardar dados) nesse número de porta específico.
/* Exemplo POSIX: servidor escutando na porta 53 (DNS) */
int sockfd = socket(AF_INET, SOCK_DGRAM, 0);
struct sockaddr_in addr = {0};
addr.sin_family = AF_INET;
addr.sin_port = htons(53); // Destination Port que será escutada
addr.sin_addr.s_addr = htonl(INADDR_ANY);
bind(sockfd, (struct sockaddr*)&addr, sizeof(addr));
recvfrom(sockfd, buf, sizeof(buf), 0, NULL, NULL);
2.3 Entrega ou Descarte
- Entrega: Se houver um processo escutando nessa porta, o sistema operacional copia o payload do datagrama para a memória desse processo.
- Descarte: Se não houver nenhum processo escutando, o datagrama é descartado e, geralmente, uma mensagem de erro ICMP ("Port Unreachable") é enviada de volta ao remetente.
3. Classificação IANA de Portas (RFC 6335)
A IANA (Internet Assigned Numbers Authority) divide o espaço de 16 bits em três faixas:
| Faixa | Designação | Uso típico | Privilégio |
|---|---|---|---|
| 0 – 1023 | Well-Known (System) | Servidores padrão (DNS, HTTP, SSH) | root/admin |
| 1024 – 49151 | Registered (User) | Aplicações comerciais registradas | Usuário comum |
| 49152 – 65535 | Dynamic / Private (Ephemeral) | Portas efêmeras em clientes | Usuário comum |
3.1 Portas Bem Conhecidas (Well-Known)
Servidores esperam que os clientes saibam antecipadamente em qual porta contatá-los. Exemplos notáveis de portas UDP:
| Porta | Protocolo | Descrição |
|---|---|---|
| 53 | DNS | Domain Name System (consultas) |
| 67/68 | DHCP | Server (67) / Client (68) |
| 69 | TFTP | Trivial File Transfer Protocol |
| 123 | NTP | Network Time Protocol |
| 161/162 | SNMP | Agent (161) / Trap (162) |
| 500 | IKE | IPsec Key Exchange |
| 514 | Syslog | System Logging |
| 520 | RIP | Routing Information Protocol |
| 1900 | SSDP | Simple Service Discovery Protocol (UPnP) |
| 5353 | mDNS | Multicast DNS (Bonjour/Avahi) |
| 5060 | SIP | Session Initiation Protocol |
| 1194 | OpenVPN | VPN sobre UDP |
Se um cliente UDP envia dados para a porta 53, está implicitamente dizendo: "Este dado é para o seu serviço de DNS". Se envia para 161, é SNMP.
3.2 Privilégio de Abertura
Em sistemas Unix-like, abrir (bind) uma porta abaixo de 1024 requer privilégios de root (ou a capability CAP_NET_BIND_SERVICE). Isso evita que usuários comuns rodem servidores falsos de SSH, DNS ou HTTP em máquinas compartilhadas.
# Conceder capability a um binário sem dar root total
sudo setcap 'cap_net_bind_service=+ep' /usr/bin/my_custom_dns
4. Papel em Servidor vs Cliente
O papel da Porta de Destino é fixo para o servidor, mas varia para o cliente.
- No Servidor: A Porta de Destino é geralmente estática e conhecida. O servidor DNS sempre espera dados na porta 53. O servidor Web sempre espera dados na porta 80 (HTTP) ou 443 (HTTPS/TLS, com HTTP/3 usando QUIC/UDP).
- No Cliente: Quando um cliente inicia uma requisição, ele envia o pacote para a Porta de Destino do servidor (ex.: 53). O servidor usa essa informação para rotear a requisição internamente para o software correto.
Exemplo de Troca de Papéis (Request/Response)
Cliente (192.168.1.10) Servidor DNS (8.8.8.8)
src_port=54321 dst_port=53 ---> "consulta A example.com"
src_port=53 dst_port=54321 <--- "resposta 93.184.216.34"
Na requisição, Destination Port = 53 (serviço). Na resposta, Destination Port = 54321 (porta efêmera do cliente). A Porta de Destino inverte-se a cada pacote em uma conversa bidirecional.
5. Port Forwarding e NAT
Em redes com NAT residencial ou CGNAT, o campo Destination Port é frequentemente reescrito por Port Forwarding (DNAT - Destination NAT):
Internet --> Router (NAT) --> LAN
|
| dst_port=80 -> reescreve para 192.168.1.100:8080
| dst_port=53 -> reescreve para 192.168.1.10:53
Isso permite que serviços internos sejam acessíveis pela internet mesmo sem IP público dedicado. Em UDP, a entrada na tabela de NAT expira tipicamente em 30-60 segundos se não houver tráfego, exigindo keepalive (ex.: SIP, STUN).
6. Falha na Entrega (Port Unreachable)
Se um datagrama UDP chegar a um host e o campo Destination Port apontar para um número onde nenhum processo está escutando:
- O sistema operacional descarta o datagrama (os dados nunca chegam à aplicação).
- O sistema operacional gera uma mensagem de erro ICMPv4 Tipo 3, Código 3 ("Destination Unreachable - Port Unreachable").
- Essa mensagem ICMP é enviada de volta ao endereço IP de origem notificando o erro.
Detecção com Ping/Traceroute
# Detectar que ninguém está escutando na porta UDP 161 do alvo
$ nmap -sU -p 161 192.168.1.1
PORT STATE SERVICE
161/udp closed snmp
# Teste manual com hping3
$ hping3 --udp -p 9999 192.168.1.1
ICMP Port Unreachable from 192.168.1.1
Em IPv6, o equivalente é ICMPv6 Tipo 1, Código 4 (Port Unreachable).
Atenção: UDP e ICMP Rate Limiting
Para evitar abuse, kernels Linux limitam a geração de ICMP Port Unreachable por socket:
- net.ipv4.icmp_ratelimit (default 1000 ms)
- net.ipv4.icmp_ratemask (quais tipos são limitados)
Em firewalls configurados com DROP silencioso (em vez de REJECT), nenhuma ICMP é gerada, e o emissor fica esperando um timeout. É a chamada diferença entre "REJECT" (envia ICMP) e "DROP" (silêncio).
7. Inspeção com Ferramentas
Listar portas UDP em escuta:
$ ss -tulnp
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
udp UNCONN 0 0 0.0.0.0:53 0.0.0.0:* users:(("named",pid=1234,fd=20))
udp UNCONN 0 0 0.0.0.0:161 0.0.0.0:* users:(("snmpd",pid=5678,fd=12))
Cada linha representa um socket escutando em uma Destination Port específica, pronto para receber datagramas.
8. Resumo Técnico
| Atributo | Valor |
|---|---|
| Tamanho | 16 bits (2 octetos) |
| Posição | Bytes 2-3 do cabeçalho UDP |
| Faixa | 0 a 65535 |
| Obrigatório? | Sim (deve apontar para um serviço válido) |
| Atribuição no servidor | Estática (well-known ou registrada) |
| Atribuição no cliente | Reaproveitada da Source Port original do cliente |
| Endianness | Big-endian (network byte order) |
| RFC de referência | RFC 768 (1980), RFC 6335 (2011) |
9. Conclusão
O campo Destination Port é o coração da desmultiplexação em UDP: ele converte um mero endereçamento de máquina (IP) em endereçamento de processo. Sem ele, o IP entregaria pacotes a um host, mas ninguém saberia o que fazer com eles. Compreender a hierarquia IANA (well-known, registered, dynamic), o mecanismo de Port Unreachable, o papel do NAT/Port Forwarding e as ferramentas de inspeção é fundamental para diagnosticar falhas em serviços de rede baseados em UDP.