IPv6
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).
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:
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |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 (\textit{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 (RFC3232), os quais são atualmente estabelecidos por uma base on-line no endereço www.iana.org, como por exemplo:
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.
- Endereço fonte (Source 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:
- Tamanho do cabeçalho (Header Length), uma vez que o cabelalho IPv6 possui tamanho fixo;
- 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);
- Header Checksum, o que tornou o processamento mais leve, evitando recalcular o valor do checksum em cada nó.
Extensões do cabeçalho IPv6
As extensões do cabeçalho IPv6, definidas na RFC2460 são as seguintes:
- 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.
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.
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.
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.
\subsubsection*{Endereçamento IPv6 (RFC 3513)}
O IPv6 tem endereçamento de 128 bits: espaço de $2^{128}$ endereços!!
É utilizada uma notação hexadecimal com agrupamento de 16 bits separados por ``dois pontos, como por exemplo:
\texttt{2001:0DB8:5002:2019:1111:76ff:FEAC:E8A6} .
São utilizadas regras para simplificar a representação de zeros, por exemplo o endereço:
\texttt{0237:0000:ABCD:0000:0000:0000:0000:0010} , pode ser transformado em:
\texttt{237::ABCD:0:0:0:0:10} , ou, melhor ainda,
\texttt{237:0:ABCD::10}.
\subsubsection*{Tipos de endereçamento IPv6}
\begin{itemize}
\item \textit{Unicast}: identifica um hospedeiro (interface); \item \textit{Multicast}: identifica um conjunto de hospedeiros. O Ipv6 eliminou o \textit{broadcast} e enriqueceu o processo de multicast; \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.
\end{itemize}
\subsubsection*{Endereço \textit{Unicast}}
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.
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} .
Outros endereços notáveis:
\begin{itemize}
\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 \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 \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 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 + | |
\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).
São exemplos de mensagens de erro:
{\small \begin{verbatim}
Type 1 Destination Unreachable 2 Packet Too Big 3 Time Exceeded 4 Parameter Problem
\end{verbatim}}
São exemplos de mensagens de informação:
{\small \begin{verbatim}
Type 128 Echo Request 129 Echo Reply 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:
{\small \begin{verbatim}
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
\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 \textit{Time Exceeded} (\textit{Type} = 3, \textit{Code} = 0) é enviada quando o limite de saltos (\textit{hop limit}) é excedido em um dado roteador.
\subsection{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 é 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):
{\small \begin{verbatim} Neighbor Discovery: Type Code 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}
\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}
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} .
\subsection{Transição de IPv4 para IPv6}
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}.
\begin{figure}[!htpb] \centering \mbox{ \includegraphics[scale=.20]{figs/Tunel}} \caption{Tunelamento de um datagrama IPv6 em um IPv4 {\scriptsize\cite{Kurose&Ross2006e}}.} \label{Tunel} \end{figure}
Referências
- ↑ KUROSE, J.F; ROSS K. W. Redes de Computadores e a Internet: Uma abordagem top-down, São Paulo: Pearson, 2010.
- ↑ http://www.rfc-editor.org/info/rfc2460
Evandro.cantu (discussão) 15h06min de 12 de maio de 2020 (-03)