O campo Flags é um conjunto de 3 bits localizado no cabeçalho do datagrama IPv4, logo após o campo de Identification e antes do Fragment Offset. Sua função exclusiva é controlar o comportamento da fragmentação e auxiliar na reordenação e remontagem dos pacotes no destino final.

A fragmentação é um processo necessário quando um datagrama IP é maior que a unidade máxima de transferência (MTU) de uma rede física pela qual ele precisa passar. O campo Flags, em conjunto com o Identification e o Fragment Offset, fornece as instruções críticas para que os roteadores saibam se podem partir o pacote e para que o host de destino saiba como juntar as peças novamente.

Os três bits são numerados de 0 a 2 (da esquerda para a direita, dentro do byte), mas apenas os dois últimos têm funções ativas definidas no protocolo atual.

1. Bit 0: Reservado (Reserved Bit)

  • Posição: Bit mais significativo do campo de 3 bits.
  • Valor: Deve ser 0.
  • Função: Este bit não possui utilidade atual no protocolo IPv4 padrão. Ele foi originalmente reservado para uso futuro, mas a convenção padrão exige que seja definido como zero na transmissão e ignorado na recepção.
  • Implicação: Roteadores e hosts descartam ou tratam como inválidos pacotes que tenham este bit definido como 1, a menos que estejam usando implementações proprietárias ou experimentais específicas (o que é raro e incompatível com a Internet pública).

2. Bit 1: DF (Don’t Fragment - Não Fragmentar)

Este é o bit de controle de permissão. Ele dá poder ao remetente para proibir a fragmentação do datagrama.

  • Valor 0 (Fragmentação Permitida): Se este bit estiver desligado (0), o roteador tem permissão para fragmentar o datagrama caso ele seja maior que a MTU do próximo enlace. É o comportamento padrão para tráfego comum.
  • Valor 1 (Não Fragmentar): Se este bit estiver ligado (1), o roteador não pode fragmentar o pacote sob nenhuma circunstância.
    • Consequência da Violação: Se um roteador precisa encaminhar um datagrama com o bit DF=1, mas o tamanho do pacote excede a MTU do enlace de saída, o roteador descarta o pacote.
    • Notificação (ICMP): Ao descartar o pacote, o roteador deve enviar uma mensagem de erro ICMP de volta ao remetente (Tipo 3, Código 4: Destination Unreachable / Fragmentation Needed and DF Set).
  • Aplicação Prática (PMTUD): Este mecanismo é a base da Descoberta do MTU do Caminho (Path MTU Discovery - PMTUD). Um host envia pacotes com DF=1. Se o pacote chegar, o MTU é adequado. Se receber um erro ICMP, o host reduz o tamanho do pacote e tenta novamente. Isso evita a ineficiência da fragmentação no meio do caminho, delegando o trabalho de ajuste de tamanho para as pontas.

3. Bit 2: MF (More Fragments - Mais Fragmentos)

Este é o bit de sequência e terminação. Ele informa ao receptor se o fragmento atual é o último pedaço do datagrama original.

  • Valor 0 (Último Fragmento ou Sem Fragmentação):
    • Se o pacote não foi fragmentado, o MF será 0 e o Fragment Offset também será 0.
    • Se o pacote foi fragmentado, o valor 0 indica que este é o último fragmento do datagrama original. Isso avisa ao receptor que ele já possui todas as peças necessárias para começar a remontagem completa do datagrama.
  • Valor 1 (Mais Fragmentos Pendentes): Indica que este fragmento não é o último. Existem mais fragmentos deste mesmo datagrama chegando subsequentemente. O receptor deve manter este fragmento em buffer e aguardar os próximos antes de tentar processar os dados.

4. Lógica Funcional dos Flags em Cenários Reais

Para entender a interação desses flags, considere o fluxo de dados de um arquivo grande que atravessa uma rede com MTU pequena:

  1. Envio Original: O host cria um datagrama com 5000 bytes. O bit DF está em 0 (permite fragmentação).
  2. No Roteador: O roteador vê que o enlace seguinte suporta apenas 1500 bytes. Ele divide o datagrama original em 4 fragmentos.
  3. Configuração dos Fragmentos:
    • Fragmento 1: Contém os primeiros 1480 bytes de dados. MF = 1 (há mais). Offset = 0.
    • Fragmento 2: Contém os próximos 1480 bytes. MF = 1. Offset = 185 (1480 / 8).
    • Fragmento 3: Contém os próximos 1480 bytes. MF = 1. Offset = 370.
    • Fragmento 4: Contém o restante dos bytes. MF = 0 (é o último). Offset = 555.
  4. Recebimento: O host de destino vê o bit MF=1 nos três primeiros pacotes e os bufferiza. Ao receber o quarto pacote com MF=0, ele sabe que o conjunto está completo e pode remontar o arquivo original.

5. Resumo Binário

Visualmente, em um byte que compartilha espaço com o início do Fragment Offset, a configuração dos 3 bits de Flags seria representada assim (Bit 7..5 = Flags, Bit 4..0 = Início do Offset):

  • Normal: 000 (Reservado=0, DF=0, MF=0)
  • Último Fragmento: 000
  • Fragmento Intermediário: 001
  • Proibir Fragmentação: 010 (DF=1, MF=0)