sexta-feira, 19 de outubro de 2012

Getting Started with the Internet of Things - Parte 1

    Muito embora eu tenha á publicado artigos relacionas aplicações do Netduino Plus envolvendo rede de internet uma das maiores referências nessa parte é o livro do Cuno Pfister - Getting Started with the Internet of Things. O livro trata do Netduino Plus e aplicações para internet de um jeito fácil e rápido. 
    Nesta série de artigos pretendo explorar o livro e mostrar um pouco do que o livro fala ampliando a discussão para aplicações em automação doméstica e monitoramento/medição. Para quem quiser comprar o Livro: O'REILLY  Amazon.com. Um apêndice disponibilizado pelo Chris Walker no site do Netduino: AQUI.

       O livro começa mesmo no capítulo II: Dispositivos funcionando como clientes HTTP. Trata-se de um capítulo inteiramente baseado  no "Pachube", um serviço na nuvem especialmente dedicado ao armazenamento de informações provenientes de dispositivos pendurados na rede em fase de desenvolvimento. Certamente você não encontrará mais esse nome pela rede, na verdade o serviço agora se chama Cosm, o livro é de 2011, ou seja, está velho...

      O .NET MF disponibiliza duas implementações para aplicações HTTP: (i) uma em alto nível para tratar requisições no espaço System.Net e (ii) outra em baixo nível para envio de Socket no espaço System.

Alguns conceitos

     Antes de iniciar propriamente no dito cujo, vale a oportunidade de revisar alguns conceitos sobre internet e protocolos. O livro começa nessa parte de uma maneira bem emblemática jogando as informações mínimas relevantes.
     Assim como ocorreu na comunicação serial diversos protocolos começaram a ganhar corpo com o advento da internet, iniciando-se no uso militar da década de 70 e 80 os protocolos passaram por uma longa evolução até a chegada de um "modelo ideal" que permitisse de modo bastante universal enviar quase todo o tipo de informação por ele: o protocolo TCP/IP.

   O TCP/IP é, na verdade, não apenas um protocolo mas sim um conjunto de protocolos de comunicação entre dispositivos em rede chamado muitas vezes de "pilha TCP/IP". TCP quer dizer Transmission Control Protocol, Protocolo de Controlo de Transmissão, e IP significa Internet Protocol,  Protocolo de Interconexão. Pode-se dizer que trata-se de camadas de tratamento de transporte de informação em alto nível (complicado!!???), onde cada camada é responsável por um grupo de tarefas, fornecendo um conjunto de serviços bem definidos para o protocolo da camada superior. As camadas mais altas estão logicamente mais perto do usuário (chamada camada de aplicação) e lidam com dados mais abstratos, confiando em protocolos de camadas mais baixas para tarefas de menor nível de abstração.


     O modelo OSI (modelo de topologia da internet) é um grupo de sete camadas que foi tomado como base para a criação do TCP/IP. O TCP/IP é convencionalmente dividido em 4 níveis básicos: Host/rede; Inter-rede; Transporte; e Aplicação, muito embora exista na internet o modo "novo" com 5 camadas, que retira o excesso do modelo OSI e melhora o modelo TCP/IP: Física; Enlace; Rede; Transporte; e Aplicação.

      Para não delongar muito a explicação sobre isso pode-se dizer que trata-se de uma solução prática para problemas de transmissão generalizada de dados.


      Há de se convir que as camadas mais "altas", como mostra o diagrama, são mais inteligíveis por parte de nós usuários, enquanto aquelas mais abaixo estão logicamente mais perto da transmissão física do dado (os bits's efetivamente transmitidos). Podemos entender isso como uma programação em camadas: cada camada serve de funções a camada mais acima.

      O que queremos de fato é uma abstração dos detalhes de transmissão bits através da ethernet. Por exemplo, quando o Firefox envia a página não a necessidade de se preocupar com a detecção de colisão de bits, a camada Física se preocupa com isso evitando assim ter de conhecer os detalhes de todas as aplicações e seus protocolos.

Essa topologia permite que camadas de cima forneçam serviços que as camadas de baixo não podem fornecer como exemplo temos o IP que é projetado para não ser confiável. Isso significa que toda a camada de transporte deve indicar se irá ou não fornecer confiabilidade e em qual nível.

O TCP (Transmission Control Protocol - Protocolo de Controle de Transmissão), é um protocolo orientado a conexões confiável que permite a entrega sem erros de um fluxo de bytes.

O UDP fornece integridade de dados (via um checksum) mas não fornece entrega garantida; já o TCP fornece tanto integridade dos dados quanto garantia de entrega (retransmitindo até que o destinatário receba o pacote).


Vamos agora fazer um breve apanhado das camadas de rede:

(i) Camada de aplicação:
        Trata-se da camada utilizada por 99% dos programas de rede para comunicação através de uma rede com outros programas. Códigos desenvolvidos nessa camada tendem a ser mais simples sendo que os dados são tratados no programa já obedecendo o formato da aplicação que quando necessários são codificados dentro do padrão de um protocolo.
        Serviços que suportam diretamente aplicações do usuário são tratados nessa camada são eles o HTTP (navegação na World Wide Web), FTP (transporte de arquivos), SMTP (envio de email), SSH (login remoto seguro), DNS (pesquisas nome <-> IP) e muitos outros.

     
(ii) Camada de Transporte

        Esta camada é responsável por resolver problemas como confiabilidade, integridade e a direção que o dado deve ser transmisito/recebido. O roteamento de dados está nessa camada também muito embora considerado parte da camada de rede.
     
(iii) Camada de Enlace
        A camada da pele enlace é parte do modelo TCP/IP  liga a ancoragem da aplicação/transporte com o hardware que fará a transmissão da informação. Podendo ser controlado tanto em software (device driver) para a placa de rede quanto em firmware. Responsável por atribuir aos dados um cabeçalho preparando os dados para transmissão. Da mesma forma, a camada de enlace recebe os dados, retira os header's adicionados e encaminhar os pacotes recebidos para a camada de rede.
        Veremos mais sobre essa camada quando implementamos dispositivos externos para comunicação como o mIP faz no Netduino que empacota as mensagens para o ENC28J60 e outros "drivers"  para a wifly shield.

(iv) Camada Física


        A camada física do Protocolo TCP/IP trata das características elétricas e mecânicas do meio, como tipos de conectores e cabos utilizado para estabelecer uma comunicação.

Com essa breve introdução já é possível continuar a entender o que está no .NET MF para aplicações pela internet.

Devaneando Aplicações

     Eu gosto sempre de firmar uma proposição inicial como objetivo de algum estudo, no nosso caso o livro já faz uma referência ao objetivo: enviar dados de temperatura de um sensor montado no Netduino Plus por internet.
     Como eu já vinha dizendo existem muitos protocolos por Ethernet naturalmente o livro trata apenas do TCP/IP - o que se alega em favor é a modularidade - como existem muitos dispositivos adaptados a esse tipo de protocolo torna-se mais abrangente uma solução em TCP/IP via HTTP por exemplo.
     O protocolo mais usado usando TCP/IP é o HTTP ( Hypertext Transfer Protocol ). Através do HTTP é possível enviar mensagens e receber pacotes em qualquer computador ou dispositivo conectado na rede, o que é uma vantagem, assim, focaremos nele.