# 6LoWPAN

6LoWPAN (acrónimo para IPv6 over Low power Wireless Personal Area Networks) é o grupo de desenvolvimento da IETF, que cria e mantêm as especificações que nos permitem usar IPv6 nas redes IEEE 802.15.4. Este grupo trabalha para definir os RFC (Request For Comments) do 6LoWPAN. Cada RFC, define standards de métodos, comportamentos, pesquisas ou inovações, capazes de definir a compressão, encapsulação e fragmentação do cabeçalho dos pacotes IPv6 em frames IEEE 802.15.4, permitindo que os mesmos sejam enviados e recebidos nestas redes. Os mais importantes são:
   * RFC4919 – Define uma visão geral, suposições, declarações do problema, e metas do 6LoWPAN;
   * RFC4944 ou draft-ietf-6lowpan-format – Define como é feita a transmissão dos pacotes IPv6 nas redes 802.15.4;
   * RFC6282 ou draft-ietf-6lowpan-hc – Define o formato da compressão dos pacotes IPv6 nas redes 802.15.4;
   * RFC6775 ou draft-ietf-6lowpan-nd – Define optimizações do Neighbor Discovery para o 6LoWPAW;
   * RFC6550 ou draft-ietf-roll-rpl-19 – Define o protocolo de encaminhamento nas redes de baixa potencia e com perdas (RPL).

## Sumário

O grupo de trabalho 6LoWPAN da IETF une esforços no sentido que seja possível a comunicação pelo protocolo IPv6 nas redes IEEE 802.15.4. As questões mais pertinentes passam pela fragmentação/desfragmentação e a compressão dos cabeçalhos IPv6. A MTU máximo do IPv6 é de 1280 octetos, enquanto no IEE 802.15.4 é de 127 octetos, tornando-se importante o uso de fragmentação e desfragmentação. Normalmente nas redes LoWPAN o cabeçalho IP e UDP contêm muitos campos desnecessários e outros que também podem ser comprimidos. Portanto é importante e indispensável a compressão dos cabeçalhos IPv6 para o sucesso e futuro do uso de IPv6 nas RSSF. O 6LOWPAN cria uma camada de adaptação entre o IEEE 802.15.4 e o IPv6, com cabeçalhos específicos que podem ser adicionados ou removidos mediante a sua necessidade, permitindo que seja apenas enviado o que realmente é útil.

## Arquitectura

O 6LoWPAN baseia-se na ideia de que a internet é inteiramente construída em IP (IP enable). Significa que cada dispositivo (Host) Low Power deverá ter um IP tornando-se também uma parte no mundo da Internet ou "Internet of Things". A “Internet of Things” é criada através da conexão de várias ilhas de redes de dispositivos low power, em que cada ilha é uma rede independente da Internet, ou seja, os pacotes transmitidos na mesma rede não são transmitidos para redes diferentes, mas sim encaminhados através de um coordenador (edge router) até à rede pretendida. Cada ilha LoWPAN partilha o mesmo prefixo (prefix) do endereço IPv6 (os primeiros 64 bits do endereço IPv6). A cada ilha é limitada a 64000 dispositivos, devido ao limite imposto pelo endereçamento utilizado pelo IEEE 802.15.4, que usa 16 bits de endereços para cada dispositivo na rede, obtendo uma identificação IPv6 única. Existem três tipos de redes 6LoWPAN:
   * Ad-Hoc – São redes que não estão conectadas à Internet e que funcionam sem qualquer tipo de infra-estrutura;
   * Simple – São redes simples, interligadas a outras redes ou mesmo à Internet através de um coordenador;
   * Extended – São múltiplas redes com arquitecturas simples interligadas por múltiplos coordenadores e ligadas a um backbone ou mesmo à Internet.
É importante referir que o coordenador tem um papel crucial no encaminhamento da informação, já que é o responsável pela conexão das redes, controlo de fluxo, fragmentação/desfragmentação bem como na compressão/descompressão dos pacotes IPv6 e registo dos endereços através do Neighbor Discovery. Nos casos em que a rede LoWPAN está ligada a uma rede IPv4, o coordenador possibilita também a interligação entre as duas redes.

## Endereçamento

O endereçamento nas redes 6LoWPAN funciona como em qualquer rede IPv6, permitindo na camada de adaptação usar dois tipos de endereços:
* Endereços da camada de ligação lógica – Estes endereços são usados por todos os dispositivos e poderão conter endereços de 16 bits e de 64 bits;
* Endereços da camada de rede – Apenas o coordenador contém endereços da camada de rede, uma vez que faz a ligação entre a rede IPv6 e 6LoWPAN.

## Compressão do cabeçalho IPv6

De modo a ter uma maior eficiência numa rede 6LoWPAN, todos os pacotes IPv6 devem ser utilizados apenas num pacote IEEE802.15.4, de modo a evitar a fragmentação e a desfragmentação dos pacotes. Para isso são usados dois tipos de compressão, a seguir apresentados:
* LOWPAN_HC1 – Utilizado para a compressão do cabeçalho IPv6. Este tipo de mecanismo funciona muito bem nas comunicações unicast.
* LOWPAN_HC2 – Utilizado para a compressão do cabeçalho UDP, este também pode ser usado opcionalmente em pacotes com a compressão HC1.
Muitos dos campos do cabeçalho IPv6 são desnecessários e outros são impossíveis de comprimir.
Os campos possíveis de comprimir são:
* Traffic Class e flow label – Estes campos normalmente são zero, no entanto se necessário, o campo C do LOWPAN_HC1 pode estar inactivo (0) e os campos não são enviados, ou activo (1), sendo neste caso incluído nos campos non-compreessed;
* Payload lenght – Visto que pode ser obtido ou pela frame da camada de ligação lógica ou pelo mecanismo de fragmentação, não existe necessidade de o enviar num cabeçalho comprimido;
* Next header – Este campo é usado para indicar o tipo do próximo cabeçalho (UDP, TCP ou ICMP) e usa 8 bits. De forma a reduzir este campo o LOWPAN_HC1 usa o campo NH de dois bits.
Next header (Bits 5 e 6)
* 00 - not compressed; São enviados os 8 bits
* 01 - UDP
* 10 - ICMP
* 11 - TCP
Os campos impossíveis de comprimir são enviados no campo non-compressed, que se encontra no final do HC1 e/ou HC2, estes não são enviado ou são adicionados na seguinte ordem:
1) Version – Como se trata sempre de uma rede 6LoWPAN, a versão é sempre 6, logo não é necessário enviar;
2) Hop Limit – Este campo foi considerado muito difícil de comprimir, por isso é sempre enviado no mesmo campo, sendo sempre o primeiro;
3) Prefixo do endereço de origem (64 bits) - se o bit mais significativo do SAE (Source Address Enconding) for zero;
4) Prefixo do endereço da interface ID de origem (64 bits) – se o bit menos significativo do SAE for zero;
5) Prefixo do endereço de destino (64 bits) - se o bit mais significativo do DAE (Destination Address Enconding) for zero;
6) Prefixo do endereço da interface ID de destino (64 bits) – se o bit menos significativo do DAE for zero;
7) Traffic Class (8 bits) e flow label (20 bits) – se o C for zero;
8) Next header (8 bits) – se o NH for zero;
Qualquer campo non-compressed do HC2 - caso seja necessário. Qualquer cabeçalho que venha neste campo ou payloads, não são sujeitos à compressão.