Datagramas IP (Protocolo Internet)

Datagrama IPv4

Um datagrama IP, consiste de duas partes: cabeçalho e o campo de dados que transporta o IP de origem e o IP de destino.

O cabeçalho possui uma parte fixa de 20 bytes e um campo “Options” de tamanho variável. O formato do datagrama IPv4 é mostrado na figura abaixo:

O campo “Version”, armazena a versão do protocolo a que o datagrama pertence, na versão 4 possui tamanho de 4 bits (0100).

O segundo campo, de quatro bits, é o “IHL” (acrônimo para Internet Header Length, ou seja, Comprimento do Cabeçalho da Internet), com o número de palavras de 32 bits no cabeçalho IPv4.

Como o cabeçalho IPv4 pode conter um número variável de opções, este campo essencialmente especifica o offset para a porção de dados de um datagrama IPv4.

O campo “Type of service”, representa os 8 bits seguintes. A intenção original era para um nó (roteador) especificar uma preferência para como os datagramas poderiam ser manuseados assim que circulariam pela rede. Na prática, o campo ToS não foi largamente implementado.

O campo “Total Length” é o campo seguinte de dezesseis bits do IPv4, define todo o tamanho do datagrama, incluindo cabeçalho e dados, em bytes de oito bits. O datagrama de tamanho mínimo é de vinte bytes, e o máximo é 64 Kb.

O tamanho máximo do datagrama que qualquer nó requer para estar apto para manusear são 576 bytes, mas os roteadores mais modernos manuseiam pacotes bem maiores.

O campo “Identification” é um campo de identificação de 16 bits. Este campo é usado principalmente para identificar fragmentos identificativos do datagrama IP original.

Flags → O campo é utilizado para identificar e controlar fragmentos, o campo é composto por três (3) bits.

Offset → O campo é constituído por 13 (treze) bits, o offset permite que o receptor do datagrama determine o local do fragmento do pacote IP original.

TTL → O campo (time to live) ou tempo de vida do pacote, é composto por oito (8 bits), o campo tem a funcionalidade de evitar que o pacote fique percorrendo em loop sem encontrar o destino final, evitando que o datagrama IP persista. Sem o campo TTL, teríamos muitas requisições na rede mundial (Internet), o que causaria uma enorme lentidão da rede (delay), ou até mesmo, o travamento de alguns dispositivos de borda (roteadores ). O campo TTL limita a vida útil do pacote em segundos, onde cada roteador que o datagrama atravessa, é decrementado o valor do TTL que se inicia no número cento e vinte e oito (128), quando o valor chega a 0 (zero), o pacote é descartado, o TTL é considerado como uma contagem de hops (saltos).

Protocol → O campo é constituído por oito (8) bits, é neste campo que é realizado a definição de qual é o protocolo usado na porção de dados de um pacote IP. Existe a possibilidade de ser o TCP, mas há também o UDP e outros. A numeração que se aplica a todos protocolos da Internet é definida na RFC 1700.

Checksum → O campo é responsável por detectar inconsistência no datagrama IP, realizando uma checagem cíclica de todos os campos de um datagrama e identificar se nos HOPS (saltos), onde o datagrama percorreu, se não houve nenhuma falha.

Um pacote em trânsito é alterado por cada ponto (roteador) na rede por onde passa, e um destes pontos pode comprometer a integridade do pacote e o campo checksum é uma forma mais simples de detectar falhas no pacote IPv4.

Endereço de origem e destino → O campo é responsável em trafegar os endereços IPv4 de origem e destino composto por 32 bits cada, segmentado em quatro octetos de oito bits. No caso do IPv6, o campo é composto por 128 bits cada endereço.

A seguir, mostrarei as especificações do novo datagrama IPv6 e comentar as mudanças.

Datagrama IPv6

Como vimos, o cabeçalho IPv4 é composto por 12 campos fixos, responsáveis por fazer com que o tamanho varie de 20 a 60 Bytes. Nesta seção, veremos as novas especificações do datagrama versão 6, que possui um total de apenas oito campos (incluindo source e destination address) e um valor fixo de 40 bytes para o cabeçalho.

Sendo assim, ele ficou mais flexível e eficiente com a adição de cabeçalhos de extensão que não precisam ser processados por roteadores intermediários. A nova versão do datagrama IPv6 ficou assim:

Assim, o cabeçalho IPv6 ficou dividido nos seguintes campos:

* O campo “Versão”, possui 4 bits representando a versão do datagrama 0110.

  • Traffic Class (8 bits) → Esse campo é responsável por distinguir os pacotes que podem ter o controle de fluxo alterado. Na prática, funcionaria da seguinte forma: os campos com valores menores teriam a sua velocidade mais reduzida, ou seja, sofreriam um maior retardo diante de um congestionamento do que os datagramas com valores maiores que são destinados ao tráfego em tempo real. O áudio e video fazem parte dessa última categoria.
  • Flow label (24 bits) → Permite com que se realize um fluxo de pacotes entre dois hosts com características especiais, utilizando um identificador atribuído a ele. Em termos práticos, seria conseguir realizar uma pseudo-conexão baseada em circuitos virtuais.
  • Payload Length (16 bits) → Tamanho, em bytes do datagrama com exceção do cabeçalho que possui 40 bytes, ou seja, o tamanho total do bloco de dados (source address e destination address). Lembrando que os cabeçalhos de extensão, quando inseridos no datagrama, fazem parte dessa contagem.
  • Next Header (8 bits) → Caso seja o último cabeçalho, identifica qual o protocolo da camada de transporte será utilizado para transmissão dos pacotes (TCP/UDP e outros), caso contrário, qual dos seis cabeçalhos de extensão serão anexados ao datagrama.
  • Hop Limit (8 bits) → Número máximo de saltos (roteadores) que um pacote pode ter para caso haja algum erro nas tabelas de roteamento, por exemplo. A cada hop (salto), o valor desse campo vai ser subtraído por 1 bit, caso atinja o valor 0 (zero), será descartado.
  • Source Address (128 bits) → Endereço de origem do datagrama.
  • Destination Address (128 bits) → Endereço de destino do datagrama.

Gostaria de enfatizar algumas funcionalidades dos campos Traffic Class e Flow Label.

“ Os campos Priority (Traffic Class) e Flow Label, têm por finalidade, a facilitação de implementação de aplicações em tempo real e com Qualidade de Serviço (QoS).

O primeiro determina a prioridade que um pacote ou grupo destes deve receber. Deve-se utilizar valores de 0 a 7 para aqueles que podem sofrer atraso, como por exemplo, aplicações de FTP e HTTP; e valores de 8 a 15 para aqueles com tráfico em tempo real, que não devem ser atrasados, como aplicações de vídeo e sons.

Já o segundo campo, ainda em fase experimental, permitirá que dois hosts estabeleçam uma pseudo-conexão (circuitos virtuais) com características específicas. Esta conexão será unicamente identificada pelos endereços IP de envio e destino e pelo valor do campo Flow Label.

Deste modo, será possível prover tratamento diferenciado para diferentes fluxos, de acordo com as necessidades de cada um. ”

[Tanenbaum, 1997]

Cabeçalhos de extensão

Diferente do IPv4, que inclui no cabeçalho base todas as informações opcionais, o IPv6 trata essas informações através dos cabeçalhos de extensão.

As novas especificações do IPv6 definem seis cabeçalhos de extensão:

  1. Hop-by-Hop Options
  2. Destination Options
  3. Routing
  4. Fragmentation
  5. Authentication Header
  6. Encapsulating Security Payload

A criação dos cabeçalhos de extensão do IPv6, teve a finalidade de aumentar a velocidade de processamento nos roteadores. De acordo com a necessidade, novos tipos de cabeçalho de extensão podem ser criados, permitindo assim, maior flexibilidade na adição de mais opções no futuro. Isto permitirá que o protocolo evolua, dentro de certos limites, à medida que haja necessidade.

Na próxima seção, veremos mais detalhes com relação aos cabeçalhos de extensão.

Cabeçalhos de extensão

Antes de iniciarmos a seção sobre cabeçalhos de extensão, é importante analisarmos o formato e a lógica com que eles foram organizados.

Primeiramente, estes cabeçalhos devem ser transportados segundo uma ordem com o objetivo de evitar que os nós (roteadores) intermediários tenham que analisar toda a cadeia de cabeçalhos, para decidir quais cabeçalhos devem processar.

Desta forma, os cabeçalhos mais importantes para o roteamento (nós intermediários), devem ser colocados antes daqueles cabeçalhos que são importantes apenas para os destinatários.

A grande vantagem em termos de desempenho, é que os roteadores intermediários podem parar de processar os cabeçalhos do datagrama assim que encontrar algum cabeçalho de extensão encaminhado ao destinatário, com exceção das informações do cabeçalho de extensão hop-by- hop, que como veremos a seguir, devem ser analisados por todos roteadores intermediários, caso este cabeçalho de extensão esteja presente.

Atualmente, há seis tipos de cabeçalhos de extensão, todos eles são opcionais, mas, se houver mais de um deles, eles aparecerão imediatamente depois do cabeçalho fixo e, na ordem listada:

  • Hop-by-Hop Options → Informações diversas para os roteadores;
  • Destination Options → Informações adicionais para o destino;
  • Routing → Rota parcial ou integral a ser seguida;
  • Fragmentation → Gerenciamento de fragmentos de datagrama;
  • Authentication Header → Verificação de identidade do transmissor;
  • Encapsulating Security Payload → Informações sobre o conteúdo criptografado.

Hop-by-hop

O cabeçalho “hop-by-hop” é identificado pelo valor 0 (zero) no cabeçalho “Next Header” e possui, informações que todos os roteadores ao longo do caminho devem examinar.

O formato do cabeçalho hop-by-hop, pode ser visto a seguir:

Linux: Datagramas

“ Não são permitidos datagramas com menos de 65.536 bytess e, nesse caso, serão descartados no primeiro roteador, que envia uma mensagem de erro ICMP.

O uso de datagramas que utilizam este cabeçalho de extensão, são chamados de jumbogramas. O uso de jumbogramas é importante para as aplicações de supercomputador, que devem transferir gigabytes de dados pela Internet com grande eficiência. ”

[Tanenbaum, 1997]

O formato do cabeçalho de extensão hop-by-hop (jumbogramas) pode ser visto a seguir:

Linux: Datagramas

Destination Options

Este cabeçalho é identificado pelo valor 60 no campo “Next Header”, este cabeçalho deve ser processado apenas pelo host de destino.

Ele é utilizado no suporte ao mecanismo de mobilidade ao IPv6, através da opção Home Address que contém o IP de origem do host móvel, quando está em trânsito.

Routing

Este cabeçalho é identificado pelo valor 43 no campo “Next Header” e exibe um ou mais roteadores, que devem ser visitados no caminho para o destino.

O formato do cabeçalho routing, pode ser visto a seguir:

Linux: Datagramas

“ Os primeiros bytes do cabeçalho de extensão de roteamento contêm quatro inteiros de 1 byte: o primeiro byte indica o próximo cabeçalho, o segundo o tipo de roteamento, o terceiro os números de endereços presentes nesse cabeçalho (1 a 24) e o quarto, o índice do próximo endereço a ser visitado. O último campo começa em 0 e é incrementado a medida que cada endereço é visitado.

Em seguida, vem um byte reservado seguido de um mapa de bits (bit map) com bits para cada um dos 26 possíveis endereços IPv6 que o sucedem. Estes bits mostram se cada endereço deve ser visitado diretamente depois do que o antecede (roteamento rígido na origem) ou se outros roteadores podem vir entre eles (roteamento flexível na origem). ”

[Tanenbaum, 1997]

Fragmentation

Este cabeçalho é identificado pelo valor 44 no campo “Next Header”, e é utilizado quando o tamanho do pacote é maior do que o MTU – Unidade máxima de transferência em um meio físico.

“ No IPv6 ao contrário do IPv4, apenas o host de origem pode fragmentar o pacote. Os roteadores ao longo do caminho não podem fazê-lo, embora represente uma grande ruptura com o passado, este recurso simplifica o trabalho dos roteadores e faz com que o roteamento seja mais rápido.

Como já dissemos, se um roteador for confrontado com um pacote muito grande, ele o descartará e reenviará um pacote ICMP para a origem. ”

[Tanenbaum, 1997]

Authentication Header e Encapsulating Security Payload

Estes dois cabeçalhos de extensão são identificados pelos valores 51 e 52 nos campos “Next Header” e fazem parte do cabeçalho IPsec.

O funcionamento do IPsec é o mesmo tanto na versão IPv4 quanto IPv6, mas a implementação e utilização foi facilitada na versão IPv6, pois os principais elementos do IPsec está integrada na versão do datagrama IPv6.

Conclusão

Na minha opinião, existem muitos assuntos ligados ao Protocolo IPv6, e a Camada de Internet na arquitetura TCP/IP, por isso, uma série deles deixaram de ser explorados, como os protocolos ARP, RARP e ICMP.

E também, os protocolos de rotemento OSPF (Open Shortest First) e o BGP (Border Gateway Protocol), devido à importância de cada um e a extensão do artigo.

E viva o kernel !!!

Rolar para cima