IPv6: mudanças entre as edições

De Wiki Cursos IFPR Foz
Ir para navegaçãoIr para pesquisar
 
(52 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 1: Linha 1:
=IPv6=
=IPv6=


Referências: <ref name="KUROSE">KUROSE, J.F; ROSS K. W. Redes de Computadores e a Internet: Uma abordagem ''top-down'', São Paulo: Pearson, 2010.</ref>, <ref>http://www.rfc-editor.org/info/rfc2460</ref>.
Referências: Textos e vídeos <ref name=IPv6br>http://ipv6.br/</ref>.


O protocolo '''IPv6''' é a '''nova versão do IP''', especificado pela RFC2460, e deve substituir o IPv4. Além disto, o IPv6 é incrementado por várias outras RFCs, por exemplo: RFC2463 (''ICMP for the Internet Protocol Version 6'') e RFC3775 (''Mobility Support in IPv6'').
O protocolo '''IPv6''' é a '''nova versão do IP''', especificado pela RFC2460, e deve substituir o IPv4. Além disto, o IPv6 é incrementado por várias outras RFCs, por exemplo: RFC2463 (''ICMP for the Internet Protocol Version 6'') e RFC3775 (''Mobility Support in IPv6'').
Linha 19: Linha 19:
==Estrutura do datagrama IPv6==
==Estrutura do datagrama IPv6==


O '''datagrama IPv6''' possui seu '''cabeçalho''' com tamanho fixo de '''40 bytes''', como mostra a figura:
O '''datagrama IPv6''' possui seu '''cabeçalho''' com tamanho fixo de '''40 bytes''', como mostra a figura <ref>https://www.rfc-editor.org/rfc/rfc2460.txt</ref>:
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |Version| Traffic Class |          Flow Label                  |
   |Version| Traffic Class |          Flow Label                  |
Linha 43: Linha 43:


*'''Versão''' (''Version''), de 4 bits, indica a versão do protocolo, no caso = 6 (0110).
*'''Versão''' (''Version''), de 4 bits, indica a versão do protocolo, no caso = 6 (0110).
*'''Classe de tráfego''' (''Traffic Class''), com 8 bits, é utilizado por nós de origem e roteadores intermediários para diferenciar diferentes classes e prioridade de tráfego entre os pacotes IPv6; tem funcionalidade similar a utilização do campo TOS do IPv4 permitindo de implementar serviços diferenciados de QoS (\textit{DiffServ}) para os pacotes IP.
*'''Classe de tráfego''' (''Traffic Class''), com 8 bits, é utilizado por nós de origem e roteadores intermediários para diferenciar diferentes classes e prioridade de tráfego entre os pacotes IPv6; tem funcionalidade similar a utilização do campo TOS do IPv4 permitindo de implementar serviços diferenciados de QoS (''DiffServ'') para os pacotes IP.
*'''Rótulo de fluxo''' (''Flow Label''), com 20 bits, pode ser utilizado por nós de origem para rotular sequências de pacotes que requerem tratamento especial em roteadores, como serviços tempo real.  
*'''Rótulo de fluxo''' (''Flow Label''), com 20 bits, pode ser utilizado por nós de origem para rotular sequências de pacotes que requerem tratamento especial em roteadores, como serviços tempo real.  
*'''Comprimento dos dados''' (''Payload Length''), com 16 bits, especifica o tamanho dos dados após o cabeçalho, em bytes.
*'''Comprimento dos dados''' (''Payload Length''), com 16 bits, especifica o tamanho dos dados após o cabeçalho, em bytes.
*'''Próximo cabeçalho''' (''Next Header''), com 8 bits, especifica o tipo do cabeçalho imediatamente após o cabeçalho IPv6; pode utilizar números similares aos do campo ''Protocol'' do IPv4, ou números específicos para o IPv6 (RFC3232), os quais são atualmente estabelecidos por uma base ''on-line'' no endereço www.iana.org, como por exemplo:
*'''Próximo cabeçalho''' (''Next Header''), com 8 bits, especifica o tipo do cabeçalho imediatamente após o cabeçalho IPv6; pode utilizar números similares aos do campo ''Protocol'' do IPv4, ou números específicos para o IPv6, os quais são atualmente estabelecidos ''Next Header''por uma base ''on-line'' <ref>https://www.iana.org/assignments/ipv6-parameters/ipv6-parameters.xhtml</ref>.
Next Header IPv6 - Header types
    00 = Hop-by-Hop Options
    41 = ipv6
    43 = Routing
    44 = Fragment
    51 = Authentication
    60 = Destination Options
    50 = Encapsulating Security Payload
    xx = Upper Layer Header
    58 = Internet Control Message Protocol (ICMP)
    59 - no next header
*'''Limite de saltos''' (''Hop Limit''), com 8 bits, é decrementado de 1 em cada nó de encaminhamento do pacote; o pacote é descartado quando o ''Hop Limit'' chega a zero.
*'''Limite de saltos''' (''Hop Limit''), com 8 bits, é decrementado de 1 em cada nó de encaminhamento do pacote; o pacote é descartado quando o ''Hop Limit'' chega a zero.
*'''Endereço fonte''' (''Source Address''), com 128 bits.
*'''Endereço fonte''' (''Source Address''), com 128 bits.
*'''Endereço destino''' (''Destination Address''), com 128 bits.
*'''Endereço destino''' (''Destination Address''), com 128 bits.


Foram removidos do cabeçalho IPv6 os seguintes campos que haviam no IPv4:
;Diferenças do cabeçalho do IPv6 em relação a [[Datagrama IP|IPv4]]:  Foram removidos do cabeçalho IPv6 os seguintes campos que haviam no IPv4:
*Tamanho do cabeçalho (''Header Length''), uma vez que o cabelalho IPv6 possui tamanho fixo;
:*Tamanho do cabeçalho (''Header Length''), uma vez que o cabeçalho IPv6 possui tamanho fixo de 40 bytes;
*''Identification'',  ''Flags'', ''Fragment Offset'', uma vez que no IPv6 não há mais fragmentação do datagrama, sendo utilizada uma técnica conhecida como descoberta da MTU do caminho (''Path MTU Discovery'');
:*''Identification'',  ''Flags'' e ''Fragment Offset'', no IPv6 a fragmentação é realizada na origem e utiliza um cabeçalho de extensão (ver abaixo);
*''Header Checksum'', o que tornou o processamento mais leve, evitando recalcular o valor do ''checksum'' em cada nó.
:*''Header Checksum'', o que tornou o processamento mais leve, evitando recalcular o valor do ''checksum'' em cada nó.
:*Opções e complementos (''Options'' e ''Padding''), que tiveram suas funções viabilizadas com os ''Next Header''. 


===Extensões do cabeçalho IPv6===
===Extensões do cabeçalho IPv6===
As '''extensões do cabeçalho''' do IPv6 localizam-se entre o cabeçalho base e o cabeçalho da camada de superior e não possuem quantidade ou tamanho fixo.


As extensões do cabeçalho IPv6, definidas na RFC2460 são as seguintes:
[[Arquivo:Cabecalhos-Extencao-IPv6.png|400px]] <ref name=IPv6br/>
*''Hop-by-Hop Options header''
*''Routing header''
*''Fragment header''
*''Destination Options header''
*''Authentication header''
*''Encrypted Security Payload header''


As extensões são identificados pelo campo ''Next Header'' e são colocados entre o cabeçalho IPv6 e o pacote de nível superior. Elas são examinados unicamente pelo nó identificado no endereço de destino, a não ser o cabeçalho ''hop-by-hop''.
;As principais '''extensões''' do cabeçalho '''IPv6'''são:
*'''''Hop-by-Hop''''' carrega informações que devem ser processadas por todos nós ao longo do caminho. Algumas opções incluem o ''Router Alert'', utilizado para reserva de recursos (exemplo RSVP) ou encontrar destinos de ''multicast'' e a opção ''Jumbogram'' permite que pacotes maiores que 64K sejam transmitidos.
*'''''Destination Options''''' deve ser processado apenas pelo nó de destino do pacote. Ele é utilizado no suporte ao mecanismo de mobilidade do IPv6.
*'''''Routing Header''''' permite informar um conjunto de roteadores que devem ser visitados até o seu destino final e pode ser utilizada por aplicações que exigem qualidade de serviço. Também é utilizado como parte do mecanismo de suporte a mobilidade do IPv6.
*'''''Fragmentation''''' é usada para possibilitar a fragmentação e remontagem de datagramas. O IPv6 usa a técnica ''PATH MTU Discovery'' para determinar a máxima MTU na trajetória do pacote. Se o pacote for maior que esta MTU então ele é fragmentado na origem. Os roteadores ao longo da rota não fragmentam o pacote. O destino remonta o pacote fragmentado. Os parâmetros utilizados são equivalentes aos do IPv4: ''Identification'', identificação pacote; ''Flag'', se igual a 1 indica que há mais fragmentos, se igual a 0 indica fragmento final; ''Fragment Offset'', deslocamento do fragmento, em unidades de oito bytes, em relação ao início do pacote original.
*'''''Authentication Header''''' e '''''Encapsulating Security Payload''''' fazem parte do cabeçalho IPSec.


O cabeçalho de opções \textit{Hop-by-Hop} carrega informações que devem ser processadas por todos nós ao longo do caminho. As informações poderão ser utilizadas para reserva de recursos (exemplo RSVP), para encontrar destinos de \textit{multicast}, entre outras, e deve seguir necessariamente o cabeçalho IPv6. A opção \textit{Jumbogram} da extensão \textit{hop-by-hop} permite que pacotes maiores que 64K sejam transmitidos. O campo \textit{Option Data Lenght}, de 32 bits informa o tamanho dos dados, que devem se seguir ao mesmo.
;Códigos para ''Next Header'' e ordem recomendada no pacote: <ref>https://www.cisco.com/en/US/technologies/tk648/tk872/technologies_white_paper0900aecd8054d37d.html</ref>
'''Ordem      Tipo                Código'''
            ''No next header''      59
1          ''Hop-by-Hop''          00
2          ''Destination''        60
3          ''Routing''            43
4          ''Fragmentation''      44
5          ''Authentication''      51
6          ''Security''            50
Protocolo  TCP                06
Protocolo  UDP                17
Protocolo  ICMPv6              58


A extensão cabeçalho de roteamento (\textit{Routing header}) permite informar um conjunto de roteadores que devem ser visitados até o seu destino final e pode ser utilizada por aplicações que exigem qualidade de serviço.
==Endereçamento IPv6 (RFC 3513)==


A extensão cabeçalho de fragmentação (\textit{Fragment header}) é usada para possibilitar a fragmentação e remontagem de datagramas. O IPv6 usa a técnica ``\textit{PATH MTU Discovery}'' para determinar a máxima MTU na trajetória do pacote. Se o pacote for maior que esta MTU então ele é fragmentado na fonte. Os roteadores ao longo da rota não fragmentam o pacote. O destino remonta o pacote fragmentado.
O IPv6 tem '''endereçamento de 128 bits''': espaço de 2<sup>128</sup> endereços.


\subsubsection*{Endereçamento IPv6 (RFC 3513)}
É utilizada uma '''notação hexadecimal''' com agrupamento de '''16 bits''' separados por '''dois pontos''', como por exemplo:


O IPv6 tem endereçamento de 128 bits: espaço de $2^{128}$ endereços!!
2001:0DB8:5002:2019:1111:76ff:FEAC:E8A6


É utilizada uma notação hexadecimal com agrupamento de 16 bits separados por ``dois pontos'', como por exemplo:
São utilizadas regras para '''simplificar''' a representação de zeros, por exemplo o endereço:
0237:0000:ABCD:0000:0000:0000:0000:0010
pode ser transformado em:
237::ABCD:0:0:0:0:10
ou, melhor ainda,
237:0:ABCD::10


\texttt{2001:0DB8:5002:2019:1111:76ff:FEAC:E8A6} .
===Prefixos de rede===


São utilizadas regras para simplificar a representação de zeros, por exemplo o endereço:
No '''IPv6''' os '''prefixos de rede''' são escritos do mesmo modo que no IPv4, utilizando a '''notação CIDR'''. Esta notação é representada da forma '''endereço-IPv6/tamanho do prefixo''', onde tamanho do prefixo é um valor decimal que especifica a quantidade de bits contíguos à esquerda do endereço que compreendem o prefixo. O exemplo de prefixo de sub-rede apresentado a seguir indica que dos 128 bits do endereço, 64 bits são utilizados para identificar a rede. Uma rede também pode ser subdividida em sub-redes  <ref name=IPv6br/>:
    Prefixo 2001:db8:3003:2::/64
    Prefixo global 2001:db8::/32
    ID da sub-rede 3003:2


\texttt{0237:0000:ABCD:0000:0000:0000:0000:0010} , pode ser transformado em:
No IPv6 o '''identificador da interface''' dentro de uma rede tem tamanho padrão de '''64 bits'''.
\texttt{237::ABCD:0:0:0:0:10} , ou, melhor ainda,


\texttt{237:0:ABCD::10}.
===Tipos de endereçamento IPv6===


\subsubsection*{Tipos de endereçamento IPv6}
*'''''Unicast''''':  identifica uma única interface, de modo que um pacote enviado a um endereço ''unicast'' é entregue a uma única interface.
*'''''Anycast''''':  identifica um conjunto de interfaces. O roteamento da Internet permite encaminhar pacotes ao endereço ''anycast'' mais próximo. Um endereço anycast é utilizado em comunicações de um-para-um-de-muitos.
*'''''Multicast''''':  identifica um conjunto de interfaces, entretanto, um pacote enviado a um endereço ''multicast'' é entregue a todas as interfaces associadas a esse endereço. Um endereço multicast é utilizado em comunicações de um-para-muitos. O Ipv6 eliminou o ''broadcast'' e enriqueceu o processo de multicast;.


\begin{itemize}
====Endereços ''Unicast''====
\item \textit{Unicast}: identifica um hospedeiro (interface);
Existem alguns tipos de endereços ''unicast'' IPv6 <ref name=IPv6br/>:  
\item \textit{Multicast}: identifica um conjunto de hospedeiros. O Ipv6 eliminou o \textit{broadcast} e enriqueceu o processo de multicast;
*'''''Global Unicast''''': equivalente aos '''endereços públicos''' IPv4, o endereço global ''unicast'' é globalmente acessível na Internet IPv6. Utiliza os 64 bits mais a esquerda para '''identificação da rede''' e os 64 bits mais a direita para '''identificação da interface'''. A identificação da rede engloba duas partes: o prefixo de roteamento global e a identificação da sub-rede. 
\item \textit{Anycast}: uma novidade no Ipv6. É um endereço que pode ser atribuído a múltiplos hospedeiros. O roteamento da Internet permite encaminhar pacotes ao endereço \textit{anycast} mais próximo.
*'''''Link-Local''''': pode ser usado apenas no enlace específico onde a interface está conectada e traz a noção de '''endereços privados''' dentro de uma rede. O endereço ''link-local'' é atribuído automaticamente utilizando o prefixo FE80::/64.  
\end{itemize}
*'''''Unique-Local''''': é endereço globalmente único para ser utilizado apenas para comunicações locais.


\subsubsection*{Endereço \textit{Unicast}}
;Outros endereços notáveis:
*Endereço '''''Loopback''''':
::1
*Endereço não especificado:
::
*Endereços '''''Multicast''''':
FF02::1 -- todos os nós do enlace;
FF02::2 -- todos os roteadores do enlace.


Os endereços \textit{unicast} são \textbf{endereços públicos}, roteáveis na Internet. Apresentam uma estrutura hierárquica, cujas interfaces são configuradas com máscaras de 64 bits.
===Formação do Endereço a partir do MAC===


O endereço \textit{link-local} traz a noção de \textbf{endereços privados} dentro de uma rede. Não são roteáveis e começam com \texttt{1111111010}. Por exemplo: \texttt{FE80:A0000::1} .
Os 64 bits do identificador de hospedeiro são formados pela inserção de FFFE entre o terceiro e quarto byte do MAC e complementando-se o segundo bit menos significativo do primeiro byte do MAC.  


Outros endereços notáveis:
Se endereço MAC da interface for:
AA:11:BB:2A:EF:35
adiciona-se os dígitos FFFE na metade do endereço:
AA11:BBFF:FE2A:EF35
complementa-se o segundo bit menos significativo do primeiro byte:
AA = 10101010 -> 10101000 = A8
A811:BBFF:FE2A:EF35
prefixo recebido do Roteador (via Advertência):
2001:10:/64
endereço final:
2001:10::A811:BBFF:FE2A:EF35


\begin{itemize}
==ICMPv6==
\item Endereço \textit{Loopback}: \texttt{::1}
\item Endereço não especificado: \texttt{::}
\item Endereços \textit{Multicast}: \texttt{FF02::1} -- todos os nós do enlace; \texttt{FF02::2} -- todos os roteadores do enlace.
\end{itemize}


\subsection{ICMPv6}
O ICMPv6 (RFC2463) reporta erros se pacotes não podem ser processados apropriadamente e envia informações sobre o status da rede. Apresenta várias melhorias em relação ao ICMPv4. O IGMP, que trata ''multicast'' no IPv4, foi incorporado no ICMPv6. O ARP/RARP foi incorporado através da utilização da técnica ''Neighbour Discovery'' (descoberta de informações da vizinhança). Incorporou mensagens de registro de localização para IP Móvel.


O ICMPv6 (RFC2463) reporta erros se pacotes não podem ser processados apropriadamente e envia informações sobre o status da rede. Apresenta várias melhorias em relação ao ICMPv4. O IGMP, que trata \textit{multicast} no IPv4, foi incorporado no ICMPv6. O ARP/RARP foi incorporado através da utilização da técnica \textit{Neighbour Discovery} (descoberta de informações da vizinhança). Incorporou mensagens de registro de localização para IP Móvel.
As mensagens ICMPv6 são transportadas por datagramas IPv6 com número ''Next Header'' igual a 58H e tem formato geral mostrado na figura:
 
As mensagens ICMPv6 são transportadas por datagramas IPv6 com número \textit{Next Header} igual a 58H e tem formato geral mostrado na figuraa \ref{ICMPv6}.
 
\begin{figure}[!htpb]
\centering \scriptsize{
\begin{verbatim}
       0                  1                  2                  3
       0                  1                  2                  3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
Linha 140: Linha 156:
       +                        Message Body                          +
       +                        Message Body                          +
       |                                                              |
       |                                                              |
\end{verbatim}
}
\caption{Formato geral da mensagem ICMPv6 (RFC2463).}
\label{ICMPv6}
\end{figure}


As mensagem com bit mais significativo (MSB) do campo \textit{type} = 0 indicam \textbf{erro} (valores de 0--127) e com o MSB = 1 são de \textbf{informação} (valores de 128--255).
As mensagem com bit mais significativo (MSB) do campo ''type'' = 0 indicam '''erro''' (valores de 0--127) e com o MSB = 1 são de '''informação''' (valores de 128--255).


São exemplos de mensagens de erro:
São exemplos de mensagens de erro:
{\small
\begin{verbatim}
       Type
       Type
           1    Destination Unreachable       
           1    Destination Unreachable       
Linha 157: Linha 165:
           3    Time Exceeded                 
           3    Time Exceeded                 
           4    Parameter Problem           
           4    Parameter Problem           
\end{verbatim}}


São exemplos de mensagens de informação:
São exemplos de mensagens de informação:
{\small
\begin{verbatim}
       Type
       Type
         128      Echo Request                 
         128      Echo Request                 
         129      Echo Reply                   
         129      Echo Reply                   
         133-136  Neighbor Discovery
         133-136  Neighbor Discovery
\end{verbatim}


O campo \textit{Code} indica o código da mensagem, por exemplo, para mensagens de erro \textit{Destination Unreachable} poderemos ter:  
O campo ''Code'' indica o código da mensagem, por exemplo, para mensagens de erro ''Destination Unreachable'' poderemos ter:  
 
{\small
\begin{verbatim}
   Type          1
   Type          1
   Code          0 - No route to destination
   Code          0 - No route to destination
Linha 182: Linha 182:
                   5 - Source address failed ingress/egress policy
                   5 - Source address failed ingress/egress policy
                   6 - Reject route to destination
                   6 - Reject route to destination
\end{verbatim}}


A mensagems de erro \textit{Packet Too Big} (\textit{Type} = 2, \textit{Code} = 0) é utilizada pela técnica de descoberta da MTU do enlace (\textit{Path MTU Discovery}), uma vez que o IPv6 não fragmenta do datagrama nos roteadores intermediários. Nesta técnica o nó emissor assume a MTU do seu enlace de saída e envia o pacote para destino. Caso algum roteador da rota detecte que o pacote é muito grande para o MTU então ele avisa o nó fonte com ICMPv6 \textit{Packet Too Big} (que inclui o tamanho da MTU do enlace problema). O nó usa esta nova MTU para encaminhar o pacote novamente ao seu destino, podendo o processo todo pode se repetir em outros roteadores.  
A mensagems de erro ''Packet Too Big'' (''Type'' = 2, ''Code'' = 0) é utilizada pela técnica de descoberta da MTU do enlace (''Path MTU Discovery''), uma vez que o IPv6 não fragmenta do datagrama nos roteadores intermediários. Nesta técnica o nó emissor assume a MTU do seu enlace de saída e envia o pacote para destino. Caso algum roteador da rota detecte que o pacote é muito grande para o MTU então ele avisa o nó fonte com ICMPv6 ''Packet Too Big'' (que inclui o tamanho da MTU do enlace problema). O nó usa esta nova MTU para encaminhar o pacote novamente ao seu destino, podendo o processo todo pode se repetir em outros roteadores.  


A mensagems de erro \textit{Time Exceeded} (\textit{Type} = 3, \textit{Code} = 0) é enviada quando o limite de saltos (\textit{hop limit}) é excedido em um dado roteador.
A mensagems de erro ''Time Exceeded'' (''Type'' = 3, ''Code'' = 0) é enviada quando o limite de saltos (''hop limit'') é excedido em um dado roteador.


\subsection{Autoconfiguração}
==Autoconfiguração==


A autoconfiguração (RFC2462) é um dos pontos fortes do IPv6 permitindo gerar endereços IP automaticamente para as interfaces, sem nenhum tipo de configuração manual. Para isto o IPv6 combina prefixos divulgados pelos roteadores com o endereço de MAC (ou número randômico) para. Na ausência de roteadores usa-se o prefixo FE80 para gerar um endereço privado ``link-local''.
A '''autoconfiguração''' (RFC2462) é um dos pontos fortes do '''IPv6''' permitindo gerar endereços IP automaticamente para as interfaces, sem nenhum tipo de configuração manual. Para isto o IPv6 combina '''prefixos''' divulgados pelos '''roteadores''' com o '''endereço de MAC''' (ou número randômico). Na ausência de roteadores usa-se o prefixo FE80 para gerar um endereço privado ''link-local''.


A autoconfiguração é usada quando um sítio não necessita estabelecer endereços particulares as estações. Caso haja necessidade de se atribuir endereços específicos, pode-se utilizar o DHCPv6, como no IPv4.
A autoconfiguração é usada quando um sítio não necessita estabelecer endereços particulares as estações. Caso haja necessidade de se atribuir endereços específicos, pode-se utilizar o DHCPv6, como no IPv4.


Na autoconfiguração são utilizadas mensagens ICMPv6 de descoberta de vizinhos (\textit{Neighbor Discovery}) (RFC2461), as quais são equivalentes as mensagens ARP. As mensagens ICMPv6 \textit{Neighbor Discovery} podem ser do tipo (entre outras):
Na '''autoconfiguração''' são utilizadas mensagens ICMPv6 de '''descoberta de vizinhos''' (''Neighbor Discovery'') (RFC2461), as quais são equivalentes as mensagens ARP. As mensagens ICMPv6 ''Neighbor Discovery'' podem ser do tipo (entre outras):
 
Type Code
{\small
133  0    Router Solicitation
\begin{verbatim}
134  0    Router Advertisement
Neighbor Discovery:
135  0    Neighbor Solicitation
Type Code
136  0    Neighbor Advertisement
133  0    Router Solicitation
134  0    Router Advertisement
135  0    Neighbor Solicitation
136  0    Neighbor Advertisement
\end{verbatim}}
 
As mensagens \textit{Neighbor Solicitation} e \textit{Neighbor Advertisement} são utilizadas para a descoberta de vizinhos e detecção de endereços duplicados, como ilustra a figura \ref{NeighborSolicitation}.
 
\begin{figure}[!htpb]
\centering
\mbox{
\includegraphics[scale=.5]{figs/NeighborSolicitation}}
\caption{\textit{Neighbor Solicitation} e \textit{Neighbor Advertisement}.}
\label{NeighborSolicitation}
\end{figure}
 
A mensagem \textit{Router Solicitation} é utilizada para a descoberta de roteadores na rede local e \textit{Router Advertisement} são utilizadas pelos roteadores, periodicamente, para anunciar sua presença e divulgar seu prefixo, como ilustra a figura \ref{RouterSolicitation}.
 
\begin{figure}[!htpb]
\centering
\mbox{
\includegraphics[scale=.5]{figs/RouterSolicitation}}
\caption{\textit{Router Solicitation} e \textit{Router Advertisement}.}
\label{RouterSolicitation}
\end{figure}
.
 
\subsubsection*{Passos para autoconfiguração}


\begin{enumerate}
As mensagens ''Neighbor Solicitation'' e ''Neighbor Advertisement'' são utilizadas para a descoberta de vizinhos e detecção de endereços duplicados.
\item Um endereço tentativa é formado com o prefixo  FE80 (\textit{link-local address}) e associado a interface;
\item O nó se junta aos grupos multicasting;
\item Uma mensagem \textit{Neighbor Solicitation} é enviado com o endereço tentativa como \textit{target address}. Se detectado IP duplicado o nó deverá ser configurado manualmente;
\item O nó realiza um \textit{Router Solicitation} para o endereço \texttt{FF02::2}. (grupo \textit{multicast} dos roteadores);
\item Todos roteadores do grupo \textit{multicast} respondem e o nó se autoconfigura para cada um deles;
\end{enumerate}


\subsubsection*{Formação do Endereço a partir do MAC}
[[Arquivo:NeighborSolicitation.png]]


Os 64 bits do identificador de hospedeiro são formados pela inserção de FFFE entre o terceiro e quarto byte do MAC e complementando-se o segundo bit menos significativo do primeiro. Supondo que o hospedeiro possui endereço MAC de \texttt{11:AA:BB:2A:EF:35} e o prefixo recebido do Roteador (via Advertência) é \texttt{2001:10:/64} então o endereço formado é: \texttt{2001:10::11A8:BBFF:FE2A:EF35} .
A mensagem ''Router Solicitation'' é utilizada para a descoberta de roteadores na rede local e ''Router Advertisement'' são utilizadas pelos roteadores, periodicamente, para anunciar sua presença e divulgar seu prefixo.  


\subsection{Transição de IPv4 para IPv6}
[[Arquivo:RouterSolicitation.png]]


Nem todos os roteadores podem ser atualizados simultaneamente, uma vez que ``dias de mudança geral'' são inviáveis. Os projetistas do IPv6 pensaram a transição de forma gradativa, com roteadores IPv4 e IPv6 convivendo simultaneamente. Para isto é utilizada uma técnica conhecida como ``tunelamento'', na qual datagramas IPv6 são carregados em datagramas IPv4 entre roteadores IPv4, como ilustra a figura \ref{Tunel}.
===Passos para autoconfiguração===


\begin{figure}[!htpb]
#Um endereço tentativa é formado com o prefixo  FE80 (''link-local address'') e associado ao endereço MAC da interface;
\centering
#O nó se junta aos grupos ''multicasting'';
\mbox{
#Uma mensagem ''Neighbor Solicitation'' é enviado com o endereço tentativa como ''target address''. Se detectado IP duplicado o nó deverá ser configurado manualmente;
\includegraphics[scale=.20]{figs/Tunel}}
#O nó realiza um ''Router Solicitation'' para o endereço FF02::2. (''multicast'' dos roteadores);
\caption{Tunelamento de um datagrama IPv6 em um IPv4 {\scriptsize\cite{Kurose&Ross2006e}}.}
#Todos roteadores do grupo ''multicast'' respondem e o nó se autoconfigura para cada um deles;
\label{Tunel}
\end{figure}


==Referências==
==Referências==

Edição atual tal como às 19h30min de 13 de maio de 2020

IPv6

Referências: Textos e vídeos [1].

O protocolo IPv6 é a nova versão do IP, especificado pela RFC2460, e deve substituir o IPv4. Além disto, o IPv6 é incrementado por várias outras RFCs, por exemplo: RFC2463 (ICMP for the Internet Protocol Version 6) e RFC3775 (Mobility Support in IPv6).

Apesar de ter sido definido a 20 anos o IPv6 ainda não tem data para ser implementado em definitivo na Internet. Este atraso se justifica pelo sucesso do IPv4, em particular por sua simplicidade de administração. Sua resiliência, que é a capacidade de voltar ao seu estado normal depois de ter sofrido uma pressão, como por exemplo, congestão ou falta de memória. Sua escalabilidade, na qual partes do sistema podem ser administrados como sistemas autônomos independentes. Sua flexibilidade e extensibilidade, a qual tem possibilitado soluções de alguns de seus problemas, como o CIDR que acabou com as classes de endereçamento, o NAT que possibilitou o uso de IP privados em uma rede interna e a autoconfiguração dos endereços em uma rede local com DHCP.

Um dos motivos que levaram ao desenvolvimento do IPv6 foi a escassez de endereços IP que se avizinhava no início dos anos 1990. Em partes isto foi devido ao uso de classes no IPv4, a qual atribuiu faixas gigantescas de endereços para algumas poucas empresas e instituições. Posteriormente, este problema acabou sendo minimizado com a proposição do endereçamento IP sem classes (CIDR) e também com o uso do NAT. Além da limitação do espaço de endereçamento o IPv4 não incluía em seu projeto original suporte para mobilidade, segurança e qualidade de serviço. Na questão da qualidade de serviço (QoS), o campo TOS (type of service) acabou sendo utilizado posteriormente, como especificado na RFC1349 (Type of Service in the Internet Protocol Suite).

As principais melhorias introduzidas pelo IPv6 são:

  • Ampliação do espaço de endereçamento de 32 bits para 128 bits;
  • Melhoria no formato do datagrama IP;
  • Melhoria no processo de autoconfiguração;
  • Inserção de mecanismos para tratamento de mobilidade (MIPv6);
  • Inserção de mecanismos de segurança (IPsec);
  • Inserção de mecanismos para facilitar o gerenciamento de QoS.

Estrutura do datagrama IPv6

O datagrama IPv6 possui seu cabeçalho com tamanho fixo de 40 bytes, como mostra a figura [2]:

  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |Version| Traffic Class |           Flow Label                  |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |         Payload Length        |  Next Header  |   Hop Limit   |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                                                               |
  +                                                               +
  |                                                               |
  +                         Source Address                        +
  |                                                               |
  +                                                               +
  |                                                               |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                                                               |
  +                                                               +
  |                                                               |
  +                      Destination Address                      +
  |                                                               |
  +                                                               +
  |                                                               |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • Versão (Version), de 4 bits, indica a versão do protocolo, no caso = 6 (0110).
  • Classe de tráfego (Traffic Class), com 8 bits, é utilizado por nós de origem e roteadores intermediários para diferenciar diferentes classes e prioridade de tráfego entre os pacotes IPv6; tem funcionalidade similar a utilização do campo TOS do IPv4 permitindo de implementar serviços diferenciados de QoS (DiffServ) para os pacotes IP.
  • Rótulo de fluxo (Flow Label), com 20 bits, pode ser utilizado por nós de origem para rotular sequências de pacotes que requerem tratamento especial em roteadores, como serviços tempo real.
  • Comprimento dos dados (Payload Length), com 16 bits, especifica o tamanho dos dados após o cabeçalho, em bytes.
  • Próximo cabeçalho (Next Header), com 8 bits, especifica o tipo do cabeçalho imediatamente após o cabeçalho IPv6; pode utilizar números similares aos do campo Protocol do IPv4, ou números específicos para o IPv6, os quais são atualmente estabelecidos Next Headerpor uma base on-line [3].
  • Limite de saltos (Hop Limit), com 8 bits, é decrementado de 1 em cada nó de encaminhamento do pacote; o pacote é descartado quando o Hop Limit chega a zero.
  • Endereço fonte (Source Address), com 128 bits.
  • Endereço destino (Destination Address), com 128 bits.
Diferenças do cabeçalho do IPv6 em relação a IPv4
Foram removidos do cabeçalho IPv6 os seguintes campos que haviam no IPv4:
  • Tamanho do cabeçalho (Header Length), uma vez que o cabeçalho IPv6 possui tamanho fixo de 40 bytes;
  • Identification, Flags e Fragment Offset, no IPv6 a fragmentação é realizada na origem e utiliza um cabeçalho de extensão (ver abaixo);
  • Header Checksum, o que tornou o processamento mais leve, evitando recalcular o valor do checksum em cada nó.
  • Opções e complementos (Options e Padding), que tiveram suas funções viabilizadas com os Next Header.

Extensões do cabeçalho IPv6

As extensões do cabeçalho do IPv6 localizam-se entre o cabeçalho base e o cabeçalho da camada de superior e não possuem quantidade ou tamanho fixo.

[1]

As principais extensões do cabeçalho IPv6são
  • Hop-by-Hop carrega informações que devem ser processadas por todos nós ao longo do caminho. Algumas opções incluem o Router Alert, utilizado para reserva de recursos (exemplo RSVP) ou encontrar destinos de multicast e a opção Jumbogram permite que pacotes maiores que 64K sejam transmitidos.
  • Destination Options deve ser processado apenas pelo nó de destino do pacote. Ele é utilizado no suporte ao mecanismo de mobilidade do IPv6.
  • Routing Header permite informar um conjunto de roteadores que devem ser visitados até o seu destino final e pode ser utilizada por aplicações que exigem qualidade de serviço. Também é utilizado como parte do mecanismo de suporte a mobilidade do IPv6.
  • Fragmentation é usada para possibilitar a fragmentação e remontagem de datagramas. O IPv6 usa a técnica PATH MTU Discovery para determinar a máxima MTU na trajetória do pacote. Se o pacote for maior que esta MTU então ele é fragmentado na origem. Os roteadores ao longo da rota não fragmentam o pacote. O destino remonta o pacote fragmentado. Os parâmetros utilizados são equivalentes aos do IPv4: Identification, identificação pacote; Flag, se igual a 1 indica que há mais fragmentos, se igual a 0 indica fragmento final; Fragment Offset, deslocamento do fragmento, em unidades de oito bytes, em relação ao início do pacote original.
  • Authentication Header e Encapsulating Security Payload fazem parte do cabeçalho IPSec.
Códigos para Next Header e ordem recomendada no pacote
[4]
Ordem      Tipo                Código
           No next header      59
1          Hop-by-Hop          00
2          Destination         60
3          Routing             43
4          Fragmentation       44
5          Authentication      51
6          Security            50
Protocolo  TCP                 06
Protocolo  UDP                 17
Protocolo  ICMPv6              58

Endereçamento IPv6 (RFC 3513)

O IPv6 tem endereçamento de 128 bits: espaço de 2128 endereços.

É utilizada uma notação hexadecimal com agrupamento de 16 bits separados por dois pontos, como por exemplo:

2001:0DB8:5002:2019:1111:76ff:FEAC:E8A6

São utilizadas regras para simplificar a representação de zeros, por exemplo o endereço:

0237:0000:ABCD:0000:0000:0000:0000:0010

pode ser transformado em:

237::ABCD:0:0:0:0:10

ou, melhor ainda, 237:0:ABCD::10

Prefixos de rede

No IPv6 os prefixos de rede são escritos do mesmo modo que no IPv4, utilizando a notação CIDR. Esta notação é representada da forma endereço-IPv6/tamanho do prefixo, onde tamanho do prefixo é um valor decimal que especifica a quantidade de bits contíguos à esquerda do endereço que compreendem o prefixo. O exemplo de prefixo de sub-rede apresentado a seguir indica que dos 128 bits do endereço, 64 bits são utilizados para identificar a rede. Uma rede também pode ser subdividida em sub-redes [1]:

   Prefixo 2001:db8:3003:2::/64
   Prefixo global 2001:db8::/32
   ID da sub-rede 3003:2

No IPv6 o identificador da interface dentro de uma rede tem tamanho padrão de 64 bits.

Tipos de endereçamento IPv6

  • Unicast: identifica uma única interface, de modo que um pacote enviado a um endereço unicast é entregue a uma única interface.
  • Anycast: identifica um conjunto de interfaces. O roteamento da Internet permite encaminhar pacotes ao endereço anycast mais próximo. Um endereço anycast é utilizado em comunicações de um-para-um-de-muitos.
  • Multicast: identifica um conjunto de interfaces, entretanto, um pacote enviado a um endereço multicast é entregue a todas as interfaces associadas a esse endereço. Um endereço multicast é utilizado em comunicações de um-para-muitos. O Ipv6 eliminou o broadcast e enriqueceu o processo de multicast;.

Endereços Unicast

Existem alguns tipos de endereços unicast IPv6 [1]:

  • Global Unicast: equivalente aos endereços públicos IPv4, o endereço global unicast é globalmente acessível na Internet IPv6. Utiliza os 64 bits mais a esquerda para identificação da rede e os 64 bits mais a direita para identificação da interface. A identificação da rede engloba duas partes: o prefixo de roteamento global e a identificação da sub-rede.
  • Link-Local: pode ser usado apenas no enlace específico onde a interface está conectada e traz a noção de endereços privados dentro de uma rede. O endereço link-local é atribuído automaticamente utilizando o prefixo FE80::/64.
  • Unique-Local: é endereço globalmente único para ser utilizado apenas para comunicações locais.
Outros endereços notáveis
  • Endereço Loopback:
::1
  • Endereço não especificado:
::
  • Endereços Multicast:
FF02::1 -- todos os nós do enlace;
FF02::2 -- todos os roteadores do enlace.

Formação do Endereço a partir do MAC

Os 64 bits do identificador de hospedeiro são formados pela inserção de FFFE entre o terceiro e quarto byte do MAC e complementando-se o segundo bit menos significativo do primeiro byte do MAC.

Se endereço MAC da interface for:

AA:11:BB:2A:EF:35 

adiciona-se os dígitos FFFE na metade do endereço:

AA11:BBFF:FE2A:EF35

complementa-se o segundo bit menos significativo do primeiro byte:

AA = 10101010 -> 10101000 = A8
A811:BBFF:FE2A:EF35

prefixo recebido do Roteador (via Advertência):

2001:10:/64 

endereço final:

2001:10::A811:BBFF:FE2A:EF35

ICMPv6

O ICMPv6 (RFC2463) reporta erros se pacotes não podem ser processados apropriadamente e envia informações sobre o status da rede. Apresenta várias melhorias em relação ao ICMPv4. O IGMP, que trata multicast no IPv4, foi incorporado no ICMPv6. O ARP/RARP foi incorporado através da utilização da técnica Neighbour Discovery (descoberta de informações da vizinhança). Incorporou mensagens de registro de localização para IP Móvel.

As mensagens ICMPv6 são transportadas por datagramas IPv6 com número Next Header igual a 58H e tem formato geral mostrado na figura:

      0                   1                   2                   3
      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |     Type      |     Code      |          Checksum             |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                                                               |
     +                         Message Body                          +
     |                                                               |

As mensagem com bit mais significativo (MSB) do campo type = 0 indicam erro (valores de 0--127) e com o MSB = 1 são de informação (valores de 128--255).

São exemplos de mensagens de erro:

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

São exemplos de mensagens de informação:

      Type
       128      Echo Request                 
       129      Echo Reply                  
       133-136  Neighbor Discovery

O campo Code indica o código da mensagem, por exemplo, para mensagens de erro Destination Unreachable poderemos ter:

  Type           1
  Code           0 - No route to destination
                 1 - Communication with destination
                       administratively prohibited
                 2 - Beyond scope of source address
                 3 - Address unreachable
                 4 - Port unreachable
                 5 - Source address failed ingress/egress policy
                 6 - Reject route to destination

A mensagems de erro Packet Too Big (Type = 2, Code = 0) é utilizada pela técnica de descoberta da MTU do enlace (Path MTU Discovery), uma vez que o IPv6 não fragmenta do datagrama nos roteadores intermediários. Nesta técnica o nó emissor assume a MTU do seu enlace de saída e envia o pacote para destino. Caso algum roteador da rota detecte que o pacote é muito grande para o MTU então ele avisa o nó fonte com ICMPv6 Packet Too Big (que inclui o tamanho da MTU do enlace problema). O nó usa esta nova MTU para encaminhar o pacote novamente ao seu destino, podendo o processo todo pode se repetir em outros roteadores.

A mensagems de erro Time Exceeded (Type = 3, Code = 0) é enviada quando o limite de saltos (hop limit) é excedido em um dado roteador.

Autoconfiguração

A autoconfiguração (RFC2462) é um dos pontos fortes do IPv6 permitindo gerar endereços IP automaticamente para as interfaces, sem nenhum tipo de configuração manual. Para isto o IPv6 combina prefixos divulgados pelos roteadores com o endereço de MAC (ou número randômico). Na ausência de roteadores usa-se o prefixo FE80 para gerar um endereço privado link-local.

A autoconfiguração é usada quando um sítio não necessita estabelecer endereços particulares as estações. Caso haja necessidade de se atribuir endereços específicos, pode-se utilizar o DHCPv6, como no IPv4.

Na autoconfiguração são utilizadas mensagens ICMPv6 de descoberta de vizinhos (Neighbor Discovery) (RFC2461), as quais são equivalentes as mensagens ARP. As mensagens ICMPv6 Neighbor Discovery podem ser do tipo (entre outras):

Type Code
133  0    Router Solicitation
134  0    Router Advertisement
135  0    Neighbor Solicitation
136  0    Neighbor Advertisement

As mensagens Neighbor Solicitation e Neighbor Advertisement são utilizadas para a descoberta de vizinhos e detecção de endereços duplicados.

A mensagem Router Solicitation é utilizada para a descoberta de roteadores na rede local e Router Advertisement são utilizadas pelos roteadores, periodicamente, para anunciar sua presença e divulgar seu prefixo.

Passos para autoconfiguração

  1. Um endereço tentativa é formado com o prefixo FE80 (link-local address) e associado ao endereço MAC da interface;
  2. O nó se junta aos grupos multicasting;
  3. Uma mensagem Neighbor Solicitation é enviado com o endereço tentativa como target address. Se detectado IP duplicado o nó deverá ser configurado manualmente;
  4. O nó realiza um Router Solicitation para o endereço FF02::2. (multicast dos roteadores);
  5. Todos roteadores do grupo multicast respondem e o nó se autoconfigura para cada um deles;

Referências


Evandro.cantu (discussão) 15h06min de 12 de maio de 2020 (-03)