# Rede sobreposta

Uma rede sobreposta, ou rede overlay, é um conceito de redes de computadores. Neste tipo de redes, uma nova rede é criada virtualmente por cima de uma já existente. Originalmente, a internet era uma rede sobreposta, já que ela se utilizava da rede de telefone para funcionar, mas atualmente, com VoIP, o caso vem se invertendo. Os nós nas redes sobrepostas podem ser imaginados como sendo conectados por laços virtuais, cada um representando um caminho, que podem passar por diversos laços físicos, na rede em que estão sobrepostos. É um conceito muito importante para o paradigma P2P.

## Uso

Redes sobrepostas são utilizadas para telecomunicação por causa da disponibilidade de equipamentos comutação de circuitos digital e fibra ótica. Redes de transporte de telecomunicação e redes IP (que combinadas compõem a internet) são todas sobrepostas com pelo menos uma camada de fibra ótica, uma camada de transporte e uma camada IP ou de comutação de circuitos.
O exemplo mais simples de uma rede sobreposta está presente em redes domésticas, com uma rede ethernet, que pode conectar computadores que estão na mesma rede. De acordo com este exemplo, a rede é criado na camada de enlace. Isto é o suficiente para ter uma comunicação entre os nós desta rede, mas não para ligar esta rede com outras redes, como a internet. Para fazer isso, precisamos adicionar a camada de rede para nossos computadores e um roteador, dando assim o sistema a capacidade de rota (este é o novo serviço) e a criação de uma rede sobreposta.
Além disso, a internet também é utilizada como base para a criação de novas redes sobrepostas, com o intuito de rotear mensagens sem se basear em endereços de IP. Dessa forma, tabelas de dispersão podem ser utilizadas para rotear mensagens para um nó baseado no seu endereço lógico da rede sobreposta, sem precisar saber previamente o seu endereço IP. Esse tipo de rede também vem sendo proposta como um meio de melhorar o roteamento da internet. Porém, propostas anteriores como IntServ, DiffServ e multicast IP não receberam uma aceitação muito grande por requerirem modificações em todos os roteadores da rede.

### Outros usos

* Muitas redes P2P (por exemplo, torrent) são redes sobrepostas, porque elas são organizadas como um sistema virtual de nós que funcionam em cima da Internet.
* Redes sobrepostas podem ser utilizadas para que um pequeno grupo de nós possa se comunicar com benefícios superiores em relação aos que são acessíveis a outros nós da rede. Dessa forma, criando uma rede com hierarquias.
* Para estabelecer uma melhor qualidade de serviço (QoS) na rede, uma rede sobreposta pode ser utilizada.
* Redes de distribuição de conteúdo.
* Redes Privadas Virtuais (VPN).

## Funcionamento

Uma rede sobreposta é organizada como nós de laços virtuais que funcionam por cima da internet. Dessa forma, podemos ver uma rede sobreposta como uma máscara que cobre uma rede que existia previamente. Essa máscara serve para criar laços virtuais entre certos nós da rede existente. Dessa forma, criamos onde a comunicação é baseada nos nós pertencentes a rede sobreposta, como é o que acontece em redes P2P, na maioria dos casos sem levar em conta os nós intermediários do caminho que não fazem parte da rede sobreposta.
De um ponto de vista físico, redes sobrepostas são muito complexas, já que elas combinam diversas camadas lógicas que são operadas e construídas por diversas entidades. Mas elas permitem um maior nível de abstração, dessa forma permitindo um grande número de serviços que não poderiam ser propostos por um único operador de telecomunicações (indo de acesso à internet , VoIP, IPTV, entre outros).

### P2P

Numa rede P2P, um algoritmo de roteamento distribuído é utilizado para definir a localização dos nós da rede sobreposta. Este algoritmo não leva em conta a real localização dos nós na rede em que está sobreposto, já que ele é implementado sobre a camada de aplicação. Com esse algoritmo, localiza-se que hospedeiro da rede P2P possui o objeto requisitado, e depois se gera o caminho até ele (pela rede sobreposta). Como em redes P2P é comum existirem réplicas dos objetos para fins de disponibilidade, o algoritmo guarda pouca informação sobre a localização de todas as cópias. No lugar de guardar essa informação que pode ser alterada diversas vezes em um curto espaço de tempo, o algoritmo manda requisições procurando um nó vivo com a cópia do do objeto desejado mais próximo dele (mais próximo na rede sobreposta).

## Tipos

Existem dois tipos de redes sobrepostas: as redes estruturadas e as redes não-estruturadas.

### Redes Estruturadas

Neste tipo de rede sobreposta, os nós são organizados em um grafo estruturado. Utilizando este grafo, podemos descobrir eficientemente onde estão os dados pela rede sobreposta. Porém, uma rede estruturada simples não dá suporte a buscas complexas e é necessário guardar uma cópia ou ponteiro para cada objeto existente nos nós.

#### Aplicações

Este tipo de rede pode ser utilizado para sistemas de gerenciamento de grandes proporções, resolução de nome de domínios, backup por meio de redes P2P, filtro de spam, entre outros.

### Redes Não-Estruturadas

Neste tipo de redes sobrepostas, os nós são organizados de forma aleatória em um grafo, de maneira simples ou hierárquica (diferentes camadas para diferentes tipos de clientes). Podem ser utilizados diversos tipos de busca para se encontrar os objetos dos nós vizinhos. Cada nó visitado avalia a busca localmente para seu conteúdo. Esse tipo de rede suporta buscas complexas. Este método é ineficiente porque o número a busca precisa ser requisitada a muitos nós e não existe relação entre a topologia da rede e os dados nela existente.

#### Aplicações

A aplicação em que este tipo de rede é mais amplamente utilizada é o compartilhamento de arquivos em redes P2P. Sua organização permite uma maior robustez, dado que existe um grande número de cópias, o que lhe dá uma maior garantia de encontrar os dados desejados em diferentes nós da rede. Exemplos incluem Bittorrent, eDonkey, Overnet, Gnutella, entre outros.

## Resiliência

Redes Sobrepostas Resilientes (RSR), são arquiteturas que permitem que aplicações distribuídas na internet detectem e se recuperem em casos de desconexão ou interferência na rede. Protocolos de roteamento utilizados em redes de longa distância que levam minutos para se recuperam podem ser melhorados ao se utilizar camadas sobrepostas de aplicação. Os nós da RSR podem monitorar as rotas entre eles, e com isso determinar se existem interferências ou falhas na comunicação, dessa forma decidindo se devem passar os pacotes diretamente pela internet ou pela RSR.
A Rede Sobreposta Resiliente possui um conceito relativamente simples. Os nós RSR são dispersados pela internet. Esses nós formam uma camada de aplicação que ajudam no roteamento de pacotes. Cada nó monitora a qualidade das rotas entre seus vizinhos e usa essa informação para calcular de forma precisa e selecionar automaticamente os caminhos se baseando nos pacotes recebidos, dessa forma reduzindo o tempo necessário para se recuperar de má qualidade de serviço.

## Lista de protocolos de rede sobreposta

Protocolos de rede sobrepostas baseadas em TCP/IP incluem:
* tabela hash distribuída (DHT), como KAD e outros protocolos baseados no algoritmo Kademlia.
* JXTA.
* XMPP: a rota das mensagens é definida por IDs da rede sobreposta no lugar de endereços IP.
* Vários protocolos P2P, incluindo Gnutella, Gnutella2, Freenet, I2P e Tor.
* PUCC
* Solipsis: um sistema para um mundo virtual massivamente compartilhado da Orange.
Protocolos de rede sobreposta baseados em UDP incluem:
* Real Time Media Flow Protocol - Adobe Flash