(Internet Protocol ou Internet Protocol versão 4)
IP é um protocolo trabalha na camada de rede do modelo OSI. Ele tem como característica de ser sem conexão e não-confiável. Isso, porque os datagramas são independentes. Eles podem circular por diversos lugares, podem ser descartados, chegarem atrasados, fora de ordem ou serem entregues com erros. Ao tratar o assunto, Cordeiro (2001, p. 45) sintetiza que cada datagrama IP é tratado como uma unidade independente que não possui relação com qualquer outro datagrama. Salvo em casos de fragmentação. O pacote pode ser perdido, reproduzido ou atrasar-se sendo que a camada de rede não detectará tais condições.
Atualmente o IP está na versão 4 e o seu datagrama é composto por um cabeçalho que pode variar de 20 à 60 bytes. Essa variação ocorre devido ao campo options, onde dependendo das opções usadas, o tamanho do cabeçalho IP pode mudar. Veja na figura 5 o formato do datagrama IP e em seguida os conceitos de cada campo, sendo realizada uma síntese de acordo com Soares, Lemos e Colcher (1995); Tanenbaum (1997); Diógenes (2004); Comer (1998); Firewall.cx [200-?]; Postel (1981a):
Fonte: Postel (1981a, p. 11) adaptado.
- Version: versão que foi usada para criar o datagrama IP. Este campo é de 4 bits;
- IHL (Internet Header Length): informa o comprimento do cabeçalho IP. Esse comprimento é variável, pois depende das opções usadas no campo Options. O campo do IHL é de 4 bits, o que representa 16 números em decimal, assim ele pode variar de 0 à 15 (0000 à 1111). Só que cada número nesse campo é equivalente a uma DWord (Double Word) que é igual a 4 bytes. Então, para o valor encontrado nesse campo se deve multiplicar por 4. Ex: se o valor encontrado for 8, então o tamanho do cabeçalho será 8x4 que é igual a 32 bytes. O tamanho mínimo de um cabeçalho IP é 20 bytes (não incluindo opções). Com isso, o campo IHL deve ter no mínimo 5, pois 5x4 é igual a 20. Caso se utilize opções, o tamanho máximo que o IHL poderá alcançar é 60 bytes, pois 15x4 é igual a 60;
- Type of service ou ToS: determina o tipo ou a qualidade de serviço (prioridade, atraso, vazão, confiabilidade, custo) que deve ser oferecida pelas redes ao datagrama, em outras palavras, como o datagrama IP será manuseado pelos roteadores. Contém os campos precedência (3 bits), d ou low delay (1 bit), t ou high throughput (1 bit), r ou high reliability (1 bit), c ou low cost (1 bit) e MBZ ou must be zero (1 bit / uso futuro). Se nenhum bit é configurado quer dizer que o datagrama receberá o serviço normal conhecido como melhor esfoço. Vale ressaltar que a qualidade de serviço (QoS) solicitada por este campo ToS é uma sugestão de como os roteadores devem lidar com os datagramas, pois nem sempre será possível garantir tal qualidade de serviço:
- Precedência: como foi dito o campo precedência contém 3 bits (000 até 111), sendo que 000=Routine, 001=Priority, 010=Immediate, 011=Flash, 100=Flash Override, 101=Critic/ECP, 110=Internetwork Control e 111=Network Control. Os valores 000 à 101 indicam qual a importância do datagrama, onde 000 é normal e o 101 é o mais importante). O 110 (Internetwork Control) diz que a precedência será controlada somente pelos roteadores que estão entres as rede de origem e destino. O 111 (Network Control) diz que a precedência será controlada somente dentro das redes de origem e destino,
- Low delay ou atraso baixo: é a solicitação do menor tempo para um datagrama viajar da origem para o destino,
- High throughput ou alta vazão: é a solicitação da maior quantidade de bytes ou o volume de dados possível em uma transferência durante um espaço de tempo,
- High reliability ou alta confiabilidade: é o pedido do melhor esfoço para que um datagrama chegue sem erros ao destino,
- Low cost ou custo baixo: é o pedido da menor quantidade possível de roteadores para que um datagrama chegue ao seu destino,
- MBZ ou must be zero: essa flag deve conter o valor "0" e está reservada para uso futuro,
- Differentiated services field: este campo na verdade é uma redefinição do Type of Services (RFC 2474). Os primeiros 6 bits são usados para o QoS e é conhecido como DSCP (Differentiated Services CodePoint). Os últimos 2 bits são usados para controle explícito de congestionamento e são conhecidos como ECT ou ECN-CT (Expliced Congestion Notification - Capable Transport) e ECN-CE (Expliced Congestion Notification - Congestion Experienced):
- DSCP: usa 6 bits (000000 - 111111) o que representa 64 números em decimal. Assim, podem existir 64 opções para os mais diferentes tipos de qualidade de serviço (low delay, high througput etc) e também para testes,
- ECT ou ECN-CT: esta flag é usada para indicar aos roteadores que os host finais estão trabalhando com notificação de congestionamento explícita ao trocar dados com o protocolo TCP (camada de transporte). Assim, sempre que a origem e o destino decidirem trabalhar com controle explícito de congestionamento, eles deves ligar esta flag ECT no cabeçalho IP,
- ECN-CE: quando a rede está congestionada, datagramas são descartados pelos roteadores. Se algum desses datagramas possuir a flag ECT ligada, o roteador envia um datagrama para o receptor (destino do datragrama descartado) com esta flag ECN-CE ligada. Com isso, mostra ao receptor que houve congestionamento e que um datagrama foi descartado,
- Total length: especifica o tamanho do datagrama IP (cabeçalho e dados) e é usado para que o transmissor ou os roteadores saibam se existe a necessidade de fragmentar o datagrama. Este campo é de 16 bits, o que representa 65536 números em decimal (0 à 65535) ou 65536 números em binário (0000.0000.0000.0000 à 1111.1111.1111.1111). Só que cada número neste campo é equivalente a 1 byte. Então, se este campo contiver 1452, o comprimento total do datagrama IP é 1452 bytes. O tamanho mínimo deste campo vai depender do protocolo que vem logo depois do cabeçalho IP (ex: ICMP, UDP, TCP). Se for TCP, o mínimo é de 40 bytes, ou seja, 20 do cabeçalho IP e 20 do TCP. Já o máximo é 65535 bytes. Somente como curiosidade, se o protocolo de camada de enlace for o Ethernet versão 2, então o tamanho máximo que o Total Length poderá alcançar é 1500 bytes, visto que o protocolo Ethernet só comporta no máximo 1500 bytes de dados (ver tópico 4.1.3.9). Caso o valor ultrapasse os 1500, usando o ethernet versão 2, então a origem ou o roteador terá que fragmentar o datagrama. Mas isso dependerá se a flag DF está ligada ou não. Também, se conclui que com o Ethernet, o tamanho máximo de dados de um segmento TCP (MSS) é de 1460 bytes, pois no mínimo o cabeçalho IP e TCP terão 40 bytes (1500-40=1460);
- Identification: identifica unicamente um datagrama, mas quando um datagrama é fracionado, esse campo identifica os fragmentos pertencentes ao mesmo datagrama. Assim, será possível ao destino remontar o datagrama original. Vale ressaltar que todos os fragmentos de um mesmo datagrama têm valores de identificação iguais. Este campo é de 16 bits;
- Flags: controlam a fragmentação. Este campo possui três bits e se divide em três partes:
- RB (Reserved Bit): não é utilizado,
- DF (Don't Fragment): quando desligado, permite aos transmissores ou roteadores fragmentar o datagrama. Quando ligado, não permite os roteadores fragmentarem o datagrama sob quaisquer situação. Então essa tarefa fica a cargo no transmissor,
- MF (More Fragments): quando zero, aponta que é o último fragmento do datagrama ou que o datagrama não foi fragmentado. Quando um, indica a existência de mais fragmentos,
Obs2: o receptor não processa os fragmentos, ou seja, não os mandam para a camada subsequente do modelo OSI, até que todos tenham chegado, formando novamente o datagrama original. - Fragment offset: identifica a posição do fragmento em relação ao datagrama original para reagrupamento dos fragmentos no destino na ordem correta. O primeiro fragmento ou quando o datagrama não é fragmentado o conteúdo do offset é zero. Este campo é de 13 bits;
- Time to live: também conhecido como TTL, é o tempo de vida do datagrama, evitando loops infinitos na rede. Roteadores devem decrementar esse campo cada vez que o datagrama passar por eles e devem descartá-lo quando seu tempo de vida expirar, atingindo zero. Este campo é de 8 bits;
- Protocol: especifica o protocolo que vem logo depois do cabeçalho IP. Pode ser um protocolo da camada de rede ou da de transporte, ou seja, o que está sendo transportado na área de dados do pacote IP. Por exemplo, se esse campo contiver 0x01, é o ICMP. Se contiver 0x06 é o protocolo TCP. Se contiver 0x11 é o UDP. Este campo é de 8 bits;
- Header checksum: garante a integridade de todos os campos do cabeçalho IP. Vale lembrar que o valor desse campo sempre será recalculado ao passar por um roteador, devido ao campo TTL, que faz parte do cabeçalho, ser modificado. Este campo é de 16 bits;
- Sousce address e destination address: endereço IP de origem e de destino, respectivamente. Cada campo tem um comprimento de 32 bits;
- Options: pode incluir mais informações ao cabeçalho como erros, depuração, hora, informações de segurança e de roteamento. A quantidade de bits ocupada por esse campo é variável dependendo das opções utilizadas;
- Padding: enchimento automático que assegura que o comprimento do cabeçalho IP seja múltiplo inteiro de 32 bits. Vale ressaltar que é preenchido com zeros. A quantidade de bits ocupada por esse campo é variável dependendo das opções utilizadas no campo Options;
- Data: são os dados propriamente ditos, podendo conter o cabeçalho da camada de transporte e dados ou algum outro cabeçalho da camada de rede juntamente com seus dados;