Fragmentação de Datagramas IP – Redes de Computadores

Fragmentação de Datagramas IP

Quando um roteador recebe um pacote, ele examina o endereço de destino e determina para qual interface deve encaminhar esse pacote, para que possa seguir seu caminho até o destino.

Além disso, o roteador também determina o MTU da interface a ser usada. Caso o tamanho do pacote seja maior do que o MTU, e o bit DF do campo Flags do cabeçalho esteja ajustado em 0, o roteador irá fragmentar o pacote.

O propósito da fragmentação de pacotes IP, realizada pelo protocolo IP, é portanto permitir que os datagramas possam ser transmitidos em links cujo MTU seja menor do que o tamanho original desses datagramas. Esse procedimento é descrito pela RFC 791.

Fragmentar o pacote significa dividir o pacote em unidades de menor tamanho, denominadas Fragmentos. O tamanho máximo de um fragmento é o tamanho da MTU menos o tamanho do cabeçalho IPv4, que pode variar de 20 a até 60 bytes. Cada fragmento será enviado pela rede em um pacote separado, e cada um desses pacotes seguirá as seguintes regras:

  • O campo Tamanho Total será o tamanho do fragmento;
  • O bit MF (more fragments) no campo Flags será configurado em 1 para todos os fragmentos exceto o último, que terá o valor 0 ajustado;
  • O campo Offset do Fragmento será configurado (em 1), baseado no deslocamento do fragmento no campo de dados original, em unidades de blocos de oito bytes.
  • O checksum do cabeçalho deve ser recalculado.

Assim, se tivermos um MTU de 1500 bytes e pacotes padrão com cabeçalho de 20 bytes, os offsets (deslocamentos) dos fragmentos serão múltiplos de (1500-20)/8 = 185, como por exemplo 0, 185, 370, etc.

Exemplo de fragmentação de datagramas IP

Vamos supor que um segmento da camada de transporte tenha um tamanho total de 4000 bytes, sem o uso de opções, e que esse segmento será enviado em pacotes IP de cabeçalho padrão de 20 bytes.

O tamanho total do pacote IP gerado teria então 4020 bytes (4000 + 20). Vamos assumir também um caso típico que é o do envio desse pacote por um link cujo MTU é de 1500 bytes – portanto, o pacote deverá ser fragmentado por exceder esse tamanho.

O pacote será fragmentado da seguinte forma:

Fragmento Bytes totais Bytes do cabeçalho Bytes de Dados Flag MF Offset do fragmento
1 1500 20 1480 1 0
2 1500 20 1480 1 185
3 1060 20 1040 0 370

O primeiro offset será igual a zero. O segundo offset será igual a 0 + (Bytes de Dados / 8) = 0 + 1480/8 = 185.

O terceiro offset será igual ao segundo offset (185) + (Bytes de dados / 8) = 185 + 1480 / 8 = 185 + 185 = 370.

A figura a seguir ilustra o exemplo de fragmentação apresentado:

Fragmentação de Datagramas IP - Curso de Redes

Podemos recalcular o tamanho total do pacote a partir do offset do último fragmento e do tamanho em bytes de seus dados, da seguinte forma:

Tamanho total = offset x 8 + bytes de dados

Em nosso exemplo:

Tamanho total = 370 x 8 + 1040 = 2960 + 1040 = 4000 bytes.

Remontando os fragmentos

Quando os pacotes chegam a seu destino, eles devem ser remontados para que possam ser processados.

Um receptor sabe que um pacote é um fragmento caso o flag MF esteja ativo (exceto no último fragmento), e caso o campo Offset do Fragmento possua um valor diferente de zero (exceto para o primeiro fragmento).

O receptor então irá utilizar as informações presentes nos campos de endereços IP de origem e destino, identificação do protocolo e identificação do cabeçalho IP para reconstruir o pacote original a partir dos fragmentos recebidos.

Fragmentos que possuam a mesma identificação pertencem ao mesmo pacote, e o campo offset do fragmento permite ordenar esses fragmentos. Ao receber o último fragmento, que possui o flag MF igual a zero, o receptor pode então calcular o tamanho do campo de dados multiplicando o offset do último fragmento por 8, e adicionando o tamanho do último fragmento, como mostramos na seção anterior.

Neste ponto, o pacote remontado é enviado para a camada de nível superior na pilha de protocolos (camada de transporte) para processamento.

Anterior: Estrutura de um Pacote IPv4

Sobre Fábio dos Reis (1273 Artigos)
Fábio dos Reis trabalha com tecnologias variadas há mais de 25 anos, tendo atuado nos campos de Eletrônica, Telecomunicações, Programação de Computadores e Redes de Dados. É um entusiasta de Unix, Linux e Open Source em geral, adora Eletrônica e Música, e estuda idiomas, além de ministrar cursos e palestras sobre diversas tecnologias em São Paulo e outras cidades do Brasil.
Contato: Website

1 Trackbacks & Pingbacks

  1. Estrutura de um Pacote IPv4 - Redes de Computadores - Bóson Treinamentos em Tecnologia

Escreva um comentário

Seu e-mail não será divulgado


*