"Internet Protocol" (IP)

André Moreira (andre@dei.isep.ipp.pt)
Professor Adjunto do Departamento de Engenharia Informática do ISEP

1 Introdução

O protocolo IP teve origem em 1970 no desenvolvimento da ARPANET, esta rede foi depois interligada a outras formando em 1980 um vasto conjunto que passou a ser conhecido por Internet. Com a inclusão do protocolo IP no UNIX, em 1982, um grande número de universidades passou a formar as suas redes que por sua vez também foram ligadas à Internet.

O protocolo IP fornece um serviço de datagramas que é depois usado por outros protocolos de nível superior, tais como o TCP (Transmission Control Protocol) e o UDP (User Datagram Protocol).

O IP é um protocolo que cuja funcionalidade se aproxima da camada de rede (nível 3) do MR-OSI, como tal fornece um serviço de transferência de dados independente da implementação da camada de ligação lógica (nível 2).

A independencia relativamente às camadas inferiores e um esquema de encaminhamento asseguram a comunicação através de redes concatenadas com nível 2 heterogeneo.

Uma transferência de dados entre dois nós usando o protocolo IP pode seguir um caminho em que os dados são transportados pelas mais diversas tecnológias de nível inferior, tais como Ethernet, Token-Ring, ATM, X.25, FDDI, etc. Este facto é totalmente transparente para os nós finais.

O mecanismo de endereçamento é também independente dos níveis inferiores e na "internet" uma administração hierarquica das gamas disponíveis assegura que cada nó possui um endereço universal.

A especificação completa do protocolo IP pode ser obtida na RFC 791, no presente documento são apenas abordados alguns aspectos considerados fundamentais.

2 Endereçamento

O mecanismo de endereçamento do protocolo IP utiliza apenas 4 octetos (32 bits) para designar de um modo universal um nó.

Os quatro bytes que constituem um endereço IP são normalmente representados na notação decimal, separados por um ponto. Destes quatro bytes, alguns são usados para identificar a rede e os restantes para identificar o nó dentro dessa rede. O valor dos primeiros bits (mais significativos) indicam quantos octetos são reservados para cada uma das finalidades. Se o endereço IP se inicia com o bit 0, então trata-se de um endereço de classe A, caso contrário trata-se de uma rede de classe B ou C quando o 2º bit possui respectivamente o valor 0 ou 1.

A mascara de rede define a parte do endereço IP que é usada para rede e para host, sendo a parte de rede preenchida com bits 1 e a parte de host com bits 0, normalmente a mascara é representada em notação hexadecimal, com os octetos separados por um ponto.

Devido a terem utilizações especiais, os endereços com todos os bits zero ou um são reservados. A rede 127 é reservada para testes de loopback, nomeadamente o endereço de "host" 127.0.0.0 corresponde sempre ao proprio "host".

A tabela seguinte apresenta um resumo dos endereços de rede e nó (host).

Classe da rede: A B C
Valores para o primeiro byte 1 a 126 128 a 191 192 a 223
Mascara de rede (HEX) FF.00.00.00 FF.FF.00.00 FF.FF.FF.00
Número de bits para rede 7 14 21
Primeira rede 1 128.1 192.0.1
Última rede 126 191.254 254.255.254
Número de redes possíveis 126 16382 2097150
Número de bits para host 24 16 8
Primeiro host de cada rede 0.0.1 0.1 1
Último host de cada rede 255.255.254 255.254 254
Número de hosts por rede 16777214 65534 254

Para "broadcast" numa rede é utilizado o número de "host" mais elevado (todos os bits a 1), o "broadcast" apenas se refere a uma dada rede, sendo por isso usado apenas em aplicações de rede local.

A tabela seguinte apresenta um exemplo para cada classe de rede:

Classe da rede: A B C
Número de rede 120 180.10 194.120.135
Endereço de "broadcast" 120.255.255.255 180.10.255.255 194.120.135.255

2.1 Sub-Redes

A motivação da definição de várias classes de redes suportando quantidades diversas de nós (hosts) é evidente: permitir uma melhor adaptação à realidade das organizações. Na prática verifica-se contudo que três classes se revelam insuficientes para todo o tipo de situações.

Quando um organização necessita de uma grande quantidade de redes IP a solução consiste na sub-divisão de uma rede atribuida em várias sub-redes. O processo é meramente interno e não deve transparecer para o exterior (RFC 950), consiste em reservar alguns dos bits mais significativos da parte de "host" para identificar a sub-rede. Por exemplo uma rede de classe C utiliza 8 bits para o host, deste oito podemos reservar alguns dos mais significativos para sub-rede e os restantes para host, a seguinte apresenta alguns casos possíveis.

Algumas Sub-Redes de Classe C

Bits para sub-rede 2 3 4 5
Mascara de rede FF.FF.FF.C0 FF.FF.FF.E0 FF.FF.FF.F0 FF.FF.FF.F8
Número de sub-redes 2 6 14 30
Hosts por sub-rede 62 30 14 6

Como se pode verificar continua a ser necessário evitar os número de host e rede com todos os bits a zero ou um, este facto diminui o aproveitamento dos endereços (por exemplo com a mascara FF.FF.FF.F0 obtem-se um total de 196 hosts (14 x 14), contra um total de 254 com a mascara FF.FF.FF.00), contudo, a utilização de sub-redes justifica-se em muitos casos.

A título de exemplo, considere-se a divisão da rede de classe C 193.123.42 em 14 sub-redes de 14 hosts cada, utilizando portanto a máscara FF.FF.FF.F0. Na tabela seguinte apresentam-se alguns algumas caracteristicas dessas sub-redes:

Sub-rede Primeiro Host Último Host Broadcast
193.123.42.(1) 193.123.42.17 193.123.42.30 193.123.42.31
193.123.42.(2) 193.123.42.33 193.123.42.46 193.123.42.47
193.123.42.(3) 193.123.42.49 193.123.42.62 193.123.42.63
... ... ... ...
193.123.42.(13) 193.123.42.209 193.123.42.222 193.123.42.223
193.123.42.(14) 193.123.42.225 193.123.42.238 193.123.42.239

Os valores entre parêntesis indicam números de sub-rede, isto é apenas se referem à parte de sub-rede.

Exercício

  • Determine os endereços do primeiro e último host das restantes sub-redes.
  • Realize o mesmo exercício para a rede 194.34.25, dividida em sub-redes com a mascara FF.FF.FF.E0.

2.2 ARP ("Address Resolution Protocol")

O facto de os endereços serem totalmente independentes dos níveis inferiores tem diversas vantagens, nomeadamente na sua utilização sobre níveis 1 e 2 heterogéneos, contudo coloca alguns problemas:

  • Cada máquina tem necessidade de conhecer inicialmente o seu endereço IP.
  • Para enviar um "datagrama" a uma dada máquina é necessário fornecer à camada de ligação lógica o respectivo endereço físico que não está disponível directamente do endereço IP.

O primeiro problema é resolvido por configuração local estática, geralmente definindo num ficheiro de configuração os dados necessários, existem contudo soluções de configuração centralizada que serão referidas mais tarde.

O segundo problema apenas se coloca quando o nó de destino se encontra na mesma rede (algo que é facil de saber por simples análise dos endereços), quando a máquina de destino não se encontra na mesma rede o "datagrama" é enviado para o "default gateway", trata-se do dispositivo de encaminhamento que assegura a ligação da rede corrente a outras redes.

O protocolo ARP (RFC 826) permite obter, sempre que necessário, o endereço físico de uma máquina mediante o conhecimento do seu endereço IP (encaminhamento directo).

Quando uma máquina pretende enviar um "datagrama" IP a outra máquina cujo endereço IP conhece, usa o protocolo ARP para enviar em “broadcast” um pedido no qual consta o endereço IP de destino. Todas as máquinas escutam o pedido e aquela que possui o endereço IP indicado responde enviando o seu endereço físico.

O protocolo ARP é implementado directamente sobre o nível de ligação lógica e a informação é colocada directamente sobre "tramas". A estrutura dos dados é comum para ARP e RARP (ver adiante). A sequência de campos é a seguinte:

FMAC   (16 bits) - Formato do endereço MAC (de ligação lógica)
FPROT  (16 bits) - Formato do endereço de Rede (no caso IP)
LMAC   ( 8 bits) - Comprimento do endereço MAC
LPROT  ( 8 bits) - Comprimento do endereço de Rede
OPCODE (16 bits) - Comando/Pedido
SMAC	- endereço MAC de origem
SIP	- endereço de rede de origem
DMAC	- endereço MAC de destino
DIP	- endereço de rede de destino

A parte final da estrutura (depois do OPCODE) tem tamanho variável, por exemplo no caso IP sobre Ethernet será de 20 bits (6+4+6+4). O campo OPCODE pode ter um dos seguintes valores que asseguram tanto a operação ARP como RARP:

	1 - ARP request
	2 - ARP reply
	3 - RARP request
	4 - RARP reply

Cada máquina é responsável por manter dinamicamente uma tabela de correspondência entre endereços físicos e endereços IP recentemente usados (tabela ARP), este procedimento reduz a frequência do recurso ao protocolo ARP.

Exercício - Demonstração

Em ambiente UNIX ou Windows em modo de linha de comando.

  • Use o comando arp para obter a tabela (arp -a).
  • Use o comando ping para contactar uma máquina local ausente da tabela e de seguida consulte-a novamente.

É possivel configurar certos nós para funcionarem como servidores de ARP, trata-se de máquinas que vão responder a pedidos ARP que não lhes dizem respeito.

A instalação de um servidor de ARP pode ser útil em termos de segurança. Muitos protocolos de aplicação das redes IP baseiam a segurança no endereço IP de proveniência dos pedidos, com um servidor de ARP um possivel intruso local terá de forjar não só o endereço IP, mas também o endereço MAC correcto.

2.3. BOOTP/DHCP e RARP

O "BOOT Protocol", o "Dynamic Host Configuration Protocol" (RFC 2131) e o "Reverse Address Resolution Protocol" (RFC 903) são utilizados para obtenção dos parâmetros de configuração IP, nomeadamente o endereço IP.

A utilização destes protocolos é muito vantajosa em termos administrativos, a configuração de todas as máquinas é centralizada num "host" onde se instala um servidor adequado (BOOTP/DHCP ou RARP).

O protocolo BOOTP/DHCP é mais completo do que o RARP: enquanto o RARP apenas permite a obtenção do endereço IP, o BOOTP é um protocolo para BOOT de máquinas "diskless", assim permite a obtenção de um ficheiro-imagem para o arranque da máquina, de entre os parâmetros IP fornecidos encontram-se, além do endereço IP, a mascara de rede, uma lista de servidores de nomes e uma lista de "gateways".

Ambos os protocolos utilizam principios semelhantes, emitem em "broadcast" um pacote, o servidor ao receber o pacote verifica o endereço MAC de origem e consulta a sua base de dados para devolver a informação que está associada a esse endereço MAC.

O formato dos pacotes RARP é idêntico ao dos pacotes ARP. O protocolo BOOTP é implementado a um nível totalmente diferente: usa UDP sobre IP, quando o pedido é emitido é usado como endereço de origem 0.0.0.0 (endereço desconhecido) e endereço de destino 255.255.255.255 ("broadcast" na rede corrente).

3. Datagramas IP

O protocolo IP disponibiliza um serviço base de transferência de dados baseado em "datagramas". Cada "datagrama" é totalmente independente dos restantes (serviço não orientado à conexão) e trata-se de um serviço não fiável:

  • não há controlo de erros ou fluxo (nem entre nós intermédios nem entre nós finais)
  • a detecção de erros apenas é assegurada para o cabeçalho dos "datagramas"

Apesar do caracter de elementar do serviço de "datagramas" do protocolo IP, são incluidos alguns mecanismos que o tornam especialmente adequado para comunicações a longa distancia através da concatenação de infra-estruturas de comunicação heterogéneas:

  • esquema de endereçamento simples e universal com facilidades para os mecanismos de encaminhamento.
  • mecanismo de fragmentação e reagrupamento que assegura uma passagem eficiente dos "datagramas" IP através de infra-estruturas com tamanhos máximos de pacote diversos.
  • definição de qualidade de serviço e tempo de vida dos pacotes.
  • notificação de alguns erros básicos via ICMP ("Internet Control Message Protocol").

3.1. Estrutura do "datagrama" IP

Os campos que constituem um datagrama IP são os seguintes:

	---------------------------------------------------------------------
	Versão				(4 bits)
	Internet Header Length (IHL)	(4 bits)
	Tipo de serviço			(8 bits)
	Comprimento Total		(16 bits)
	Identificação			(16 bits)
	Flags				(3 bits)
	Offset de Fragmento		(13 bits)
	Tempo máximo de vida		(8 bits)
	Protocolo			(8 bits)
	CheckSum do cabeçalho		(16 bits)
	Endereço de Origem		(32 bits)
	Endereço de Destino		(32 bits)
	Opções				(numero de bits variável)
	Padding				(assegura que o cabeçalho tem um
					comprimento múltiplo de 32 bits)
	---------------------------------------------------------------------
	Dados				(variável, mas deve ser sempre um
					múltiplo de oito, um "datagrama" IP
					pode ter até 65535 bytes)
	---------------------------------------------------------------------

O primeiro campo contém a versão do protocolo IP, actualmente a versão mais utilizada ainda é a 4 que está a ser descrita neste documento, mas encontra-se em expansão a versão 6 (IPv6). A versão do protocolo condiciona a estrutura do "datagrama" e mecanismos implementados. O campo IHL contém o número de conjuntos de 32 bits que constituem o cabeçalho, o valor mínimo é 5 que corresponde a um cabeçalho de 20 bytes.

O campo "Tipo de serviço". Este campo divide-se na especificação de 8 níveis de prioridade (3 bits), dois níveis de fiabilidade, dois níveis de atraso e dois níveis de capacidade.

O comprimento total do "datagrama" (cabeçalho + dados) é indicado no campo seguinte, o seu valor máximo é de 65535 bytes.

Os 3 campos seguintes (Identificação; Flags; Offset de Fragmento) estão relacionados com o mecanismo de fragmentação/reagrupamento que será abordado adiante.

O tempo máximo de vida é um contador de saltos até à auto-destruição do "datagrama". É inicializado pelo emissor e sempre que o "datagrama" é transferido entre redes por um "router" o seu valor é decrementado em uma unidade, quando chega a zero o "datagrama" é ignorado.

O campo "Protocolo" contém um identificador do protocolo responsável pelos dados que são transportados, trata-se de um simples mecanismo de multiplexagem para permitir a coexistência de vários protocolos a utilizarem o IP como base.

A seguir apresenta-se o exemplo de um ficheiro /etc/protocols de um sistema UNIX, com vários identificadores de protocolo:

#
# protocols	This file describes the various protocols that are
#		available from the TCP/IP subsystem.  It should be
#		consulted instead of using the numbers in the ARPA
#		include files, or, worse, just guessing them.
#

ip	0	IP	# internet protocol, pseudo protocol number
icmp	1	ICMP	# internet control message protocol
igmp	2	IGMP	# internet group multicast protocol
ggp	3	GGP	# gateway-gateway protocol
tcp	6	TCP	# transmission control protocol
pup	12	PUP	# PARC universal packet protocol
udp	17	UDP	# user datagram protocol
idp	22	IDP	# WhatsThis?
raw	255	RAW	# RAW IP interface

# End.

O checksum do cabeçalho é calculado por somatório de todos os conjuntos de 16 bits do cabeçalho, o campo checksum é ignorado neste somatório. Como os valores de alguns campos são alterados nos "routers", estes são obrigados a efectuar o calculo e actualizar este campo antes de procederem à retransmissão do "datagrama".

Pseudo-cabeçalho IP

Os protocolos de nível superior necessitam de usar alguns campos do cabeçalho IP, nomeadamente para cálculo dos seus próprios "checksums", para esse efeito é definida uma estrutura lógica designada por "Pseudo-cabeçalho" IP, contendo os campos necessários:

	Source Address		(32 bits)
	Destination Address	(32 bits)
	ZERO			(8 bits)
	Protocol		(8 bits)
	Data Length		(16 bits)

3.2. Opções

As opções são um campo de comprimento variável onde são incluidos parâmetros que nem sempre são necessários, a existência deste campo de comprimento variável possibilita também extensões à funcionalidade do protocolo, as implementações correntes limitam o comprimento das opções a 40 octetos (neste caso limite o cabeçalho IP fica com 56 octetos). Devido ao comprimento variável das opções é adicionado o campo "padding" (enchimento) assegura um alinhamento de 32 bits do cabeçalho.

Algumas das opções mais comuns são:

  • Marcador de tempo ("Timestamp") - Activando esta opção, cada nó por onde o "datagrama" passa adiciona às opções um marcador com precisão ao milisegundo.
  • Gravação de caminho ("Record Routing") - Trata-se de um campo ao qual os sucessivos nós por onde o "datagrama" passa vão adicionando o seu endereço IP, quando o "datagrama" chega ao destino este campo contém o caminho seguido.
  • "Source Routing" - Permite a definição pelo emissor do caminho que o "datagrama" vai usar (sequência de endereços IP) para chegar ao destino.

3.3. Fragmentação e Reagrupamento

Os "datagramas" IP são encapsulados em "tramas" ou estrutura equivalente do nível de ligação lógica. Para cada tipo de implementação do nível 2 existe uma quantidade máxima de dados que cada "trama" pode transportar, este valor é conhecido por MTU ("Maximum Transmission Unit").

Devido aos diferentes valores de MTU a abordagem [1 datagrama : 1 trama] não é eficiênte pois seria necessário reduzir o tamanho máximo dos "datagramas" ao menor MTU. A solução é implementar um mecanismo de fragmentação/reagrupamento que realize um ajuste automático ao MTU praticado em cada ligação.

A fragmentação dos "datagramas" implica a cópia do cabeçalho original para cada fragmento, os valores dos seguintes campos do cabeçalho IP tornam-se importantes:

	...
	Identificação			(16 bits)
	Flags				(3 bits)
	Offset de Fragmento		(13 bits)
	...
	Protocolo			(8 bits)
	...
	Endereço de Origem		(32 bits)
	Endereço de Destino		(32 bits)
	...

Em cada "router" um "datagrama" IP é sempre reconstituido, só depois é novamente fragmentado para suportar o MTU da ligação seguinte. Para que os "fragmentos" de diferentes "datagramas" não se confundam entre sí, para cada "datagrama" o emissor define um valor para o campo "Identificação" de tal modo que, em conjunto com os campos "Endereço de Origem", "Endereço de Destino" e "Protocolo" defina um valor único.

O primeiro bit do campo "Flags" é colocado a 1 para indicar que existem mais fragmentos a seguir, o valor zero indica que se trata do último fragmento ou que o "datagrama" não foi fragmentado. O segundo bit do campo "Flags" pode ser colocado a 1 para evitar a fragmentação, neste caso se o MTU não suporta o tamanho do "datagrama", este é ignorado. O terceiro bit do campo "Flags" não é utilizado.

O campo "Offset de Fragmento" indica a posição relativa do fragmento no "datagrama" original, o valor é especificado em unidades de 64 bits, por esta razão os fragmentos (excepto o último) têm comprimentos de dados múltiplos de 64 bits. No caso de se tratar de um "datagrama" não fragmentado ou o primeiro fragmento de um "datagrama" este campo possui o valor zero.

4. Encaminhamento

Os mecanismos de encaminhamento ("routing") destinam-se a fazer os "datagramas" chegar ao seu destino, quando existe uma grande quantidade de redes concatenadas esta tarefa pode não ser tão simples como parece.

O "routing" de "datagramas" IP baseia-se em endereços de rede, os dispositivos que realizam o encaminhamento são conhecidos por "routers", ou na terminologia internet por "gateways". Um "router IP" não é mais do que um "host" que possui um endereço IP em mais do que uma rede, com o "software" adequado pode assegurar a transferência de "datagramas" entre as várias redes nas quais possui endereço.

Geralmente um "router" possui mais do que uma interface física, assegurando a transferência de "datagramas" entre técnologias de ligação lógica que podem ser diferentes. Contudo uma rede IP é uma definição lógica, podendo coexistir mais do que uma rede IP a partilhar a mesma rede de ligação lógica, neste caso um "router" de ligação destas redes IP sobrepostas pode assegurar a sua interligação como uma única interface física possuidora de dois endereços IP.

A internet é constituida por um vasto conjunto de redes das quais podemos distinguir duas categorias com diferenças substanciais sob o ponto de vista de "routing":

  • Redes terminais - Redes onde estão instalados os utilizadores. Estas redes constituem normalmente sistemas autónomos, sendo administradas por uma única entidade responsável.
  • Redes de transito - Redes de "backbone" que asseguram a interligação de redes terminais.

As redes de transito são divididas em várias categorias hierarquicas, como por exemplo redes regionais, nacionais e internacionais. Apenas as redes de transito do nível mais baixo estão ligadas a redes terminais, as de nível superior asseguram a interligação entre outras redes de transito.

4.1. Tabelas de Encaminhamento

Uma tabela de encaminhamento é um conjunto de associações (rede, rota 1, rota 2, ...) cada associação regista várias rotas possiveis para atingir a rede indicada. Cada rota é da forma (próximo gateway, métrica), indica qual o "gateway" seguinte para onde deve ser enviado o "datagrama" e qual a métrica associada a essa rota. A métrica é uma medição da eficiência do caminho até ao destino, pode ser definida com base em vários critérios tais como:

  • Atraso na Transmissão
  • Número de "Hops" (nós intermédios)
  • Capacidade das linhas
  • Preço da ligação

Tanto os "hosts" como os "gateways" implementam geralmente tabelas de encaminhamento, as tabelas de encaminhamento podem ser estáticas ou dinâmicas. Uma tabela estática é definida pelo administrador da rede, sempre que se produzem alterações na topologia da rede as tabelas devem ser actualizadas manualmente.

As informações de encaminhamento podem ser trocadas entre "gateways" de modo a actualizar dinamicamente as tabelas. Para o efeito usam-se protocolos de "routing". Os protocolos de "routing" usados nas redes terminais são conhecidos por IGP ("Interior Gateway Protocols"), o mais comum é o RIP ("Routing Information Protocol"), os protocolos usados nas redes de trânsito são conhecidos por EGP ("Exterior Gateway Protocols").

Uma entrada importante nas tabelas de encaminhamento é a "default route". É muitas vezes definida estáticamente, todos os "datagramas" cuja rede de destino não consta na tabela de encaminhamento são enviados para o "gateway" especificado na "default route".

Um sistema autónomo é um conjunto de redes administradas por uma única entidade, a informação de encaminhamento é trocada entre os "gateways" usando um IGP comum, os "gateway" que asseguram a ligação ao exterior ("gateways de fronteira") implementam o mesmo IGP do sistema autónomo mais um EGP para troca de informação com o exterior. A informação IGP numca deve sair para o exterior, por exemplo se o sistema autónomo usa sub-redes esse facto não transparece para o exterior.

4.2. RIP

O protocolo RIP (RFC 1058) é um IGP muito usado no interior de redes terminais para estabelecer dinamicamente as tabelas de encaminhamento nos "hosts" e "gateways". Por se destinar a sistemas autónomos de pequena dimensão o custo máximio admissivel tem o valor 15. Como o custo coincide geralmente com o número de "hops" está limitado sistemas em que o número máximo de "hops" é 15.

Devido às particularidades do RIP as tabelas de encaminhamento possuem uma forma particular, cada entrada é constituida pelos seguintes campos:

	Endereço IP - 	Pode tratar-se do endereço de uma rede ou de um "host"
			particular, o RIP não faz distinção. O valor 0.0.0.0
			é usado para especificar a "default route".
	Gateway - 	Próximo "gateway" da rota.
	Custo da
	interface -	Custo associado à rede por onde o "datagrama" seria enviado
			(desde o "gateway" actual até ao gateway mencionado).
			Geralmente é usado o valor 1 para todos os "hops", a menos
			que as diferenças relativas de eficiência justifiquem
			valores superiores.
	Métrica - 	O método mais usado é o número de "hops" até ao destino
			(supondo todos os "hops" possuem um custo unitário).
	Tempo de Vida - Devido ao tipo de implementação as informações dinâmicas
			de encaminhamento possuem um tempo de vida.

Cada entrada de uma tabela RIP pode ainda conter informação adicional, tais como caracteristicas adicionais da ligação (MTU, Taxa de Transmissão, etc).

A métrica de uma rota é dada pelo somatório dos custos dos "hops" por onde passa, o objectivo do RIP é calcular automaticamente os custos de cada rota de modo a efectuar o encaminhamento mais eficiênte.

Cada "gateway" sabe o por configuração estática o custo de cada rede onde está ligado (interface). O calculo de custos de rotas baseia-se na difusão periodica em "broadcast" das tabelas RIP por cada "gateway".

Quando um "gateway" recebe uma tabela RIP de outro "gateway" adiciona a cada métrica o custo da interface por onde recebeu a informação e actualiza a sua própria tabela RIP.

O tempo de vida é importante, se um "gateway" é desactivado ou uma ligação interrompida um conjunto de rotas ficará inoperacional. Graças ao esgotamento do tempo de vida essas rotas deixam de constar das tabelas RIP porque a difusão periodica por RIP desse informação já não chega aos "gateways". Quando este tipo de situação ocorre os "gateways" possuem ainda um método de indicar aos outros "gateways" que a rota não está acessivel, para o efeito associam-lhe um custo de 16 nas tabelas RIP que difundem.

4.3. Encaminhamento RIP Estático

Nem sempre é necessário implementar a actualização automática das tabelas por RIP. Os protocolos de encaminhamento são especialmente importantes quando existem rotas alternativas para um mesmo destino, caso contrário apenas facilitam a tarefa administrativa.

Em muitos casos um sistema autónomo não está nessas condições e a difusão periodica de tabelas RIP em "broadcast" só contribui para aumentar o tráfego residual nas redes porque a informação difundida é sempre a mesma.

O encaminhamento em redes terminais nas quais não existem rotas alternativas pode muito bem ser feito por definição estática das tabelas de RIP, os "gateways" podem então ser configurados de modo a não difundirem informação RIP pela rede. Na maioria dos casos (redes com um único "gateway") basta definir rotas por defeito, muitas vezes especificando simplesmente o "default gateway".

Quando um "host" não sabe qual o "default gateway" da rede onde se encontra existem várias opções:

  • Pode receber por RIP ("Routing Information Protocol") a indicação de qual o "default gateway" da rede onde se encontra.
  • Numa rede terminal mais complexa (com vários "gateways") o próprio "host" pode possuir uma implementação completa do algoritmo de encaminhamento, recebe as informações de encaminhamento por RIP, e pode tomar a decisão de enviando o "datagrama" para o "gateway" mais adequado.
  • Desde que os "gateways" estejam configurados nesse sentido o "host" pode usar o protocolo ARP. O "host" usa o ARP para enviar o endereço IP de destino. Embora o "host" de destino não esteja acessivel por ARP, o "gateway" adequado responde por ele.

4.4. Protocolo RIP

O protocolo RIP (RFC 1058) transmite a informação encapsulada em "datagramas" UDP, as mensagens RIP são compostas pelos seguintes campos:

	-------------------------
	Comando		(8 bits)	-> Indica o objectivo da
					mensagem
	Versão		(8 bits)	-> Indica a versão do RIP
	ZERO		(16 bits)	-> Deve conter o valor zero
	-------------------------
	AF		(16 bits)	-> Identificador da familia de
					endereços
	ZERO		(16 bits)	-> Deve conter o valor zero
	Endereço IP	(32 bits)	-> Endereço IP de rede, host
					ou "default route"
	ZERO		(32 bits)	-> Deve conter o valor zero
	ZERO		(32 bits)	-> Deve conter o valor zero
	Métrica		(32 bits)	-> Métrica associada
	.........................
	-------------------------

A última parte da mensagem (de "AF" até "Métrica") pode ser repetida até 25 vezes, o campo AF ("Address Family") indica o formato do endereço. O campo AF permite a utilização do RIP em tipos de rede que usam formatos de endereços diversos. No caso do protocolo IP a familia tem o valor 2.

O campo "Endereço IP" indica o objectivo da rota, pode ser um endereço de rede ou host, pode ainda tratar-se da definição da "default route", nesse caso o valor será 0.0.0.0. O "gateway" que fica associado à rota é o endereço de origem do "datagrama" UDP onde esta informação foi colocada.

De 30 em 30 segundos cada "gateway" copia a informação das suas tabelas RIP e envia-a (geralmente por "broadcast") a todos os "gateways" vizinhos.

Quando um "gateway" recebe uma mensagem RIP procede à actualização das suas tabelas, as mensagens RIP são difundidas continuamente pelos "gateways", quando uma entrada da tabela não é actualizada durante 180 segundos é considerada obsoleta e a sua métrica é colocada a 16.

Quando uma entrada da tabela RIP é considerada obsoleta (métrica = 16) inicia-se o procedimento de remoção ("garbage-collect"), para tal é iniciado um temporizador a 120 segundos, se chegar a zero sem que a sua métrica seja alterada é definitivamente removida.

Os valores para o campo "Comando" são os seguintes:

  • 1 - Request
  • 2 - Response
  • 3 - Trace On (obsoleto)
  • 4 - Trace Off (obsoleto)
  • 5 - Reservado (usado pela Sun)

O comando "request" é usado para pedir uma resposta com toda ou parte da tabela RIP, normalmente são realizados por "broadcast" para a porta UDP 520.

O receptor processa individualmente cada entrada, se existe rota para o endereço especificado coloca a métrica apropriada, caso contrário coloca a métrica em 16. Para pedir a totalidade da tabela RIP o emissor deve colocar o valor zero no identificador de familia.

O comando "response" pode ser enviado em resposta a um "request", pode tratar-se de uma actualização regular (30 em 30 segundos) ou uma actualização forçada por se ter verificado uma alteração nas métricas da tabela RIP local.

Quando um comando "response" é recebido o receptor procede à actualização da sua tabela de RIP:

Para cada rota recebida:

	- nova métrica = métrica recebida + custo da interface
	(se maior do que 16 => nova métrica = 16)
	- se não existe localmente esse destino
	e métrica < 16 => adicionar à tabela
	- se já existe esse destino, o "gateway" é o mesmo
	e a métrica a mesma => actualizar o temporizador
	- se já existe esse destino, mas a métrica é menor
	do que a actual, sejam os gateways os mesmos ou
	não => adoptar a menor métrica e desencadear um
	"response" forçado.

5. "Internet Control Message Protocol" (ICMP)

O ICMP (RFC 792) é um protocolo auxiliar que dá informações sobre o funcionamento do protocolo IP, nomeadamente permite notificar os nós IP da ocorrência de determinados tipos de erros.

As mensagens ICMP são transportadas por "datagramas" IP com o identicador de protocolo 1, embora a constituição das mensagem ICMP seja variável, os primeiros 32 bits possuem sempre o mesmo significado:

  • Tipo (8 bits) - Indica o tipo de mensagem, deste valor depende a constituição da parte restante da mensagem.
  • Código (8 bits) - Parâmetro dependente do tipo de mensagem
  • Checksum (16 bits) - Somatório de detecção de erro aplicado a toda a mensagem.

Os principais tipos de mensagem ICMP são:

Destino inatingivel (Destination Unreachable; tipo=5)
O "datagrama" IP não foi entregue, o código indica o tipo de destino não atingido: 0 = Rede; 1 = Host; 2 = Protocolo; 3 = Porta. O código 4 indica que era necessario fragmentar o "datagrama", mas a "flag" que o impede estava activada. O código 5 indica que foi usada a opção "source route" e falhou. Depois do "checksum" existem 32 bits não usados e segue-se o cabeçalho e 64 bits do "datagrama" original.
Tempo excedido (Time Exceeded; tipo=11)
O "datagrama" IP esgotou o tempo de vida antes de chegar ao destino (código=0). O tempo máximo de reagrupamento foi excedido (código=1). Depois do "checksum" existem 32 bits não usados e segue-se o cabeçalho e 64 bits do "datagrama" original.
Problema nos parâmetros (Parameter Problem; tipo=12)
Ocorreu um erro no cabeçalho do "datagrama" IP. Os 8 bits depois do "checksum" indicam o "offset" do octeto onde o erro foi detectado, os 24 bits seguintes não são usados e segue-se o cabeçalho e 64 bits do "datagrama" original.
Redireccione (Redirect; tipo=5)
Existe um "gateway" que permite um envio mais directo para o host (código=0/2) ou rede (código=1/3) de destino. Os 32 bits depois do "checksum" são usados para indicar o endereço IP do "gateway" que deve ser usado. Esta situação apenas se aplica ao primeiro "hop" de um "datagrama", quando o host de origem o envia para um "gateway" menos apropriado. Segue-se o cabeçalho e 64 bits do "datagrama" original.
Congestão (Source Quench; tipo=4)
Indica que um "gateway" ou um "host" ignorou o "datagrama" por esgotamento dos seus "buffers". Depois do "checksum" existem 32 bits não usados e segue-se o cabeçalho e 64 bits do "datagrama" original.
Pedido de Eco / Resposta (Echo / Echo Reply; tipo=8/0)
Mensagem de teste de conectividade, o receptor deve responder (usado pelo comando PING). Quando o campo código possui o valor zero os 32 bits depois do "checksum" são usados para conter um identificador (16 bits) e um número de sequência (16 bits). Segue-se um campo de dados.
Etiqueta Temporal / Resposta (Timestamp / Timestamp Reply; tipo=13/14)
Mensagem de teste de atraso entre dispositivos de rede, funcionamento idêntico ao "Echo", mas em lugar de transportar dados transporta 3 valores de tempo de 32 bits cada: "Originate Timestamp", "Receive Timestamp", "Transmit Timestamp". Correspondem respectivamente ao instante de emissão do pedido, instante de recepção do pedido e instante de emissão da resposta.
Pedido de Informação / Resposta (Information Request / Information Reply; tipo=15/16)
Pedido de determinação do endereço IP da rede corrente. Tem um funcionamento semelhante aos anteriores, mas o objectivo é diferente: este pedido é enviado com endereço IP de origem e destino a zero, a resposta vem com os valores correctos.

As mensagens de erro (Destination Unreachable; Source Quench; Redirect; Time Exceeded; Parameter Problem) transportam o cabeçalho IP do "datagrama" original, mais 64 bits. O cabeçalho IP devolvido permite identificar o "datagrama" no qual ocorreu o erro. Os 64 bits adicionais são importantes porque permitem obter parte do cabeçalho do protocolo de nível superior que estava a ser transportado pelo "datagrama" IP.