O Path MTU Discovery (PMTUD) descobre dinamicamente o menor MTU ao longo de um caminho de rede, permitindo que os hosts dimensionem os pacotes para evitar a fragmentação IP e reduzir a perda de pacotes.
Benefícios
O PMTUD limita o tamanho dos pacotes ao PMTU, melhorando a eficiência e a confiabilidade da rede ao evitar a fragmentação.
Prevenção da fragmentação IP: o PMTUD mantém cada pacote dentro do MTU de cada salto, evitando a fragmentação que aumenta a latência e a perda de pacotes. Consulte Avoid IP fragmentation on TCP connections.
Maior eficiência de rede: o PMTUD determina o tamanho ideal dos pacotes, reduzindo o overhead de cabeçalho e aumentando o throughput sem exceder o MTU de nenhum dispositivo.
Redução de perda de pacotes e latência: a fragmentação exige a retransmissão de todos os fragmentos caso algum seja perdido. O PMTUD elimina esse overhead.
Dimensionamento automático de pacotes: o PMTUD permite que o host remetente redimensione dinamicamente os pacotes com base no PMTU descoberto, sem necessidade de conhecimento prévio da configuração de rede.
Maior robustez de rede: o PMTUD se adapta a diferentes tipos e configurações de link, aumentando a flexibilidade da rede.
Componentes e sistemas compatíveis
-
Sistemas operacionais: a maioria dos sistemas operacionais modernos, incluindo Linux e Windows, é compatível com PMTUD.
ImportanteAs instâncias do Elastic Compute Service (ECS) da Alibaba Cloud pertencentes à 6ª geração de famílias de instâncias ou anteriores, que não são compatíveis com o recurso Jumbo Frames, não são compatíveis com PMTUD. Certifique-se de que o tamanho dos pacotes que trafegam pelas instâncias ECS não exceda 1.500 bytes.
Dispositivos de rede: alguns roteadores e switches têm suporte nativo a PMTUD. Um dispositivo sem suporte a PMTUD pode retornar uma mensagem ICMP sem informações de MTU ao receber um pacote superdimensionado com o flag Don't Fragment (DF) definido como 1.
Middleware ou bibliotecas: alguns ambientes de programação oferecem bibliotecas ou middleware especializados para PMTUD.
Aplicações: algumas aplicações de rede implementam sua própria lógica de PMTUD para redimensionar dinamicamente os pacotes de saída.
Protocolos de rede: o PMTUD funciona com os protocolos de camada de transporte IPv4 e IPv6, incluindo TCP, UDP e ICMP.
Provedores de serviços de cloud: os componentes de encaminhamento da Alibaba Cloud executam o PMTUD conforme os padrões RFC. Consulte How PMTUD works.
Como o PMTUD funciona
O flag DF nos pacotes IP desempenha um papel fundamental no PMTUD. Definir o flag DF como 1 impede a fragmentação. O PMTUD utiliza mensagens ICMP para descobrir o PMTU entre dois hosts e limita os pacotes ao PMTU, evitando a fragmentação durante a transmissão.
Defina o flag DF no host remetente. O host remetente define o flag DF no cabeçalho IP como 1, impedindo a fragmentação no caminho de rede.
-
O limite de MTU é atingido. Quando o pacote com DF=1 chega a um dispositivo de rede cujo MTU é menor que o pacote, o dispositivo descarta o pacote.
-
No IPv4, os dispositivos de rede verificam o flag DF. Se DF=0 e o dispositivo é compatível com fragmentação, ele pode fragmentar pacotes superdimensionados em vez de descartá-los.
NotaAlguns componentes de encaminhamento da Alibaba Cloud, como gateways de borda em cenários entre domínios ou entre regiões, não são compatíveis com fragmentação. Esses componentes descartam pacotes superdimensionados e enviam mensagens de erro ICMP mesmo quando DF=0.
No IPv6, o PMTUD é obrigatório. Todos os hosts e roteadores devem ser compatíveis com ele. O flag DF é implicitamente definido como 1 para todos os pacotes IPv6.
-
-
Uma mensagem de erro ICMP é enviada. Se o dispositivo é compatível com PMTUD, ele envia uma mensagem de erro ICMP com seu MTU ao host remetente.
No IPv4, o dispositivo envia: Destination Unreachable: Fragmentation Needed and Don't Fragment was Set (Type 3, Code 4).
No IPv6, o dispositivo envia: ICMPv6 Packet Too Big (PTB) (Type 2, Code 0).
-
Processe a mensagem de erro ICMP. O host remetente analisa e armazena em cache o PMTU contido na mensagem e, em seguida, trata os pacotes da seguinte forma:
Por padrão, o kernel do sistema operacional fragmenta o pacote com base no PMTU e reenvia os fragmentos.
-
Redimensionamento no nível da aplicação. Uma aplicação compatível com PMTUD redimensiona os pacotes com base no MTU informado na mensagem de erro ICMP e os reenvia. Isso evita a fragmentação, mas geralmente requer modificações na aplicação.
NotaPara conexões TCP, a camada TCP ajusta o MSS com base no PMTU descoberto para evitar a fragmentação de segmentos. Consulte Dynamically adapt MSS to PMTU during data transmission.
Armazene o PMTU em cache. O host remetente armazena o PMTU em sua tabela de rotas para o endereço IP de destino e limita os pacotes subsequentes a esse tamanho.
Atualize o PMTU periodicamente. O PMTU pode mudar quando os caminhos de rede se alteram ou os caches de rota expiram. O host executa novamente o PMTUD para atualizar o PMTU.
Configure o PMTUD
Ative o PMTUD
Verifique se todos os dispositivos na rede são compatíveis com PMTUD e têm o recurso ativado. No Linux, ative o PMTUD gravando zero em /proc/sys/net/ipv4/ip_no_pmtu_disc.
Versões antigas do kernel ou sistemas operacionais específicos podem não ser compatíveis com PMTUD. Dispositivos sem suporte a PMTUD não conseguem processar mensagens ICMP durante o PMTUD, fazendo com que ele falhe.
As instâncias do Elastic Compute Service (ECS) da Alibaba Cloud pertencentes à 6ª geração de famílias de instâncias ou anteriores, que não são compatíveis com o recurso Jumbo Frames, não são compatíveis com PMTUD. Certifique-se de que o tamanho dos pacotes que trafegam pelas instâncias ECS não exceda 1.500 bytes.
Se um dispositivo no caminho não for compatível com PMTUD, descubra o PMTU manualmente. Por exemplo, run the ping command to discover the PMTU. Em seguida, ajuste os tamanhos dos pacotes ou change the MTU of a network interface (NIC).
Garanta que as mensagens de erro ICMP cheguem ao host
Verifique e configure firewalls e dispositivos de segurança para permitir mensagens ICMP, especialmente Destination Unreachable: Fragmentation Needed (Type 3, Code 4). Mensagens ICMP bloqueadas impedem o funcionamento do PMTUD.
Configure os grupos de segurança para permitir tráfego ICMP. As instâncias ECS recebem pacotes de negociação ICMP durante o PMTUD somente se seus grupos de segurança permitirem tráfego ICMP. Consulte Security group rules for controlling access to ECS instances by using specific protocols.
-
Verifique se há limitação de tráfego de rede. Mensagens ICMP podem ser descartadas quando o tráfego atinge o limiar de limitação.
Para instâncias Linux, consulte Troubleshoot high network bandwidth on a Linux instance.
Para instâncias Windows, use o Task Manager para verificar o uso da rede.
Modifique as aplicações para responder a mensagens ICMP
Modifique as aplicações para que respondam a mensagens de erro ICMP durante o PMTUD e reduzam o tamanho dos pacotes com base no PMTU descoberto.
Se uma aplicação não adaptar o tamanho dos pacotes ao PMTU descoberto após receber uma mensagem de erro ICMP, o kernel do sistema operacional poderá fragmentar os pacotes, o que pode causar falhas na transmissão.
Para resolver isso, especifique um MSS menor na aplicação para corresponder ao PMTU.
Evite a fragmentação IP em conexões TCP
O TCP é um protocolo de camada de transporte orientado à conexão e confiável, que garante a integridade e a ordenação dos dados. A fragmentação IP pode causar perda de fragmentos ou erros de remontagem que comprometem a confiabilidade do TCP. A negociação de MSS e o PMTUD auxiliam as conexões TCP a evitar a fragmentação IP.
Evite a fragmentação IP com a negociação de MSS durante o estabelecimento da conexão
O MSS é um parâmetro TCP que especifica o maior payload de dados em um segmento TCP, excluindo o cabeçalho TCP.
A negociação de MSS ocorre na pilha TCP/IP sem intervenção do usuário. Ela garante que os tamanhos dos segmentos de dados se ajustem aos ambientes de rede de ambos os endpoints, evitando a fragmentação causada por pacotes superdimensionados ou a ineficiência causada por pacotes subdimensionados.
O MSS é negociado durante o handshake de três vias do TCP. O host remetente inclui a opção MSS no pacote SYN. Esse valor é normalmente calculado com base no MTU do endpoint menos o overhead fixo dos cabeçalhos IP e TCP. O host receptor determina um MSS adequado com base em seu próprio MTU e o retorna no pacote SYN-ACK. Ambos os hosts usam o MSS acordado para a conexão.
Adapte dinamicamente o MSS ao PMTU durante a transmissão de dados
A negociação de MSS não garante que todos os dispositivos intermediários tenham MTUs maiores ou iguais ao MSS negociado. Se um dispositivo no caminho tiver um MTU menor, a fragmentação IP ainda poderá ocorrer. Protocolos sem conexão, como UDP e ICMP, não dispõem de negociação de MSS. O PMTUD resolve esse problema descobrindo dinamicamente o PMTU e permitindo que as aplicações ajustem o MSS de acordo.