"Internet Protocol" Versão 6 (IPv6)

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

O "Internet Protocol" Versão 6 (IPv6) é uma nova versão do "Internet Protocol" Versão 4 (IPv4) em uso actualmente. Nesta nova versão (RFC 1883), também conhecida por IPng ("IP Next Generation"), melhorou-se alguns aspectos de acordo com a grande esperimentação acomulada sobre o IPv4.

Com o crescente número de utilizadores da "Internet" os endereços de 32 bits do IPv4 estão rapidamente a esgotar-se, no IPv6 procede-se a uma expansão de 32 bits para 128 bits, a definição do formato de endereços IPv6 encontra-se na RFC 1884. Alguns campos dos cabeçalhos são eliminados ou transformados em opções, o número de opções disponíveis é aumentado, incluido a possibilidade de transmissão em tempo real e segurança.

Cabeçalho IPv6

Um cabeçalho IPv6 é constituido pelos seguintes campos:

	Versão			(4 bits)
	Prioridade		(4 bits)
	Flow Label		(24 bits)
	Payload Length		(16 bits)
	Next Header		(8 bits)
	Hop Limit		(8 bits)
	Source Address		(128 bits)
	Destination Address	(128 bits)

O campo Versão deve conter o valor 6. O campo Prioridade pode conter um dos seguintes valores:

  • 0=uncharacterized traffic
  • 1="filler" traffic (e.g., netnews)
  • 2=unattended data transfer (e.g., email)
  • 3=(reserved)
  • 4=attended bulk transfer (e.g., FTP, NFS)
  • 5=(reserved)
  • 6=interactive traffic (e.g., telnet, X)
  • 7=internet control traffic (e.g., routing protocols, SNMP)

O campo Flow Label é usado para associar um "datagrama" a um fluxo com caracteristicas especiais tais como qualidade de serviço especial ou tempo-real. Todos os "datagramas" pertencentas a um fluxo possuem os mesmos endereços de origem e destino, a mesma prioridade e o mesmo identificador de fluxo.

O campo Payload Length contém o número de octetos de dados transportados depois do cabeçalho. O campo Next Header identifica o tipo de cabeçalho que se segue (depois do cabeçalho IPv6), são usados os identificadores de protocolo do IPv4, adicionalmente são definidos cabeçalhos de extensão do IPv6 que permitem transportar opções.

O campo Hop Limit é idêntico ao tempo de vida do IPv4, o nó de origem inicializa-o e cada "router" por onde o "datagrama" passa decrementa-lhe uma unidade, se atingir zero antes de chegar ao destino é destruído.

Endereços IPv6

Os endereços de nó IPv6 são constituídos por 128 bits (RFC 1884), a notação aconselhada é a representação hexadecimal de blocos de 16 bits, separados por dois pontos, por exemplo:

	FEDC:BA98:7654:3210:FEDC:BA98:7654:3210

É sugerida a compressão de zeros:

	FEDC:0:0:0:FEDC:0:0:3210	=	FEDC::::FEDC:::3210
	FEDC:0:0:0:0:0:FEDC:3210	=	FEDC::FEDC:3210
	0:0:0:0:0:0:0:FEDC		=	::FEDC
	0:0:0:0:0:0:0:0			=	::

Como os 32 bits menos significativos são em certas condições usados para transportar endereços IPv4 sugere-se também a possibilidade de representar esses bits na forma IPv4, exemplos:

	0:0:0:0:0:0:193.136.68.3
	0:0:0:0:0:FFFF:192.144.52.38

A RFC 1924 sugere outra forma de representação usando base 85, permitindo representar qualquer endereço IPv6 com exactamente 20 caracteres. Foram escolhidos os seguintes 85 caracteres, em ordem crescente:

             '0'..'9', 'A'..'Z', 'a'..'z', '!', '#', '$', '%', '&', '(',
             ')', '*', '+', '-', ';', '<', '=', '>', '?', '@', '^', '_',
             '`', '{', '|', '}', '~'.

Por exemplo o endereço 1080:0:0:0:8:800:200C:417A será representado da seguinte forma:

		4)+k&C#VzJ4br>0wv%Yp

Existem três tipos básicos de endereços IPv6:

  • Unicast - identificam uma única interface.
  • Anycast - identificam um conjunto de interfaces, o "datagrama" será entregue a uma delas.
  • Multicast - identificam um conjunto de interfaces, o "datagrama" será entregue a todas elas.

Não existem endereço de "broadcast", trata-se de um caso particular de Multicast. Ao contrário do que acontecia com o IPv4, no IPv6 as interfaces de ligações dedicadas entre "routers" deixam de necessitar de endereços.

Tal como acontecia com o IPv4 os bits mais significativos indicam o tipo de endereço de que se trata:

Reserved					0000 0000
Reserved for NSAP Allocation			0000 001
Reserved for IPX Allocation			0000 010
Provider-Based Unicast Address			010
Reserved for Geographic-Based Unicast Addresses	100
Link Local Use Addresses			1111 1110 10
Site Local Use Addresses			1111 1110 11
Multicast Addresses				1111 1111

Endereços "unicast"

Tal como acontece para o IPv4 existem alguns endereços com utilizações reservadas:

  • Endereço Desconhecido - 0:0:0:0:0:0:0:0
  • Endereço de Loopback - 0:0:0:0:0:0:0:1

Os endereços "unicast" são identificados por um inicio diferente de 1111 1111. Os endereços "anycast" possuem formato idêntico aos de "unicast".

A estrutura interna de um endereço "unicast" pode ser definida conforme as necessidades, no limite pode considerar-se que não existe qualquer estrutura.

Numa rede local IEEE 802 propõe-se a utilização dos 48 bits menos significativos para armazenar o endereço MAC da interface, este procedimento torna desnecessário o ARP. Os bits seguintes poderão ser usados pela organização para definir sub-redes internas, a parte mais significativa contém um identificador da organização ("subscriber prefix").

Nada impede a implementação de divisões adicionais, por exemplo uma organização pode decidir usar 48 bits para o endereço MAC e dividir a parte restante de que dispõe (até ao "subscriber prefix") em identificador de área e identificador de sub-rede (dentro da área).

Adivinha-se um período de transição do IPv4 para IPv6 mais ou menos longo, torna-se por isso definir mecanismos de inter-operacionalidade, nomeadamente quanto a endereços:

  • Os nós que implementam IPv6 e estão ligados a uma rede IPv4 utilizam endereços com zeros nos 96 bits mais significativos e o endereço IPv4 nos 32 bits restantes.
  • Os nós IPv6 podem aceder a nós IPv4 usando endereços 80 bits zero seguidos de 16 bits um e finalmente o endereço IPv4.

Os endereços "unicast" da gama "Provider-Based Unicast Address" (010...) são estruturados de modo a facilitar uma atribuição hierarquica tal como acontece actualmente com os endereços IPv4. Está prevista a seguinte estrutura:

010
Identifica o endereço como "Provider-Based Unicast Address"
Registry ID
Cada entidade de registo possui um identificador de registo e atribui na sua gama identificadores de "fornecedores".
Provider ID
Identificador de "fornecedor" atribuído pela entidade de registo.
Subscriber ID
Identificador de subscritor atribuído pelo "fornecedor".
Intra-subscriber
Estruturado pelo subscritor.

Os endereços das gamas "Link Local Use Addresses" e "Site Local Use Addresses" são estritamente locais (são ignorados pelos "routers") e têm utilizações especiais tais como em redes não ligadas à internet ou para a atribuicão dinâmica de endereços.

Endereços "anycast"

Os endereços "anycast" são na realidade endereços "unicast", com a particularidade de um mesmo endereço estar atribuído a vários nós. Pretende-se que ao usar um endereço "anycast" para destino de um "datagrama", seja atingido o nó mais próximo (menor métrica) que possui esse endereço.

Para efeitos de "routing" está definido um tipo particular de endereço "anycast" ("Subnet-Router anycast address"): todos os "routers" de uma dada subrede possuem o endereço "anycast" correspondente à subrede, com o valor zero para o identificador de interface.

Endereços "multicast"

Um endereço "multicast" identifica um grupo de nós (grupo de "multicast"), um nó pode pertencer a vários grupos de "multicast". Um "datagrama" enviado para um dado endereço de "multicast" será recebido por todos os membros do grupo.

A estrutura de um endereço "multicast" é a seguinte:

11111111
Identifica o endereço como de "multicast"
Flags
Conjunto de 4 bits, dos quais os três primeiros são reservados e devem ter o valor zero. O quarto bit terá o valor zero para endereços "multicast" permanentes e bem conhecidos ("well-known" - definidos por entidade administrativa) e o valor um para os outros casos.
Scope
Valor de 4 bits que indica a zona de actuação.
Group ID
Identificador do grupo "multicast" com 112 bits.

Os valores definidos para o campo Scope são os seguintes:

	1 = node-local
	2 = link-local
	5 = site-local
	8 = organization-local
	E = global

A definição da zona de actuação não afecta os identificadores de grupo de "multicast", apenas define as máquinas do grupo que devem receber os dados.

Relativamente ao emissor de um "datagrama" os valores definem uma hierarquia de destinos com dimensão crescente, os valores limites são: "node-local" que indica o mesmo nó e "global" que indica toda a "internet".

Estão definidos alguns "well known multicast addresses", a sua principal utilização é identificar conjuntos de máquinas que implementam determinados tipos de serviço:

O identificador zero está reservado	FF0?:0:0:0:0:0:0:0

Todos os nós				FF01:0:0:0:0:0:0:1
					FF02:0:0:0:0:0:0:1

Todos os "routers"			FF01:0:0:0:0:0:0:2
					FF02:0:0:0:0:0:0:2

Servidores DHCP	IPv6			FF02:0:0:0:0:0:0:C

Cabeçalhos de extensão do IPv6

Os campos do cabeçalho IPv6 são significativamente menos do que os do IPv4, note-se por exemplo a ausência de qualquer tipo de informação relativamente a fragmentação. O que acontece é que muitos campos passaram a ser opcionais sob a forma de cabeçalhos de extenção. Trata-se de cabeçalhos adicionais que circulam "encapsulados" no "datagrama" IPv6.

Um "datagrama" IPv6 pode transportar vários cabeçalhos, cada cabeçalho contém um identificador que indica o tipo do cabeçalho seguinte, depois dos cabeçalhos de extensão encontra-se a informação (cabeçalho + dados) relativa ao protocolo de nível superior (ICMP, TCP, UDP, etc). Neste último caso são usados os mesmos identificadores de protocolo do IPv4, para os cabeçalhos de extensão do IPv6 são definidos novos identificadores.

Todos os cabeçalhos de extensão são opcionais, caso existam todos a ordem deve ser a seguinte:

	Cabeçalho IPv6
	....... Cabeçalhos de extensão do IPv6 ......
	Hop-by-Hop Options
	Destination Options
	Routing
	Fragment
	Authentication
	Encapsulating Security Payload
	Destination Options
	.............................................
	Protocolo de Nível Superior

O cabeçalho de extensão "Destination Options" que aparece no fim destina-se a opções dirigidas apenas ao nó final. O outro cabeçalho "Destination Options" será processado em todos os nós indicados no cabeçalho "Routing" ("Source Routing").

Formato das Opções

Os cabeçalhos de extensão que contêm opções ("Hop-by-Hop Options" e "Destination Options") utilizam uma estrutura semelhante para armazenar as opções, as estruturas dos cabeçalhos diferem entre sí.

A estrutura usada para guardar opções é a seguinte:

	Option Type (8 bits)		Tipo de opção
	Option Data Length (8 bits)	Número de octetos no campo "Option Data"
	Option Data			Opção de comprimento variável

Os dois bits mais significativos do campo "Option Type" indicam a acção a tomar quando um nó não reconhece a opção:

  • 00 = Ignorar a opção e continuar
  • 01 = Ignorar o pacote
  • 10 = Ignorar o pacote e enviar a mensagem ICMP - Parameter Problem com Código 2.
  • 11 = Ignorar o pacote, enviar a mensagem ICMP - Parameter Problem com Código 2, apenas se o endereço de destino não for "multicast".

O terceiro bit mais significativo indica se durante o percurso o campo "Option Data" pode sofrer alterações. O valor zero indica que não se produzem alterações e o valor um indica que estas se podem produzir. Esta "flag" é importante na presença de um cabeçalho de extenção de autenticação. Quando este bit possui o valor, para efeitos de validação os dados respeitantes a esta opcão serão considerados zero.

Opções de enchimento: Pad 1 e PadN

As opções devem ficar alinhadas a 32 bits com o cabeçalho. Nos casos em que basta um octeto para garantir o alinhamento usa-se a opção Pad 1 (tipo=0), correspondendo a um enchimento com o 8 bits zero. A opção Pad1 é o único caso particular que não respeita a estrutura geral das opções.

Quanto são necessários mais do que um octeto utiliza-se a opção PadN (tipo=1), com o comprimento necessário para o enchimento (o campo "Data Length" pode conter o valor zero, correspondendo a dois octetos de enchimento).

Cabeçalho de extensão "Hop-by-Hop Options"

Este cabeçalho de extensão contém opções a serem processadas em todos os nós percorridos pelo "datagrama", a sua presença é identificada pelo valor zero no campo "next header" do cabelçalho IPv6, o formato deste cabeçalho de extensão é o seguinte:

	Next Header	(8 bits)
	Comprimento	(8 bits)
	Opções		(variável)

Além das opcões Pad1 e PadN está actualmente definida a opção "Jumbo Payload" (tipo=194). Esta opção permite o envio de quantidades de dados superiores a 65.535 octetos (o campo "Payload Length" do cabeçalho IP só possui 16 bits). Quando esta opção é usada o campo "Payload Length" do cabeçalho IP deve conter o valor zero, caso contrário o nó receptor envia uma mensagem ICMP "Parameter Problem" com código 0.

A opção é constituida da seguinte forma:

	194		Tipo de opção
	4		Comprimento dos dados da opção
	Jumbo-Length	Número de 32 bits contendo o quantidade
			de dados "Jumbo", este comprimento não
			inclui o cabeçalho IPv6, mas inclui o
			cabeçalho de extensão "Hop-by-Hop".

O campo "Jumbo-Length" deve conter sempre um valor superior a 65.535, caso contrário o nó receptor envia uma mensagem ICMP "Parameter Problem" com código 0.

A opção "Jumbo Payload" pretende tirar partido de implementações de camadas inferiores que suportam um MTU superior a 65,575 (dados + 40 octetos do cabeçalho IPv6), por esta razão estes "datagramas" nunca são fragmentados. A coexistencia da opção "Jumbo Payload" com um cabeçalho de extensão "Fragment" leva o nó receptor a enviar uma mensagem ICMP "Parameter Problem" com código 0, apontando para o referido cabeçalho.

Cabeçalho de extensão "Routing"

Este cabeçalho é usado pelo nó de origem para indicar uma lista de nós a visitar no percurso do "datagrama" ("source routing"), é identificado pelo valor 43 no campo "next header" do cabaçalho anterior.

Estrutura:

	Next Header		(8 bits)
	Comprimento		(8 bits)
	Tipo			(8 bits)
	Nós restantes		(8 bits)
	Dependente do tipo	(variável)

O campo "Next Header" tem os significado habitual, o campo "Tipo" permite identificar variantes deste cabeçalho, a constituição do último campo depende do valor deste campo.

O campo "Nós restantes" indica, da lista especificada na fonte, quantos nós falta visitar.

Cabeçalho de extensão "Routing" Tipo 0

Estrutura:

	Next Header		(8 bits)
	Comprimento		(8 bits)
	Tipo = 0		(8 bits)
	Nós restantes		(8 bits)
	Reservado		(8 bits)
	Strict/Loose Bit Map	(24 bits)
	Endereço 1		(128 bits)
	Endereço 2		(128 bits)
	..................................
	Endereço n		(128 bits)

O campo "Comprimento" indica o número de octetos do cabeçalho, em unidades de 8 octetos, ignorando os 8 primeiros, ou seja contém o dobro do número de endereços IPv6 transportados. Como no máximo são permitidos 23 endereços, o valor máximo para este campo é de 46. Igualmente para o campo "Nós Restantes", o valor máximo será 23.

O campo "Strict/Loose Bit Map" é um mapa de bits associados aos endereços transportados, o primeiro bit refere-se a "Endereço 1" e assim sucessivamente. Um bit a 1 ("strict") indica que o endereço corresponde a um nó visinho do anterior, o valor 0 ("loose") indica que os nós não são viziinhos.

Cabeçalho de extensão "Fragment"

Tal como o IPv4, o IPv6 suporta fragmentação de "datagramas" de modo a que estes se ajustem ao MTU das camadas inferiores das ligações por onde passa.

Ao contrário do que acontecia com o IPv4, a fragmentação no IPv6 não é implementada entre nós intermédios. O nó de origem é obrigado a determinar o valor mínimo do MTU no caminho que o "datagrama" vai seguir, o nó de destino final procede ao reagrupamento.

O IPv6 exige que todas as ligações suportem um MTU de no mínimo de 576 octetos. Os nós devem implementar o mecanismo "Path MTU Discovery" (RFC 1191), que permite a determinação do MTU máximo para um dado caminho.

O cabeçalho de extensão "Fragment" é identificado pelo valor 44 no campo "Next Header" do cabeçalho anterior, a sua estrutura é a seguinte:

	Next Header		(8 bits)
	Reservado		(8 bits)
	OffSet			(13 bits)
	Reservado		(2 bits)
	MORE			(1 bit)
	Identificação		(32 bits)

O campo "Offset" contém a posição em unidades de 8 octetos que os dados que se seguem têm na parte fragmentável do "datagrama" original. A "flag" "MORE" indica se é o último fragmento de um "datagrama" (MORE=1), ou se faltam mais fragmentos (MORE=0).

O campo "Identificação" é gerado para cada "datagrama" que um nó decide fragmentar, o objectivo é identificar todos os fragmentos como pertencentes a um dado "datagrama". Para efeitos de fragmentação, um "datagrama" IPv6 divide-se em duas partes:

Parte Não Fragmentável
Constituida pelo cabeçalho IP e cabeçalhos de extensão com processamento em nós intermédios, ou seja até ao cabeçalho de extensão "Routing", inclusive.
Parte Fragmentável
Outros cabeçalhos de extensão e dados.

Cada fragmento contém uma cópia da parte não fragmentável do datagrama original, seguida do cabeçalho de extensão "Fragment" e finalmente o fragmento propriamente dito (da parte fragmentável). O campo "Payload Length" dos cabeçalhos IPv6 de cada fragmento são alterados de modo a conterem o tamanho do fragmento.

Cabeçalhos de extensão "Destination Options"

Estes cabeçalhos destinam-se a transportar opções adicionais, é identificado pelo valor 60 no campo "Next Header" do cabeçalho anterior, de momento apenas estão definidas as opções PAD-1 e PAD-N, a estrutura deste cabeçalho é idêntica ao "Hop-by-Hop Options":

	Next Header	(8 bits)
	Comprimento	(8 bits)
	Opções		(variável)

Ausencia de cabeçalho de extensão seguinte

O valor 59 no campo "Next Header" de um cabeçalho indica que nada se lhe segue.

Pseudo-Cabeçalho IPv6 para os protocolos de nível superior

Os protocolos de nível superior (que usam o IP), tais como o ICMP, TCP e UDP utilizam uma parte do cabeçalho IP para calculo do seu próprio "checksum" e para acesso aos endereços IP. Para evitar muitas alterações nos protocolos de nível superior foi definida a seguinte estrutura lógica designada por "Pseudo-Cabeçalho" IPv6:

	Source Address		(128 bits)
	Destination Address	(128 bits)
	Payload Length		(32 bits)
	ZERO			(24 bits)
	Next Header		(8 bits)

O campo "Payload Length" contém o número de octetos ocupado pelo protocolo de nível superior. Independentemente de existirem ou não cabeçalhos de extensão, o campo "Next Header" identifica sempre o protocolo de nível superior.

O pseudo-Cabeçalho" IPv4 era extremamente semelhante, pelo menos em termos de conteúdo:

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

ICMP para IPv6 (ICMPv6)

O IPv6 utiliza o ICMP tal como existia para o IPv4, contudo foram necessárias algumas alterações (RFC 1885). O identificador de protocolo 1, usado para o ICMPv4 foi abandonado, um cabeçalho e mensagem ICMPv6 são identificados pelo valor 58 no campo "Next Header" do cabeçalho anterior.

Uma mensagem ICMPv6 possui a seguinte estrutura, semelhante à do ICMPv4:

	Type			(8 bits)
	Code			(8 bits)
	Checksum		(16 bits)
	Dados da Mensagem	(variável)

Ao contrário do que acontecia com o ICMPv4, o "checksum" é calculado sobre a mensagem, incluindo também o Pseudo-cabeçalho IPv6.

O campo tipo pode ter um dos seguintes valores:

	1    Destination Unreachable
	2    Packet Too Big
	3    Time Exceeded
	4    Parameter Problem

	128  Echo Request
	129  Echo Reply
	130  Group Membership Query
	131  Group Membership Report
	132  Group Membership Reduction

Tal como já acontecia para o ICMPv4, as mensagens dividem-se em duas categorias: ERRO ("type" menor do que 128) e INFORMAÇÃO ("type" maior do que 127).

Devido às variantes de endereçamento proporcionadas pelo IPv6 são importantes alguns cuidados quanto à definição dos endereços de origem para as mensagens de erro, em função do endereço de destino do "datagrama" onde o erro ocorreu:

Endereço de Destino do Datagrama Endereço de Origem para a mensagem de erro
Um dos endereços de "unicast" do nó O mesmo endereço de "unicast"
Endereço de "multicast" ou grupo de "anycast" Um dos endereços de "unicast" da interface onde foi recebido
Endereço não pertencente ao nó (nó intermédio) O endereço "unicast" do nó que possa ser mais útil
Outros casos Um endereço "unicast" da interface a ser usada para envio da mensagem de erro

Regras gerais de processamento ICMPv6:

  • As mensagens ICMPv6 de erro recebidas, de tipo desconhecido devem ser passadas a camadas superiores.
  • As mensagens ICMPv6 de informação recebidas, de tipo desconhecido devem ser ignoradas.
  • As mensagens ICMPv6 de erro, contêm parte do "datagrama" original, garantindo que o pacote ICMP não exceda 576 octetos.
  • Nos casos em que uma mensagem ICMPv6 de erro exige processamento das camadas superiores, utiliza-se o campo "Next Header" do "datagrama" original para determinar qual a camada apropriada.
  • As mensagens ICMPv6 de erro nunca devem ser enviadas em resposta a:
    - outras mensagens ICMPv6 de erro
    - "datagramas" com destino "multicast" (Excepções: "Packet Too Big" e "Parameter Problem" com código 2)
    - "datagramas" com origem "IPv6 Unspecified Address", um endereço "anycast" ou um endereço "multicast"
  • As mensagens ICMPv6 de erro não devem sobrecarregar a rede, se um dado nó origina erros sistemáticos, a taxa de envio de mensagens ICMPv6 para esse nó deve ser controlada.

Mensagem "Destination Unreachable"

Esta mensagem é enviada (geralmente por um "router") quando o destino especificado num "datagrama" não pode ser atingido, por razões que não a congestão de um nó, o código indica o tipo de destino não atingido:

	0	no route to destination
	1	communication with destination
		administratively prohibited
	2	not a neighbor
	3	address unreachable
	4	port unreachable

O código zero é gerado quando um "router" não sabe para onde enviar o "datagrama". O código 1 é gerado quando existe um filtro/"firewall" que impede a passagem. O código 2 é gerado quando existe um cabeçalho de extensão "routing" e um dado nó especificado como "strict" não é vizinho do anterior. Outras razões para que não se possa atingir o endereço de destino geram o código 3.

O código 4 é gerado quando a porta de destino não tem nenhuma aplicação associada para receber os dados. Seja qual for o tipo de erro a camada superior a que pertence o "datagrama" deve ser notificada.

Após o "checksum" existem 32 bits reservados que devem ser inicializados com zero, segue-se parte do "datagrama" original.

Mensagem "Packet Too Big"

O IPv6 implementa fragmentação apenas entre nós finais e não "router" a "router" como acontecia com o IPv4. Quando um "router" IPv6 recebe um "datagrama" ou fragmento e o MTU correspondente ao "hop" seguinte é demasiado pequeno, esta mensagem é enviada à origem com código 0.

O MTU do "hop" no qual se dá a falha é enviado num campo de 32 bits após o "checksum". O envio deste valor facilita uma implementação eficiênte do "MTU Path Discovery" (RFC 1191) que permite a determinação do MTU máximo a usar num dado caminho. Quando este erro ocorre, a camada superior a que pertence o "datagrama" deve ser notificada.

Mensagem "Time Exceeded"

Esta mensagem pode ser gerada em duas situações:

  • Código 0 - Excesso de saltos (o valor "Hop Limit" do cabeçalho IPv6 chegou a zero)
  • Código 1 - Tempo de reagrupamento excedido (o tempo disponível para o nó de destino reconstituir o "datagrama" (60 segundos) foi excedido)

Mensagem "Parameter Problem"

Esta mensagem indica que existe um problema no cabeçalho IPv6 ou cabeçalhos de extensão:

	Código 0	Campo com erro
	Código 1	"Next Header" desconhecido
	Código 2	"Opção" desconhecida

Depois do "checksum" segue-se um campo de 32 bits que indica o "offset" da localização do erro dentro do "datagrama" original.

Mensagens "Echo Request" e "Echo Reply"

Não existem diferenças relevantes relativamente ao ICMPv4.

Mensagens "Group Membership"

Estas mensagens destinam-se à gestão de nós membros de grupos "multicast", junto dos "routers" locais , razão pela qual o "Hop Limit" do respectivo cabeçalho IPv6 é sempre 1. No IPv4 os endereços de "multicast" surgiam como uma extensão sendo necessário um protocolo adicional documentado nas RFC 1112 e RFC 2236 (IGMP - "Internet Group Management Protocol").

No ICMPv6 deixa de ser necessário o IGMP e as mensagens são integradas no ICMP, o seu formato é o seguinte:

	Type		(8 bits)	Tipo ICMP (130; 131 ou 132)
	Código		(8 bits)	Sempre ZERO
	Checksum	(16 bits)	ver formato geral ICMPv6
	-----------------------------------------------------------
	MAX Delay	(32 bits)	Tempo máximo de resposta
	ZERO		(32 bits)
	Endereço MCAST	(128 bits)

Tipos de mensagem:

	130	"Group Membership Query"
	131	"Group Membership Report"
	132	"Group Membership Reduction"

O campo "MAX Delay" é usado apenas no tipo 130, e define o atraso máximo (em milisegundos) para a obtenção de uma resposta.

Os principios de funcionamento mantêm-se fieis à RFC 1112.

A mensagem "Group Membership Query" é enviada pelos "hosts" aos "routers" para obtenção de informação quanto à existencia de grupos locais de "multicast". O campo "Endereço MCAST" pode ser colocado a zero para obtenção de informação sobre qualquer grupo com membros "General Query" ou conter um endereço "multi-cast" para determinar se existem membros nesse grupo "Group-Specific Query".

Os "routers" também enviam periodicamente mensagens "General Query" a que os membros devem responder.

A mensagem "Group Membership Report" é enviada em resposta à anterior, ou em certas situações por iniciativa própria de um membro ou de um "router". Por exemplo quando um "router" envia uma mensagem "Group-Specific Query" e não obtém resposta num tempo pré-determinado considera que o grupo não possui membros. A mensagem "Group Membership Report" é usada pelos "hosts" para se tornarem membros de um grupo, basta proceder ao seu envio para um "router" local.

A mensagem "Group Membership Reduction" é usada para sair de um grupo de "multi-cast", para tal o membro envia-a ao "router".

Existem diversos aspectos de implemntação que são atendidos, nomeadamente quanto a temporizações, por exemplo quando um "router" envia uma mensagem "Group Membership Query" para confirmar o número de membros não é conveniente uma resposta imediata de todos os membros, por esta razão cada membro introduz um atraso aletório no tempo de resposta.