...
🧠 O blog é dedicado ao tema VPN e segurança, privacidade de dados na Internet. Falamos sobre tendências atuais e notícias relacionadas à proteção.

Fragmentação de IP: completamente explicada

12

Cada rede baseada em pacotes IP tem um tamanho de Unidade Máxima de Transmissão (MTU). A MTU, como o termo sugere, é o tamanho máximo do pacote que pode ser transmitido na rede.

Os pacotes IP maiores que o tamanho da MTU precisam ser divididos em fragmentos ou pacotes menores para que possam ser trafegados pela rede.

Ainda confuso? Não se preocupe. 

Neste guia, explicaremos tudo sobre fragmentação de IP – o que é, o que faz, como é usado e suas desvantagens, em termos leigos para compreensão. Responderemos ainda algumas consultas específicas de usuários relacionadas ao tema. Então, sem mais delongas, vamos começar!

O que é fragmentação de IP?

Cada rede local suporta um tamanho máximo de pacote IP. Portanto, quando um host usa a rede para transmitir um pacote IP, ele não deve ser maior que o tamanho da Unidade Máxima de Transmissão (MTU). Caso contrário, ele é dividido em pequenos pedaços – um processo chamado de fragmentação de IP.

Esse tamanho geralmente é determinado pelos MTUs e pelo link de dados da rede que geralmente é o mesmo. Um local de trabalho contemporâneo, data center ou rede de campus oferecida por meio de Ethernet tem MTUs no valor de 1.500 bytes.

No entanto, os pacotes IP transferidos pela primeira vez em uma rede com suporte a um único MCU podem exigir roteamento entre túneis VPN, WANs ou outras redes com unidades máximas de transmissão menores. Caso o tamanho do pacote exceda o MTU menor, os dados neste pacote precisariam ser fragmentados.

Os dados seriam divididos em várias partes e transportados em novos fragmentos (pacotes) menores ou iguais em tamanho que o MCU inferior. Esses dados fragmentados serão reagrupados quando chegarem ao seu destino.


IPv4

Os campos de cabeçalho IPv4 usados

A fragmentação e o processo de remontagem têm vários campos de cabeçalho IP envolvidos que são definidos em pedaços/fragmentos.

(Créditos da imagem: packetpushers.net)

A operação de fragmentação depende de três campos de cabeçalho IP (um total de 32 bits). Todos esses fragmentos terão valores significativamente diferentes em comparação com o pacote IP original:

O campo Identificação (16 bits) contém um número de identificação exclusivo que é uma mistura de endereços IP de origem e destino. O campo Protocolo, com o valor do pacote original, permite ao destino diferenciar entre os vários fragmentos de pacotes provenientes da mesma origem.

Isso significa simplesmente que o mesmo ID pode ser utilizado mesmo quando a origem, o protocolo e o destino dos pacotes fragmentados não são os mesmos.

Exatamente como o pacote IP original, o primeiro bit reservado do  campo Flags (total de 3 bits) e o segundo, o bit Don't Fragment (DF)  estarão ambos desabilitados (0).

No entanto, o fragmento final terá o terceiro bit do campo, ou seja, More Fragments (MF) definido como 1. Todos os bits neste campo do último pacote IP serão definidos como 0, exatamente como o pacote IP original (a menos que seja um fragmento).

Se no pacote original, o sinalizador Don't Fragment estiver definido, isso impedirá a fragmentação e resultará em pacotes que precisam ser descartados. Os erros devem ser enviados ao remetente neste caso, como erro ICMP tipo 3: ‘Destino inacessível', código 4: ‘Fragmentação necessária e DF definido'.

O campo Fragment Offset  (total 13 bits) é utilizado para indicar a posição inicial dos dados no fragmento, em relação aos dados iniciais do pacote IP original. Isso é usado para remontar os dados de todos os fragmentos (chegados ou não).

O deslocamento no primeiro fragmento é 0, pois os dados neste pacote fragmentado e o original começam no mesmo local. Nos fragmentos a seguir, o valor é o deslocamento dos dados fragmentados a partir do início dos dados no fragmento inicial (deslocamento 0), em blocos de 8 bytes (também conhecidos como octawords).

Se um pacote IP contendo dados no valor de 800 bytes for dividido em duas partes/fragmentos iguais, cada um transportando 400 bytes, o deslocamento do fragmento do 1º fragmento será 0, enquanto o outro será 50 (400/8).

O valor de deslocamento deve ser o número de blocos de dados de 8 bytes. Isso significa que o fragmento anterior deve ser um múltiplo de 8 bytes. O fragmento final pode transportar dados que não sejam múltiplos de 8 bytes, pois não haverá mais fragmentos.


IPv6

Embora a maioria dos campos de cabeçalho permaneçam os mesmos, a fragmentação de IP no IPv6 funciona de maneira um pouco diferente do IPv4. No IPv6, os dados só podem ser fragmentados no host de origem. Isso significa que a fragmentação não pode ser realizada em outras redes, exceto na fonte.

Não há sinalizador Don't Fragment disponível, então tudo que você precisa fazer é não criar fragmentos.

A fragmentação de IP não pode ser executada se o PMTUD não for utilizado. Os nós não podem usar um MTU superior a 1280 bytes, que é o mínimo de IPv6, se eles não implementarem o Path MTU Discovery (PMUTD).

Enquanto o Path MTU Discovery funciona da mesma forma que o IPv4, a mensagem de erro ICMP é diferente:

(Créditos da imagem: packetpushers.net)

Se o pacote IP for maior em tamanho do que o MCU, o roteador IPv6 deve descartá-lo e enviar um erro ICMPv6 tipo 2 ‘Packet Too Big' – código 0 para o remetente.

Observe que confiar em um canal de retorno e transmissão ICMP para o host de origem tem várias falhas – uma importante é que as mensagens ICMP geralmente são bloqueadas em várias instâncias em uma rede devido a vantagens de segurança.

Dessa forma, o host de origem não receberá as mensagens Packet Too Big e retransmitirá os pacotes IP que foram descartados várias vezes, o que certamente não chegará. Eventualmente, a conexão seria considerada instável e fechada. Mesmo se um novo fosse estabelecido, o problema se repetiria.

Os campos de cabeçalho relacionados à fragmentação são colocados em um cabeçalho de extensão chamado Fragment Header. Isso é especificado com um campo Next Header (valor 44) em um IPv6 padrão ou em qualquer cabeçalho de extensão anterior.

Assim como todos os cabeçalhos de extensão, este tem 8 bytes/64 bits de comprimento, juntamente com um cabeçalho padrão, resultando em uma fragmentação IPv6 com uma sobrecarga maior que o IPv4.

Os campos de cabeçalho IPv6 usados

Confira os campos no cabeçalho da extensão do fragmento IPv6:

(Créditos da imagem: packetpushers.net)

O campo chamado Next Header (8 bits) especifica o tipo de cabeçalho, como um cabeçalho de protocolo de camada superior ou cabeçalho de extensão IPv6. Os próximos 8 bits são então reservados.

O campo Fragment Offset de 13 bits é usado de maneira semelhante ao IPv4. Depois disso, os próximos 2 bits são reservados.

O sinalizador do campo M será definido como 1, e o fragmento final será definido como o campo Mais Fragmentos (MF)  do IPv4 .

O campo Identificação de 32 bits é igual ao campo IPv4 de 16 bits contendo um número de identificação exclusivo para a combinação de endereços de origem e endereços de destino. O campo Protocolo não está disponível no IPv6.


As desvantagens da fragmentação de IP

A pilha de protocolos IP é considerada como tendo um mecanismo não confiável devido ao qual os hosts finais não conseguem descobrir o tamanho máximo da carga útil ao se comunicar através de um host IPv4 e IPv6.

Embora a ausência de um mecanismo de MTU na rede seja compreensível, pois os pacotes IP seguem rotas diferentes, a falta de informações de ponta a ponta pode resultar em roteadores intermediários recebendo pacotes superdimensionados e incapazes de encaminhá-los.

Os roteadores IPv4 podem dividir pacotes IP em fragmentos durante o trânsito, mas a mesma função não está disponível em roteadores IPv6 – onde o remetente precisa realizar a fragmentação.

A fragmentação resulta em um pico na sobrecarga da camada 3. Assim, por exemplo, se o host final acredita que pode usar pacotes IP de 1500 bytes, mas enfrenta um salto em seu caminho de tamanho MTU 1472, o pacote IP seria dividido em dois pacotes, resultando em um cabeçalho IPv6 adicionado de 40 bytes e cabeçalho IPv4 de 20 bytes.

Os fragmentos IP sobrecarregam o sistema receptor, pois é necessário remontar os fragmentos para entregá-los às camadas de protocolo mais altas. Essa atividade é agravada quando o roteador encerra o tráfego IP.

Se um roteador tentar montar os pacotes fragmentados, os pacotes não conseguirão remontar no hardware e reduzirão drasticamente o desempenho da plataforma.


Perguntas frequentes

A fragmentação de IP é vital para a transmissão de dados, pois cada rede possui um limite de tamanho diferente para o processamento de dados. Este limite também é conhecido como MTU (unidade máxima de transmissão).

Não, os roteadores podem fragmentar pacotes IP, mas não remontá-los. É o trabalho do dispositivo de destino remontar esses pacotes para o usuário.

Se um ou vários fragmentos de um datagrama forem perdidos, o datagrama completo será descartado após o período de tempo limite.


Conclusão

Isso encerra nosso guia detalhado sobre fragmentação de IP.

Para fornecer uma visão geral rápida, se os dados enviados por uma rede forem maiores que o tamanho da Unidade Máxima de Transmissão (MTU), os dados serão divididos em vários fragmentos e enviados para o receptor.

Assim que os fragmentos IP chegassem ao seu destino, eles seriam reagrupados na ordem correta para que os dados pudessem ser úteis aos usuários. O mecanismo de fragmentação é diferente entre as redes IPv4 e IPv6, cujos detalhes são mencionados acima.

Caso você tenha alguma dúvida sobre endereços IP e fragmentações, entre em contato conosco nos comentários.

Este site usa cookies para melhorar sua experiência. Presumiremos que você está ok com isso, mas você pode cancelar, se desejar. Aceitar Consulte Mais informação