Olá
Estou tendo dificuldade em faze este exercicio.
Segue o exercicio
Descrição do problema
Você deverá simular uma pequena rede de computadores e as transferências de dados entre os hosts envolvidos no processo. Eis a topologia da rede a ser simulada:
• Roteador: roteadores são dispositivos que tem a funcionalidade de encaminhar os dados de um destino para um fim,
• Host: computadores ou servidores que geram ou demandam dados. Ex: seu computador doméstico, o servidor web da
• Enlace ou link : meio físico que é utilizado na conexão de computadores. Por si só, ele é apenas um cabo físico.
Além disso, existe um elemento “virtual”, que é a Conexão física entre dois computadores, que é definida pelo enlace utilizado e pelos Dispositivos de Rede “nas pontas” (ex: seu modem adsl e seu computador de casa, juntamente com o cabo “azul” , formam uma conexão).
Seu trabalho é modelar (UML) e implementar este sistema. O principal objetivo é permitir hosts questionarem aos roteadores que eles estão conectados se esses conseguem entregar dados para os destinos especificados. Por exemplo, o host ha pode perguntar ao roteador r1 se ele pode consegue enviar dados ao host hb.
Ele pode responder que não é possível , que é possível (de forma direta) ou que é possível de forma indireta. Impossível seria o caso em que r1 não pode entregar dados a um host hx (que não existe na figura). Diretamente seria o caso que o roteador r1 consegue entregar dados ao roteador r2 diretamente (ele tem uma conexão para o r2). Entrega indireta seria o caso onde r1 entrega os dados para hb, só que primeiramente deve passar por r2.
Obviamente a sua solução deve ser adaptável a novas topologias (ou seja, novos arranjos de rede). Desta forma, não desenvolva uma solução “hard coded”, válida apenas para este cenário.
A classe de teste a ser utilizada nesta atividade deve ser a seguinte: (próxima página)
public class TestNet {
public static void main (String[] args)
{
//cria roteadores, onde 2 é o número de interfaces (ou portas) que o roteador tem, e “r1” é o seu
//nome
Roteador r1 = new Roteador(2, “r1”);
Roteador r2 = new Roteador(2, “r2”);
//cria Hosts, onde “ha” é o nome do host
Host ha = new Host (“ha”);
Host hb = new Host (“hb”);
//cria enlaces
//cria Hosts, onde “ha” é o nome do host e 1000 é a largura de banda do enlace (1000 Mbit/s)
Enlace ea1 = new Enlace(1000, “ea1”);
Enlace e12 = new Enlace(1000,“e12”);
Enlace e2b = new Enlace(1000,“e2b”);
//Cria as conexões físicas para cada roteador. A primeira linha adiciona o enlace ea1, que
//interliga roteador r1 ao host ha (vide figura) ao roteador r1. A segunda linha adiciona o outro
//enlace (e12) ao mesmo roteador – vide figura.
r1.criaLink1(ea1,r1,ha);
r1.criaLink2(e12,r1, r2);
r2.criaLink1(e12,r2,r1);
r2.criaLink2(e2b,r2,hb);
//Cria conexões para os hosts, seguindo a mesma semântica dos Links para os enlaces
ha.criaLink1(ea1, ha, r1);
hb.criaLink1(e2b, hb, r2);
/**
Método transferir da classe Roteador ( o mais importante):
Verifica se o roteador r1 consegue entregar dados até hb(ou qualquer host/roteador). Essa avaliação
pode ter três resultados:
1 – o roteador consegue entregar, utilizando seus próprios links, diretamente (por exemplo, o o
roteador r1 consegue entregar dados ao host há e ao roteador r2 diretamente)
2 – o roteador consegue entregar, porém indiretamente, utilizando outro roteador (ex: o roteador
r1 consegue entregar dados ao host hb via o roteador r2
3 – o roteador não consegue entregar (por exemplo: r1 não consegue entregar dados para o host “hx”
*/
String transf = r1.transferir(“hb”);
System.out.println(transf);
}
}