Home Comunidade Eventos YouTube Networks Desafios // produtos Academy News CTI | CVE Contato

01 - Source Port

video explicativo
Video explicativoEspaco reservado para o video desta anotação — adicione video: https://youtu.be/... no frontmatter da nota.

Source Port (Porta de Origem)

1. Definição e Posicionamento no Cabeçalho

O campo Source Port (Porta de Origem) é o primeiro campo de 16 bits (2 octetos) do cabeçalho UDP, conforme definido pela RFC 768 (Postel, 1980). Sua função é identificar o processo (aplicação) no computador remetente que está enviando o datagrama.

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        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|            Length             |           Checksum            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Embora pareça simples, a Porta de Origem é um componente crítico para a comunicação bidirecional: ela fornece o "endereço de retorno" necessário para que o receptor possa enviar uma resposta. Sem este campo, a comunicação seria estritamente unidirecional.

2. Identificação do Processo Emissor

A Porta de Origem especifica qual soquete (socket) no host de origem gerou os dados. A identificação completa de um fluxo UDP é dada pelo quádruplo (4-tuple):

{IP_Origem, Porta_Origem, IP_Destino, Porta_Destino}
  • Multiplexação: Se um computador está rodando várias aplicações (navegador, cliente DNS, cliente VoIP), todas podem enviar dados UDP simultaneamente. A Porta de Origem garante que, quando uma resposta chegar, o sistema operacional saiba exatamente para qual aplicação entregá-la.
  • Endereço de Retorno: Para a rede, a comunicação é definida pelo quádruplo. A Porta de Origem completa essa identidade, permitindo que o receptor saiba não apenas "quem" (IP) enviou, mas "qual processo especificamente" enviou.

3. Faixa de Valores e Atribuição

O valor numérico varia de 0 a 65535 (16 bits sem sinal). A IANA (Internet Assigned Numbers Authority) divide esse espaço em três faixas (RFC 6335):

Faixa Designação Uso típico como Source Port
0 – 1023 Well-Known (System) Servidores respondendo (ex.: DNS na 53)
1024 – 49151 Registered (User) Aplicações comerciais; raramente origem
49152 – 65535 Dynamic / Private (Ephemeral) Selecionada pelo SO no cliente

3.1 Portas Efêmeras (Ephemeral Ports)

Em comunicações cliente-servidor, a Porta de Origem é geralmente escolhida dinamicamente pelo SO na faixa efêmera. Cada SO tem sua faixa padrão:

Sistema Operacional Faixa Efêmera Padrão
Linux (kernel ≥ 3.2) 32768 – 60999
Windows 10/11 49152 – 65535
FreeBSD / macOS 49152 – 65535
Solaris / AIX 32768 – 65535

No Linux, a faixa pode ser consultada e ajustada:

cat /proc/sys/net/ipv4/ip_local_port_range
# saída típica: 32768   60999
echo "10000 65535" > /proc/sys/net/ipv4/ip_local_port_range

3.2 Portas Bem Conhecidas como Origem

Se o emissor for um Servidor (ex.: DNS respondendo a uma consulta), ele usará uma Porta de Origem padrão (ex.: 53). Isso permite ao cliente confirmar que a resposta veio de uma fonte autorizada, e não de um atacante tentando envenenar o cache (DNS spoofing).

4. Opcionalidade (Valor 0)

Uma peculiaridade do campo Source Port no UDP é que ele é opcional em certos contextos (RFC 768).

  • Valor Zero (0x0000): Se o datagrama não exigir resposta, o campo pode ser preenchido com zeros.
  • Uso em Unicast sem Resposta: Exemplos incluem mensagens Syslog (UDP 514), onde um dispositivo envia um alerta para um servidor central, mas não espera confirmação.
  • Uso em Multicast/Broadcast: Em streaming de vídeo IP ou beaconing de descoberta (mDNS), o receptor não responde a uma porta específica; o campo pode ser menos relevante.

Atenção: usar Source Port = 0 em sistemas modernos pode ser tratado como anomalia por firewalls de estado (stateful firewalls) e descartado.

5. Necessidade para o Datagrama de Resposta

A utilidade mais comum da Porta de Origem é permitir Protocolos de Solicitação-Resposta (Request-Reply).

Cenário DNS (consulta unidirecional + resposta)

Cliente 192.168.1.10        Servidor DNS 8.8.8.8
   |                              |
   |  UDP: src=54321 dst=53       |
   |----------------------------->|
   |                              | (processa consulta)
   |  UDP: src=53 dst=54321       |
   |<-----------------------------|
   |                              |

Se o cliente colocasse 0 no campo Source Port, o servidor não teria destino válido para a resposta, e a comunicação falharia.

6. Source Port Randomization e Segurança

Historicamente, sistemas operacionais antigos alocavam portas efêmeras sequencialmente (próxima porta livre acima da última usada). Isso abriu vetores de ataque como:

  • DNS Cache Poisoning (Kaminsky, 2008): O atacante precisava adivinhar apenas a Porta de Origem (16 bits) da consulta DNS legítima para forjar uma resposta. Com portas sequenciais, isso era trivial.
  • Blind Spoofing de conexões TCP: Prever a porta de origem facilita adivinhar o número de sequência inicial (ISN).

Solução: Source Port Randomization (RFC 6056). Todos os SOs modernos selecionam portas efêmeras aleatoriamente dentro da faixa, aumentando a entropia de ~16 bits para quase os 16 bits completos.

/* Exemplo POSIX: o SO escolhe a porta de origem automaticamente
   quando o socket não faz bind() explícito em uma porta. */
int sockfd = socket(AF_INET, SOCK_DGRAM, 0);
struct sockaddr_in dst = {0};
dst.sin_family = AF_INET;
dst.sin_port = htons(53);
inet_pton(AF_INET, "8.8.8.8", &dst.sin_addr);
sendto(sockfd, query, qlen, 0, (struct sockaddr*)&dst, sizeof(dst));

7. Source Port e NAT (Preservation)

Em CGNAT e NAT residencial, o NAT traduz {IP_local, Porta_origem_local} para {IP_público, Porta_origem_pública}. Comportamentos definidos na RFC 4787:

  • Endpoint-Independent Mapping (EIM): Mesma porta pública independente do destino (amigável a P2P).
  • Address-Dependent Mapping: Porta pública varia conforme o IP de destino.
  • Address and Port-Dependent Mapping (APDM): Porta pública varia conforme IP e porta de destino (hostil a P2P, comum em CGNAT).

A preservação da porta (port preservation) facilita protocolos como SIP/RTCP, mas nem sempre é possível por colisão.

8. Observação com tcpdump / Wireshark

Captura de pacotes UDP mostrando os campos:

$ tcpdump -n -i eth0 udp port 53
14:02:11.123456 IP 192.168.1.10.54321 > 8.8.8.8.53: 2854+ A? example.com. (29)
14:02:11.140789 IP 8.8.8.8.53 > 192.168.1.10.54321: 2854 1/0/0 A 93.184.216.34 (45)

Repare como o Source Port (.54321) da requisição se torna o Destination Port da resposta, e vice-versa.

9. Resumo Técnico

Atributo Valor
Tamanho 16 bits (2 octetos)
Posição Bytes 0-1 do cabeçalho UDP
Faixa 0 a 65535
Obrigatório? Não (0 = sem porta)
Atribuição no cliente Dinâmica (efêmera)
Atribuição no servidor Estática (well-known)
Endianness Big-endian (network byte order)
RFC de referência RFC 768 (1980), RFC 6335 (2011)

10. Conclusão

O campo Source Port, apesar de ocupar apenas 16 bits no cabeçalho UDP, é o elo que viabiliza a comunicação bidirecional na internet baseada em datagramas. Compreender seu mecanismo de alocação, sua faixa efêmera, seu papel no NAT e suas implicações de segurança (randomização, spoofing) é fundamental para qualquer engenheiro de redes que trabalhe com transporte não confiável.