Principais componentes na arquitetura de redes ICN
As unidades básicas de dados transmitidos por uma rede ICN são denominados NDOs (Named Data Objects). Usualmente, o NDO contém uma nomenclatura única; os bits que representam as informações da aplicação; uma assinatura digital que conecta o nome e os dados; uma chave pública que é usada para gerar essa assinatura.
Em uma rede ICN, ainda possuímos 3 papéis principais de seus componentes, o que influencia diretamente nos principais componentes da arquitetura. Qualquer dispositivo na rede pode estar exercendo, um, dois ou os três diferentes papéis simultaneamente, que são eles:
1) Os produtores: são eles os responsáveis por originar os NDOs. Eles são equipados com chaves público-privada, e devem publicar alguma informação acessível para disponibilizar os dados ao público.
2) Os consumidores: são eles os responsáveis por originar as requisições na rede.
3) Os roteadores: são os equipamentos responsáveis por transmitir os pacotes pela rede.
Nomeação
A nomeação pode ser considerada o principal elemento da arquitetura ICN, já que essa é completamente baseada nos nomes dos NDOs.
Fig 1: Se em redes centradas em Sistemas finais o IP configura-se como entidade central da conectividade, na ICN esse papel encontra-se em blocos de conteúdos nomeados. (extraido de https://named-data.net/project/execsummary/)
Para identificar um dado, independentemente de onde está armazenado, como foi encontrado e o caminho pelo qual ele é transmitido, a nomeação precisa ser feita de forma a garantir que os nomes serão únicos para identificar cada NDO distinto. Também é necessário que eles sejam persistentes e escaláveis, ou seja, preservem esse teor único independente de onde são encontrados e do quando.
Pode-se encontrar diferentes técnicas de nomeação que permitem identificar e requisitar o conteúdo de forma eficiente. A seguir, nos aprofundaremos mais sobre três delas: a nomeação plana, hierárquica e por atributos. A forma escolhida para dar nome aos conteúdos ainda é um ponto chave das diferentes propostas de arquiteturas, que serão discutidas mais à frente.
Fig 2: métodos de nomeação escolhidas por cada arquitetura de ICN (extraído de [3])
Nomeação Plana
A nomeação plana se trata de strings globalmente únicas, ou uma sequência de bits aparentemente aleatórios que dão nome a determinado conteúdo. Há diversas formas de mapear um dado conteúdo em seu identificador plano, sendo o mais comumente encontrado funções criptográficas de hash (uma função aplicada tal que é praticamente impossível recriar o valor de entrada utilizando somente o valor de dispersão), que geram cadeias de bit de comprimento fixos a partir de blocos de dados não arbitrários.
Por não possuírem nenhuma semântica, ou seja, não há nenhuma relação de localização, propriedade ou característica que influenciam na formação do nome, esse pode ser considerado persistente. Funções hash de certa forma também garante a unicidade da nomenclatura, já que há uma baixa probabilidade de colisões em seu mapeamento.
Um ponto positivo na utilização da nomeação plana é a autocertificação dos conteúdos e de seus identificadores. Utilizando-se pares de hashes criptográficos, temos uma chave pública e outra chave que é um rótulo arbitrário escolhido pelo publicador, sendo assim possível verificar a validade do pedido e da resposta.
Um contraponto entretanto é que nomes planos não são amigáveis ao usuário,sendo necessário mecanismos adicionais para esse mapeamento entre nomes e conteúdos. Essa falta de agregação direta ainda traz um grande problema de escalabilidade para o roteamento, podendo ser prejudicial à eficiência da implementação desses protocolos.
Nomeação Hierárquica
A nomeação hierárquica por sua vez, é construída pela concatenação de múltiplos componentes com uma lógica hierárquica, que normalmente podem ser naturalmente lidos pelo usuário. Em contraposição a nomeação plana, a hierárquica segue uma semântica, de tal forma que seus componentes refletem alguma informação a respeito do conteúdo.
Fig 3: Exemplo de nome hierárquico estruturado como URL (extraído de [5])
Um ponto positivo é que nomes hierárquicos podem ser mapeados de forma análoga à agregação de rotas realizadas por protocolos de roteamento IP, assim, a carga sobre o roteamento fica reduzido, sendo inclusive possível adaptar protocolos atuais. Além disso, esses também são uma base para segurança dos dados, já que o usuário final confirma se o conteúdo é o desejado, ou produzido por um produtor confiável, através do contexto do nome.
O contraponto contudo, é que nomes hierárquicos não são persistentes. Como esses devem refletir características dos dados, assim se alguma identidade é mudada, como o publicador do conteúdo, o nome consequentemente também mudará.
Nomeação por atributos
A nomeação por atributos possui uma proposta diferente das demais técnicas apresentadas anteriormente, de forma que não propõe uma identificação estrita a cada conteúdo. São propostos, por sua vez, pares de atributos valor-atributo para a identificação.
Chamamos o conjunto de restrições definidas pelo nome de predicados, que são mapeados para realizar a relação conteúdo-nome. Podemos ainda ter predicados que cobrem outros, quando um reduz o universo definido por um anterior. Isso acarreta em um aliviamento da carga sobre os protocolos de roteamento, que não precisam da ajuda de mecanismos externos para funcionar.
No quesito de problemas, temos a questão da unicidade, já que é difícil definir um conjunto mínimo necessário de restrições para correta identificação do conteúdo. Esse fato implica ainda em outro mais grave, que é a obtenção dos conteúdos em excesso ou falta, uma vez que o usuário pode não conseguir explicitá-lo de forma correta. Isso, além de prejudicar o desempenho das aplicações, ainda no caso de excesso traz uma ineficiência da rede como um todo.
Roteamento
O roteamento de dados diz respeito a construir um caminho para transferência de informações entre o usuário que faz a requisição e o provedor desta. Podemos dividi-lo em duas fases: O roteamento da requisição do NDO e o roteamento do NDO resposta.
Diferentemente do roteamento em uma rede tradicional, em uma arquitetura centrada no conteúdo, o roteamento está intrinsecamente relacionado a nomeação destes. Como não há um dado a respeito da localização propriamente dita, a rede precisa de outras informações a fim de melhor encaminhar requisições, de forma que essas encontrem um nó da rede que possua uma cópia do dado requisitado.
No geral, temos que o roteamento de conteúdo em uma rede ICN deve dispor de algumas características: A orientação a conteúdo, já que não possui-se informações sobre a localização de remetentes e destinatários; Robustez, tolerância, desvio e recuperação rápida a falhas; Eficiência, rapidez na resposta e tentativa de minimizar o tráfego na rede; Escalabilidade: uma proposta de roteamento para redes ICN deve funcionar desde topologias pequenas, de contexto local, até grandes, de escopo mundial.
Assim, as propostas no que tangem o roteamento de conteúdo em redes ICN podem ser divididas em dois grandes grupos: o roteamento não hierárquico e o roteamento hierárquico, que serão aprofundados a seguir.
Roteamento Não Hierárquico
O protocolo de roteamento não hierárquico parte de uma premissa semelhante a maior parte dos protocolos utilizados atualmente na internet. Isso é benéfico ao passo que muitos problemas já foram encontrados e solucionados, assim como muitas otimizações e melhorias já foram propostas.
Neste, não existem estruturas para o armazenamento de informações a respeito de roteadores, nem há nenhuma forma de hierarquia ou subordinação entre eles. Os enlaces entre nós são estabelecidos a cada momento, de acordo com as demandas instantâneas na rede. Por sua vez, o mapeamento desta encontra-se difundido para sua completude,sendo possível que qualquer roteador realize cálculos de melhor caminho.
Desta forma, o tráfego da rede não é estabelecido de forma determinística,ou seja, há inúmeras formas de obter-se um conteúdo válido, aumentado assim a disponibilidade da rede como um todo, gerando redundância, eliminando pontos únicos de falha, potencialmente melhorando a performance.
Roteamento Hierárquico
O roteamento hierárquico por sua vez, pode ser dividido em duas propostas, sendo que em ambas os roteadores seguem uma estrutura fortemente hierarquizada, de forma que a informação transita pela rede de forma mais determinística que no caso não hierárquico. A primeira proposta é a de árvores hierárquicas, e a segunda é a de tabelas hash distribuídas (DHT - Distributed Hash Tables).
Fig 4: A esquerda exemplo de rede definida como árvore hierárquica, a direita exemplo de DHT referente a mesmo domínio (extraído de [5]))
As árvores hierárquicas muito se assemelham a uma estrutura de dados tradicional em árvore. Nós pais (roteadores) estabelecem relacionamentos com os seus filhos (também roteadores), configurando-se como raízes dessas sub-árvores. Já nós pares são nós que encontram-se em um mesmo subnível em uma estrutura baseada em um mesmo nó raiz.
As informações de roteamento ficam concentradas nos nós pais, ou seja, nas raízes das subárvores. Assim, as rotas de comunicação entre roteadores pares são explícitas e a comunicação com seu pai só é necessária quando há um desejo de transmitir um dado pacote para outro nível da rede.
As vantagens desse método são a redução do custo computacional e de processamento em cada roteador. Além disso, reduz-se o gasto de memória, ao passo que cada roteador apenas guarda informações sobre seus filhos e não a respeito da rede inteira. Simultaneamente, isso se torna um problema, visto que a rede como um todo passa a ter diversos pontos únicos de falha, o que a torna mais vulnerável a falhas.
Já nas DHTs, tabelas de código hash criptografados são divididas entre os nós , de forma a distribuir a carga e evitar pontos únicos de falha. No modo hierárquico essas tabelas são implementadas ainda de forma a gerar redundância, de forma que um pai possua a tabela de todos os seus filhos. Dessa forma, a rede apresenta um forte isolamento a falhas, já que um problema em determinada subárvore não afetará o restante da rede.
Caching
O armazenamento de NDOs é um ponto chave no serviço ICN e é feito através do caching dos dados dentro da própria rede. Todos os nós da rede, incluindo os nós que compõem a infraestrutura da rede, nós domésticos e móveis, potencialmente possuem caches. Requisições de um NDO feita por um consumidor podem ser atendidas por qualquer nó que possua uma cópia do dado em memória.
Tipicamente na internet, uma pequena parcela dos conteúdos contribuem com a maior parte do tráfego na rede. Assim, aumentar a disponibilidade desses conteúdos populares através do caching, trazendo-os mais perto dos consumidores, representa uma potencial diminuição do congestionamento da rede, consequentemente resultando em uma melhora do serviço e eficiência.