Este projeto simula uma rede de computadores em ambiente Docker, onde cada roteador executa o algoritmo Link State Routing (baseado em Dijkstra). A comunicação entre nós da rede é realizada via UDP, e toda a infraestrutura é gerada dinamicamente com Python.
⚙️ Projeto desenvolvido como parte da disciplina Redes de Computadores II – UFPI | Campus CSHNB.
- Docker
- Python ≥ 3.9 (para executar scripts auxiliares)
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txtpython3 generate_topology.pyGera o arquivo network_topology.json, contendo a estrutura da rede (roteadores, hosts e enlaces com custos).
python3 generate_docker_compose.pyGera dinamicamente o docker-compose.yml baseado na topologia criada.
docker-compose up --buildTodos os roteadores e hosts são iniciados conforme a topologia gerada.
Você pode acompanhar os logs diretamente pelo Docker Compose ou acessar os containers individualmente para depuração detalhada.
./down.sh-
Cada sub-rede contém:
- 🖥️ 2 hosts
- 🔁 1 roteador
-
Os roteadores se conectam entre si de forma aleatória e parcialmente conectada, com pesos variáveis (custos de enlace).
-
Cada roteador implementa:
- Banco de Dados de Estado de Enlace (LSDB)
- Algoritmo de Dijkstra para cálculo das melhores rotas
- Threads independentes para envio e recepção de LSAs via UDP
O protocolo escolhido para a comunicação entre roteadores é o UDP. Ele é ideal para esse tipo de simulação porque:
- É leve e tem baixa sobrecarga
- Não exige conexão prévia (sem handshake)
- Tolerância à perda de pacotes (ambiente controlado)
- Maior velocidade para mensagens frequentes, como pacotes Discovery e LSAs
O script generate_topology.py executa:
- Geração automática de
Nsub-redes (por padrão, 3) - Criação de roteadores e hosts por sub-rede
- Conexões aleatórias entre roteadores com pesos (custos)
- Garantia de conectividade entre todos os nós
- Exportação da topologia no formato JSON
- ✅ Roteadores com múltiplas threads para recepção/transmissão de pacotes
- ✅ Atualização automática e dinâmica das tabelas de roteamento
- ✅ Containerização de todos os nós da rede (hosts + roteadores)
- ✅ Comunicação via sockets UDP
- ✅ Geração automatizada da rede via scripts Python
- ✅ Interface modular, permitindo customização da topologia
| Tecnologia | Finalidade |
|---|---|
| Python | Scripts de controle e lógica do protocolo |
| Docker | Criação dos nós em containers isolados |
| Docker Compose | Orquestração dos containers |
| UDP Sockets | Comunicação entre os roteadores |
| Threading | Execução paralela de funções nos roteadores |
| Dijkstra | Algoritmo de cálculo das rotas ótimas |
route command |
Manipulação da tabela de rotas dos hosts |
🎥 Acesse a demonstração no YouTube
Desenvolvido para o curso de SISTEMAS DE INFORMAÇÃO – UFPI (CSHNB) Disciplina: Redes de Computadores II
Este projeto é licenciado sob a Licença MIT. Veja o arquivo LICENSE para mais detalhes.