O assunto redes de computadores é bastante vasto e complexo, envolvendo muitos conceitos, protocolos e tecnologias que se entrelaçam inextricavelmente. Neste repositório contém problemas propostos em sala para o estudo de redes. Baseado no livro Redes de computadores e a internet uma abordagem top-down por Jim Kurose e Keith Ross.
Servidor/Cliente usando biblioteca sockets na qual recebe conexões de entrada (novos usuários) e dados (mensagens trocadas).
Como se conectar ao chat
$ python3 server.py
$ python3 client.py <IP_SERVER> <PORTA>
Neste problema replicamos o protocolo SMTP utilizando sockets. Entenda o fluxo:
- Client 1 (Alice) conecta no Server 1 (Servidor de correio de Alice) e envia payload (ou seja, sua mensagem).
- Server 1 age como "cliente" e se conecta no Server 2 (Servidor de correio do Bob) e envia a mensagem de Alice.
- Client 2 (Bob) se conecta no Server 2, e então o mesmo envia a mensagem para Bob.
Rodar, respectivamente, nesta ordem: servidor 2, servidor 1, cliente 1 e cliente 2.
$ python server2.py
$ python server1.py
$ python cliente1.py
$ python cliente2.py
Com um canal confiável, nenhum dos dados transferidos é corrompido ou perdido, e todos são entregues na ordem em que foram enviados. É responsabilidade de um protocolo de transferência confiável de dados implementar essa abstração de serviço. A aplicação cliente-servidor implementada provê a transferência confiável baseado no protocolo rdt 2.2. Nesta versão do protocolo, não se usa implementa a detecção de perda de pacotes (tanto de dados quanto ACKs) por meio de um temporizador. Adicionando-se essa funcionalidade, teria-se o protocolo rdt 3.0 implementado.
O Caminho Mínimo de Roteamento é executado por cada nó de comutação na rede (isto é, nós preparados para encaminhar pacotes; na Internet, esses são chamados de roteadores). O conceito básico é que cada nó constrói um mapa da conectividade com a rede, na forma de um grafo, mostrando quais nós estão conectados a quais outros nós. Cada nó calcula, de forma independente, o melhor caminho lógico seguinte para cada destino possível na rede. Cada coleção de melhores caminhos formará a tabela de roteamento de cada nó. É o algoritmo de Dijkstra.
Exemplo de um caminho mínimo$ source venv\bin\activate
$ python3 codigo.py