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

04 - MTU - Maximum Transmission Unit

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

MTU - Maximum Transmission Unit

1. Definição Operacional

A MTU (Maximum Transmission Unit) é o tamanho máximo, em bytes, do payload (campo de dados) que uma camada de rede pode encapsular em um único quadro para transmissão pelo meio físico. Na pilha TCP/IP, a MTU determina o maior datagrama IP que pode ser entregue sem fragmentação sobre uma tecnologia de enlace específica.

A MTU não inclui o cabeçalho do quadro de enlace (ex.: 18 bytes de cabeçalho+trailer Ethernet com 802.3 + 802.1Q + FCS). Ela inclui apenas o datagrama IP completo, desde o byte 0 do cabeçalho IP até o último byte de payload da camada superior.

2. Valores Canônicos por Tecnologia

Tecnologia MTU (bytes) Observação
Ethernet (802.3 clássico) 1500 RFC 894 (1984) — valor hegemônico na internet
Ethernet Jumbo Frames 9000 Padrão de facto, não padronizado pelo IEEE, dominante em datacenters
IEEE 802.11 (Wi-Fi) 2304 Payload MAC, antes de criptografia
PPP (ponto-a-ponto) 1500 Default; negociado em LCP
PPPoE (ADSL residencial) 1492 Subtrai 8 bytes de cabeçalho PPPoE
IPv6 over everything 1280 RFC 8200 §5 — mínimo obrigatório
IPv4 mínimo obrigatório 576 RFC 791
Hyperchannel (FDDI) 4352 Obsoleto
Token Ring (16 Mbps) 17914 Obsoleto
InfiniBand 2048 (default IPoIB-CM) Aplicações HPC

Path MTU (PMTU)

A Path MTU é a menor MTU entre todos os enlaces no caminho origem-destino. Um pacote maior que a PMTU deve ser fragmentado em IPv4 ou descartado em IPv6 (com retorno de ICMPv6 Packet Too Big). A Path MTU Discovery (PMTUD) — RFC 1191 (IPv4) e RFC 8201 (IPv6) — descobre esta restrição sem precisar fragmentar.

3. Fragmentação de Pacotes IP

IPv4

O cabeçalho IPv4 contém três campos relevantes:

  • Identification (16 bits): Identificador comum a todos os fragmentos do mesmo datagrama.
  • Flags (3 bits): Bit 0 reservado; Bit 1 DF (Don't Fragment) — se 1, descarta e retorna ICMP Type 3 Code 4; Bit 2 MF (More Fragments) — se 1, há mais fragmentos.
  • Fragment Offset (13 bits): Posição em unidades de 8 bytes. Máximo: $2^{13} \times 8 = 65.536$ bytes.

A restrição do offset em múltiplos de 8 bytes implica que a payload de cada fragmento intermediário deve ser múltipla de 8 bytes.

Cálculo dos Fragmentos — Exemplo

Considere um datagrama IP de 4000 bytes (20 cabeçalho + 3980 payload) que precisa atravessar enlace com MTU = 1500. Cada fragmento tem $1500 - 20 = 1480$ bytes de payload IP. Como 1480 é divisível por 8, é aceitável.

Fragmento Header Payload Offset MF Total
1 20 1480 0 1 1500
2 20 1480 185 1 1500
3 20 1020 370 0 1040

Note que Offset é em unidades de 8 bytes: $1480/8 = 185$, $2960/8 = 370$.

IPv6 — Sem Fragmentação no Caminho

O IPv6 removeu os campos de fragmentação do cabeçalho base (40 bytes). A fragmentação só ocorre na origem, mediante cabeçalho de extensão Fragment Header (RFC 8200 §4.5). Roteadores intermediários não fragmentam datagramas IPv6 — se o datagrama excede a MTU de saída, é descartado e ICMPv6 Packet Too Big é enviado à origem.

Esta escolha de projeto foi motivada por:

  1. Performance: Roteadores não processam fragmentação no caminho (cada pacote é encaminhado a custo fixo).
  2. Segurança: Ataques de fragmentação overlapping são eliminados (RFC 1858).
  3. Simplicidade: Cabeçalho de tamanho fixo facilita hardware accelerators.

4. Por que a Fragmentação é Prejudicial

A máxima de Kent e Mogul (RFC 1191): "Fragmentação é funcionalidade; overhead de fragmentação é patologia."

  1. Loss Amplification: Se $N$ fragmentos são gerados, a perda de qualquer um invalida o datagrama inteiro. Para $N=10$ fragmentos e taxa de perda por pacote $p=1\%$:
formula
$$P(\text{perda do datagrama}) = 1 - (1-p)^N = 1 - 0,99^{10} = 9,6\%$$

A perda aparente é ~10x a perda por enlace.

  1. Reassembly Overhead: Receptor aloca buffer proporcional ao datagrama original, com timeout (RFC 791: 30-60s default). Ataques de fragmento contínuo podem exaurir memória.

  2. Stateful Filtering Complexity: Firewalls precisam reassemblar ou inspecionar todos os fragmentos para aplicar regras L7. Ataques clássicos (RFC 1858) exploravam overlaps maliciosos.

  3. Performance de Cache: Roteadores modernos operam em flow cache (CEF, MPLS). Fragmentos não compartilham o mesmo flow key, causando cache miss e queda para slow path.

  4. TCP Throughput Collapse: TCP adapta-se ao tamanho do pacote; fragmentar implicitamente reduz a taxa efetiva sem que o TCP saiba (mais ACKs por unidade de dado útil).

5. Path MTU Discovery (PMTUD)

Funcionamento (IPv4, RFC 1191)

  1. Origem envia pacotes com DF=1 e tamanho inicial igual à MTU da interface de saída.
  2. Se um roteador no caminho precisar enviar por uma interface com MTU menor, descarta o pacote e envia ICMP Type 3 Code 4 (Fragmentation Needed, DF Set), com a MTU do próximo salto no campo "Next-Hop MTU".
  3. Origem ajusta sua PMTU cache para a MTU informada e reenvia.

Funcionamento (IPv6, RFC 8201)

Idêntico, mas o ICMP de erro é ICMPv6 Type 2 Packet Too Big. Não há bit DF — todo pacote IPv6 é implicitamente DF.

PMTUD Black Hole Problem

Muitas redes mal configuradas bloqueiam todos os ICMP, sob pretexto de segurança. Isto quebra PMTUD:

  • TCP envia segmento de 1500 bytes com DF=1.
  • Roteador intermediário descarta (MTU < 1500) e gera ICMP, que é bloqueado.
  • Origem nunca recebe o aviso; TCP retransmite o mesmo segmento, gerando loop.

Mecanismo moderno: PLPMTUD (Packetization Layer PMTUD, RFC 4821) não depende de ICMP — prova tamanhos menores através de confirmações em camada superior (ACK TCP) e ajusta progressivamente.

6. TCP Maximum Segment Size (MSS) e Clamping

Como TCP conhece a MTU, ele anuncia o MSS (Maximum Segment Size) na SYN:

formula
$$\text{MSS} = \text{MTU} - 20 - 20 = 1500 - 40 = 1460$$

Roteadores residenciais PPPoE realizam MSS Clamping: interceptam pacotes TCP SYN e reescrevem o MSS de 1460 para 1452, prevenindo fragmentação sem depender de PMTUD.

7. Jumbo Frames em Datacenters

Em datacenters, o uso de Jumbo Frames (MTU 9000) reduz:

  • Header overhead: De 1,3% (1500 bytes) para 0,2% (9000 bytes).
  • Interrupções por byte transferido: 6x menor.
  • CPU de protocolo offload: Melhor aproveitamento de TSO/GSO/LRO.

Em 10 Gbps Ethernet, o ganho prático é ~10-15% de throughput para fluxos grandes. Em 100 Gbps, o ganho é maior porque a frequência de intempções domina o custo de processamento.

O impedimento é a heterogeneidade: Jumbo Frames não atravessam a internet pública (MTU 1500), o que pode causar PMTUD problems. Por isso, Jumbo Frames são restritos a:

  • SAN (Storage Area Network) iSCSI — adotado massivamente.
  • Intra-datacenter East-West — adotado massivamente.
  • Backbone entre datacenters — ocasionalmente, com PMTUD funcional.

8. Diagnóstico Prático

# Verificar MTU da interface
ip link show dev eth0

# Testar PMTU (envia pacotes com DF=1)
ping -M do -s 1472 example.com   # 1472 + 8 ICMP + 20 IP = 1500

# Em IPv6
ping -6 -M do -s 1452 example.com  # 1452 + 48 ICMPv6 + 40 IPv6 = 1540

# Descobrir PMTU via traceroute
traceroute -F example.com  # -F = Don't Fragment

Em ambientes com túneis, subtraia overhead do túnel: GRE 24 bytes; IPsec Transporte 50-70 bytes; IPsec Túnel 70-90 bytes.