REDES INTEGRADAS DE TELECOMUNICAÇÕES I 2013 / 2014

Documentos relacionados
REDES INTEGRADAS DE TELECOMUNICAÇÕES I 2004 / 2005

REDES INTEGRADAS DE TELECOMUNICAÇÕES I 2017 / 2018

REDES INTEGRADAS DE TELECOMUNICAÇÕES I 2014 / 2015

REDES INTEGRADAS DE TELECOMUNICAÇÕES I 2016 / 2017

REDES INTEGRADAS DE TELECOMUNICAÇÕES I 2018 / 2019

REDES INTEGRADAS DE TELECOMUNICAÇÕES I 2008 / 2009

REDES INTEGRADAS DE TELECOMUNICAÇÕES I 2016 / 2017

REDES INTEGRADAS DE TELECOMUNICAÇÕES I 2003 / 2004

Curso de extensão em Administração de sistemas GNU/Linux: redes e serviços

Nome: Nº de aluno: 2ª Ficha de Avaliação Teórica Data Limite de Entrega: 06/11/2016

Aula 13 Roteamento Dinâmico com Protocolos Link-State (Protocolo OSPF)

Data and Computer Network Endereçamento IP

REDES INTEGRADAS DE TELECOMUNICAÇÕES I 2017 / 2018

Nome: Nº de aluno: 2ª Ficha de Avaliação Teórica Data Limite de Entrega 06/11/2015

REDES INTEGRADAS DE TELECOMUNICAÇÕES I 2006 / 2007

Prof. Roitier Campos Gonçalves 1. Aula 02. Introdução aos Conceitos de Roteamento

PROGRAMAÇÃO DE MICROPROCESSADORES 2007 / 2008

Open Shortest Path First (OSPF)

REDES INTEGRADAS DE TELECOMUNICAÇÕES I 2018 / 2019

Arquitectura de Redes

Roteamento e Roteadores. Conceitos Diversos

3º Semestre. Aula 02 Introdução Roteamento

RIP OSPF. Características do OSPF. Características do OSPF. Funcionamento do OSPF. Funcionamento do OSPF

Arquitectura de Redes

PROGRAMAÇÃO DE MICROPROCESSADORES 2007 / 2008

Redes de Computadores

Sistemas de Telecomunicações 2012/2013

Redes de Computadores I Licenciatura em Eng. Informática e de Computadores 1 o Semestre, 6 de Janeiro de o Teste A

Redes de Computadores. Aula: Open Shortest Path First - OSPF Professor: Jefferson Silva

Instituto Superior de Engenharia de Lisboa Área Departamental de Engenharia de Electrónica e Telecomunicações e de Computadores

RIP Routing Information Protocol Versão 1 e 2

Zone Routing Protocol - ZRP[1]

# $ % & ' ( ) * ' ( ) *! " " Orientador +, -

ROUTER. Alberto Felipe Friderichs Barros

Aula 12 Protocolo de Roteamento EIGRP

Recursos de demanda de circuito OSPF

Nome: Nº de aluno: 3ª Ficha de Avaliação 20/5/2014

OSPF. Protocolos e Conceitos de Roteamento Capítulo 11. ITE PC v4.0 Chapter Cisco Systems, Inc. All rights reserved.

Roteamento AS e OSPF. AS Autonomous System

Redes de Computadores e Aplicações. Aula 37 Roteamento IP Unicast Dinâmico RIP

Trabalho Prático 1 P2P-SDIS

Formação para Sistemas Autônomos OSPF. Formação para Sistemas Autônomos

CCNA Exploration (Protocolos e Conceitos de Roteamento) OSPF

Um sistema de difusão de informação a nível da aplicação

Licença de uso do material

Arquitectura de Redes

Nome: Nº de aluno: Indique se vai realizar exame ou 2º teste: Exame: 2º teste: PARTE 1 (7 valores)

Redes de Computadores. Aula: Roteamento Professor: Jefferson Silva

Administração de Redes 2014/15. Route Information Protocol (RIP)

Trabalho 10: Simulação de Roteador IPv6

RIP Routing Information Protocol

Redes de Computadores

Redes de Computadores

IMEI MONTAGEM E MANIPULAÇÃO DE REDES DE DADOS - REDES DE COMPUTADORES. Curso Profissional de Técnico de Gestão de Equipamentos Informáticos

Introdução as Redes 02/04/2019. Técnico em Informática 4º Int. Redes de Computadores Fabricio A. Steinmacher. Estrela. Barrramento. Extendida.

Capítulo 8: OSPF de Área Única

Camada de rede. Introdução às Redes de Computadores

Redes de Computadores I Licenciatura em Eng. Informática e de Computadores 1 o Semestre, 30 de Novembro de o Teste A

O Protocolo RIPv2. Prof. José Gonçalves. Departamento de Informática UFES.

Redes de Computadores. Trabalho de Laboratório Nº2

REDES AD HOC E DE SENSORES 2011 / 2012

PROTOCOLOS DE COMUNICAÇÃO

Sockets e Threads em Java

Arquitetura Von Neumann Dados e instruções são obtidos da mesma forma, simplificando o desenho do microprocessador;

Arquitectura de Redes

Capítulo 4 A camada de REDE

Redes de Computadores RES 12502

OSPFv3 Open Shortest Path First para redes IPv6

Classes de endereços IP - Os bits de endereços IP são reservados um para a classe de rede e os outros para computador (host).

Redes de Computadores e a Internet

Instituto Superior de Engenharia de Lisboa Área Departamental de Engenharia de Electrónica e Telecomunicações e de Computadores

Laço/roteamento subótimo do roteamento OSPF entre o Cisco IOS e o NXOS para o exemplo de configuração das rotas externas

Protocolos de Roteamento link-state

Capítulo 7: Roteando Dinamicamente (Resumo)

1ª Trabalho prático. Data Limite de Entrega: 15/11/2015

Nível de ligação - Tópicos

também conhecido como Interior Gateway Protocols (IGP) protocolos de roteamento intra-as mais comuns:

Redes de Computadores (LTIC) 2013/14. Grupo 1 (9 valores) 2º Teste (Frequência) 19 de Junho de Nome:

Capítulo 3 - Sumário. Tipos de Rotas (Diretas, Estáticas e Dinâmicas) Protocolos de Roteamento (RIP, OSPF e BGP)

Camadas do TCP/IP. Camada de Rede Protocolo IP. Encapsulamento dos Dados. O Protocolo IP. IP visto da camada de Transporte.

Número: Professor: JM JF PA _. Exame2ª Época - 13/02/2009-2h

% & ' ( serviços fornecidos pela camada de rede. roteamento na Internet. princípios de roteamento. funcionamento de um roteador. IPv6.

Redes de Computadores

Comunicação de Dados II

Redes de Computadores I Licenciatura em Eng. Informática e de Computadores 1 o Semestre, 6 de Janeiro de o Exame A

Laboratório - Uso do Wireshark para examinar uma captura UDP DNS

CURSO : INFORMÁTICA REDES COMPUTADORES

RCO2. Redes Locais: Interligação de LANs com roteadores

PTC Aula Roteamento intra-as na Internet: OSPF 5.4 Roteamento entre os ISPs: BGP. (Kurose, p ) (Peterson, p.

Duração do Teste: 2h.

Arquitectura de Sistemas Paralelos e Distribuídos Comunicação Multicast

Parte 3: Camada de Rede

Redes de computadores. Monteiro, Emiliano S. Professor Out/2016

Protocolos em Redes de Dados Ficha de Laboratório Número 2 OSPF Nuno Neves elu s Rodrigues Novembro de Introduοc~ao Esta ficha tem co

Protocolos de Roteamento Multicast. Fundamentos de Sistemas Multimídia

Universidade Federal do Rio de Janeiro COPPE - UFRJ. Optimized Link State Routing Protocol (OLSR) Julio Heitor Silva Nóbrega

Camada de Rede Fundamentos e Protocolos. 6/7/18 Organizado por Bruno Pereira Pontes brunopontes.com.br

Camada de rede do modelo OSI Redes de Comunicação Módulo 3 Parte 2

O que o comando show ip ospf interface revela?

Capítulo 4 A camada de REDE

Transcrição:

Departamento de Engenharia Eletrotécnica REDES INTEGRADAS DE TELECOMUNICAÇÕES I 2013 / 2014 Mestrado Integrado em Engenharia Eletrotécnica e Computadores 4º ano 7º semestre 1º Trabalho Prático: Encaminhamento dinâmico numa rede em malha http://tele1.dee.fct.unl.pt Luis Bernardo

1. Objetivos Familiarização com o funcionamento de encaminhadores (routers) numa rede em malha. O trabalho consiste na comunicação entre componentes interligados numa rede em malha. Neste trabalho imagina-se que as estações estão a usar uma rede em malha por cima da rede física Ethernet. O trabalho consiste no desenvolvimento de um programa router que pode comunicar com os routers vizinhos, oferecendo um serviço de encaminhamento baseado num algoritmo de estado de linha, resultante da simplificação do algoritmo OSPFv2 (Open Shortest Path First) *, usado nas redes TCP/IP. Em sistemas reais, os encaminhadores interligam máquinas pertencentes a várias redes locais. Neste trabalho vai-se simular este ambiente, com algumas simplificações: Os routers são também, simultaneamente, os emissores e receptores das mensagens. Ao gerar pacotes a partir dos vários routers para todos os outros routers, o trabalho vai permitir testar o comportamento do serviço de encaminhamento perante modificações na rede. 2. Especificações Cada processo router na rede é identificado por um nome: A, B, C, D,, Z. A rede está dividida em várias sub-redes, designadas de áreas, com uma topologia em estrela: a área ZERO (0) interliga todas as outras áreas periféricas (identificadas por números entre 1 e 9). Cada máquina tem um nome único (uma letra maiúscula), e pode pertencer a várias áreas ao mesmo tempo. Embora se esteja a usar uma rede Ethernet no Laboratório, de um ponto de vista lógico as máquinas não podem comunicar diretamente umas com as outras, mas têm um circuito para o fazer. A topologia de cada rede em malha é definida pelo conjunto de relações de vizinhança introduzidas localmente na interface gráfica de cada router. Cada router tem apenas conhecimento dos vizinhos diretos, recebendo informações acerca do resto da rede apenas através do algoritmo de encaminhamento usado estado de linha. As figuras em baixo mostram duas hipóteses de redes usando 7 routers e 4 áreas. B A C B A G D F E G C E F D Os vários processos router de cada máquina comunicam através de sockets datagrama. * Definido no IETF RFC 2328, disponível em http://www.ietf.org/rfc.html 2 Luis Bernardo

Um router real monitoriza os vizinhos na rede e troca com eles pacotes de controlo (com as tabelas de encaminhamento) periodicamente, ou em resposta a acontecimentos imprevistos. Nesta simulação, os processos routers simulam este comportamento através de comandos na interface de utilizador. Em termos de comportamento dos processos routers, existe o seguinte cenário: Um router oferece para o utilizador opções de monitorização dos vizinhos: permite acrescentar vizinhos (identificados pelo endereço IP e porto do seu socket); permite mudar a distância a qualquer dos vizinhos; permite desligar uma ligação para um vizinho. Paralelamente, o processo router participa no algoritmo de encaminhamento da classe estado de linha para todas as áreas a que o nó pertence. No trabalho é usada uma versão simplificada do OSPF (Open Shortest Path First), onde se substitui a inundação de pacotes de controlo pela difusão de pacotes na rede Ethernet, focando o trabalho no cálculo das tabelas de encaminhamento. No OSPF o cálculo da tabela de encaminhamento é realizado em 3 fases: 1) nas áreas periféricas; 2) os routers na fronteira (que pertencem a duas áreas) usam as tabelas calculadas no passo 1 para calcular a tabela de encaminhamento da área 0; 3) o resumo da tabela da área 0 é disseminado pelas áreas periféricas. Neste trabalho vão ser realizadas as três fases do cálculo das tabelas. Periodicamente o processo router desencadeia o envio de pacotes de atualização com os dados locais para cada área a que pertence, e recalcula a tabela de encaminhamento local sucessivamente das áreas periféricas e da área zero (quando existem). Quando existe área zero, o nó agrega toda a informação das áreas periféricas na área zero, calculando a informação global. Esta informação é, por fim, disseminada nas áreas periféricas de forma a todos os nós da rede conseguirem ter uma tabela de encaminhamento completa. Esta sequência de ações também pode ser desencadeada por uma modificação na topologia ou estado da rede. Para facilitar a visualização do estado do router, apresenta-se o conteúdo da tabela de encaminhamento local na interface gráfica. Finalmente, o processo router oferece na sua interface opções de envio e receção de pacotes de dados: permite enviar pacotes de dados para qualquer destino; recebe e reenvia os pacotes de dados para um router vizinho, consoante o conteúdo da tabela de encaminhamento, memorizando no pacote o percurso; recebe os pacotes de dados no router de destino, apresentando a rota completa percorrida pelo pacote desde a origem até ao destino. Notar que neste simulador, tal como num sistema real, a topologia da rede pode ser diferente para cada sentido. Por exemplo, numa linha de acesso a uma rede com um servidor web muito acedido, o tráfego será mais elevado no sentido originado a partir do servidor web. 2.1. Configuração da rede Quando o programa router arranca sabe quais são as áreas a que pertence e não tem nenhum vizinho. Depois, vai ganhar ou perder vizinhos, à medida que o utilizador usa as operações de acrescentar, remover ou modificar distâncias, ou à medida que outros routers se associam a ele. É usado um protocolo para criar e destruir relações de vizinhança entre routers. Quando um utilizado acrescenta um vizinho à lista, o programa envia um pacote HELLO para o endereço IP e porto do vizinho. Quando um programa router recebe um pacote HELLO acrescenta o emissor do pacote à lista de vizinhos, memoriza a lista de áreas do vizinho, respondendo também com um pacote HELLO, com igual valor de distância e com as áreas a que o nó pertence. Admite-se que por omissão a distância é igual nos dois sentidos, embora o utilizador possa modificar em 3 Luis Bernardo

qualquer altura a distância em cada sentido. Caso o vizinho não aceite o pacote HELLO por exceder o número máximo de vizinhos, termina a relação de vizinhança enviando um pacote BYE (ver adiante). Pacote HELLO: { sequência contígua de } byte type; { tipo pacote - HELLO = 10 } char sender; { nome router origem } int distance; { distância ao vizinho } int len_area; { número de áreas } char[] areas; { array com áreas } 1 2 4 4 len_area type sender distance len_area areas O pacote HELLO também é usado para comunicar a um vizinho que mudou a distância entre dois routers. A distância é um valor inteiro compreendido entre 0 e 99. A distância 99 é reservada e simboliza a não existência de ligação entre dois routers. Quando um router quer terminar uma relação de vizinhança envia um pacote BYE para o vizinho. Tanto o emissor como o recetor da mensagem devem terminar imediatamente o envio de pacotes com o estado de linha (ROUTE) para o ex-vizinho. Pacote BYE: { sequência contígua de } byte type; { tipo pacote - BYE = 20 } char sender; { nome router origem } 1 type 2 sender Durante o trabalho, pretende-se testar o comportamento dos algoritmos de estado de linha com o surgir de novos routers e com o terminar de ligações ou routers. Assim, durante o desenvolvimento do trabalho deverá testar o comportamento do programa desenvolvido perante estes cenários. 2.2. Algoritmo de inundação de pacotes de estado de linha A partir do momento em que fica ativo, o programa router deve enviar periodicamente para todos os routers na rede um pacote ROUTE por cada área a que pertencer, com as informações referentes às ligações aos seus vizinhos pertencentes a essa área. Se a opção "Send if changes" na janela do programa estiver selecionada, deverá também enviar o pacote ROUTE após uma mudança na topologia, desde que já tenha decorrido o intervalo mínimo configurável. Se não ocorreu, deve-se aguardar o fim do tempo mínimo (min_interval), antes de enviar o pacote ROUTE. O envio dos pacotes ROUTE é realizado através de IP multicast para todos os routers. O pacote ROUTE deve ser guardado até um tempo máximo igual ao período de vida do pacote (TTL) igual ao período de envio de pacotes ROUTE mais cinco segundos. 4 Luis Bernardo

Pacote ROUTE: { sequência contígua de } byte type; { tipo pacote - ROUTE = 30 } char sender; { nome router origem } char area; { área onde o ROUTE está a ser enviado }.int seq; { número de sequência } int TTL; { tempo de vida da informação [s] } int n_entries; { número de entradas na tabela } Entry[] entries; { array com n_entries entradas } class Entry { // Tipo de entrada no array char dest; { nome de router vizinho } int dist; { distância até router } } 1 2 2 4 4 4 6*n_entries type sender area seq TTL n_entries dest dist dest dist Para simplificar o programa, deverá admitir que as únicas modificações à topologia da rede (ligações entre vizinhos) ocorrem em resultado de modificações na vizinhança controlada pelo utilizador, ou em resultado da recepção de pacotes HELLO e BYE. 2.3. Algoritmo de encaminhamento A tarefa mais importante do programa router é o cálculo da tabela de encaminhamento utilizando o algoritmo de estado de linha. Antes de cada envio periódico do pacote ROUTE (ou após uma modificação do estado da rede com a opção "Send if changes") deverá recalcular as tabelas locais de encaminhamento de cada área aplicando o algoritmo de Dijkstra à informação recebida de todos os routers. Este algoritmo deve ser utilizado da forma mais eficiente possível no cálculo das tabelas de encaminhamento devido à sua complexidade algorítmica de ordem O(n 2 ). O algoritmo de estado de linha usado neste trabalho está descrito no livro recomendado para a disciplina ("Computer Networks 5ª Ed.", de A. S. Tanenbaum e D. J. Wetherall, em Inglês), nas páginas 373-378, 366-369 e 474-479. Neste trabalho são usadas algumas simplificações em relação aos algoritmos que o inspiraram. A inundação dos pacotes ROUTE (descrita nas páginas 376-377) foi substituída pela difusão dos pacotes na Ethernet pelos vários routers. Vai ser bastante valorizada a programação eficiente do algoritmo de Dijkstra. Se usarem o código diretamente adaptado da página 369 do livro ficam com um código pouco eficiente, e que para além disso tem alguns erros algorítmicos (tentem correr o código numa rede com uma partição). Desta forma, recomenda-se seriamente que procure realizar o algoritmo de uma forma eficiente de forma a ter uma complexidade máxima de O(n 2 ) para calcular a tabela de encaminhamento (i.e. o tempo de cálculo pode ser majorado por uma constante multiplicada pelo tempo que demora a calcular dois ciclos for encadeados percorrendo todos o elementos da rede), sendo invocado apenas antes de enviar o pacote ROUTE, ou quando é detetada uma mudança na topologia (se a opção Send if changes está selecionada). 2.5. Envio e receção de dados Os programas router também simulam o papel de emissor e recetor de pacotes de dados. Sempre que o utilizador seleciona a opção de enviar dados, o programa cria um pacote do tipo DATA, com o valor de path igual ao nome local. Em seguida, o programa consulta a tabela de encaminhamento e envia o pacote para o próximo router indicado na tabela, ou retorna um código de erro, caso o nome de destino esteja inacessível. 5 Luis Bernardo

Pacote DATA: { sequência contígua de } byte type; { tipo pacote - DATA = 40 } char sender; { nome router origem } int seq; { número de sequência } char destination; { nome router destino } short len; { número de bytes de dados } byte[] dados[]; { len bytes de dados } byte numpath; { número de routers percorridos } byte[] path; { sequência de routers percorridos } 1 2 4 2 2 len 1 numpath type sender seq destination len dados numpath Router 1 Router numpath Cada router que recebe o pacote deve acrescentar o seu nome ao campo path do pacote, incrementando o valor de numpath. Caso seja o router de destino de pacote, deve escrever o conteúdo do pacote recebido. Senão, deve consultar a sua tabela de encaminhamento e enviar para o próximo router. Caso o tamanho do percurso percorrido pelo pacote atinja a distância máxima (20), então deverá aparecer uma mensagem de erro a sinalizar o facto ao utilizador, e o pacote deve ser tratado como se tivesse atingido o destino. Desta forma, fica-se a saber sempre por onde ele viajou. 3. Desenvolvimento do programa 3.1. Código fornecido Para facilitar o desenvolvimento do programa e tornar possível a sua realização durante as oito horas previstas, é fornecido juntamente com o enunciado um programa router incompleto, com a interface gráfica representada abaixo, que já realiza parte das funcionalidades pedidas. Cada grupo pode fazer todas as modificações que quiser ao programa base, ou mesmo, desenhar uma interface gráfica de raiz. No entanto, recomenda-se que invistam o tempo na correta realização do algoritmo de encaminhamento. Nome, IP e porto do router Tabela de vizinhos Controlo dos vizinhos Lista de áreas do router Arranque da aplicação Dados sobre o vizinho Período envio rota Controlo inundação ROUTE (IP e porto multicast) Envio de pacotes de dados Tabela encaminhamento Área de mensagens 6 Luis Bernardo

O programa fornecido é composto por nove classes: Entry.java (completa) Elemento do array de vizinhos num pacote ROUTE; neighbour.java (completa) Descritor de vizinho, usado no controlo de vizinhança e no envio de pacotes; neighbourlist.java (completa) Descritor de lista de vizinhos, usado no controlo de vizinhança e no envio de pacotes; RouteEntry.java (completa) Descritor de elementos da tabela de encaminhamento; routing.java (a completar) Classe responsável por coordenar o cálculo da tabela de encaminhamento global e pelo tratamento dos pacotes DATA. Gere um array de objetos da classe Routing_process (um para cada área); Routing_process.java (a completar) Classe responsável pelo envio e receção de pacotes ROUTE, pelo cálculo da tabela de encaminhamento a nível de uma área. Mantém uma lista com os dados recebidos nos pacotes ROUTE; RouterInfo.java (a completar) Descritor de um router pertencente a uma área, com os dados recebidos no pacote ROUTE; MulticastDaemon.java (completa) thread que cria um socket e recebe pacotes multicast; router.java (completa) Classe principal com interface gráfica (herda de JFrame), que faz a gestão de sincronismo dos vários objetos usados; também gere uma thread para a receção de dados unicast. O programa fornecido inclui todos os ficheiros completos exceto os ficheiros Routing_process.java, routing.java e RouteeInfo.java que devem ser completados pelos alunos. A ativação dos sockets e das threads de receção de dados e a gestão de vizinhança já é feita no programa fornecido. Falta apenas realizar os aspetos relacionados com o algoritmo de encaminhamento (controlo do envio e processamento de pacotes ROUTE, cálculo da tabela de encaminhamento, fusão entre as tabelas das várias áreas) e a consulta da tabela de encaminhamento durante o processamento dos pacotes de dados. Para se realizar a inundação de pacotes ROUTE é fornecida a classe MulticastDaemon (no ficheiro associado) que suporta a receção e envio de pacotes ROUTE através de um socket multicast. As classes routing e Routing_process definem um conjunto inicial de campos com os dados da (ou obtidos a partir da) interface gráfica, inicializados no construtor das classes: private char local_name; private neighbourlist neig; private router win; private DatagramSocket ds; private JTable tableobj; private int period; private int min_interval; private int local_ttl; // Local name // Neighbour list // Main window // Unicast datagram socket // GUI window with routing table // Routing update period // Minimum interval between sends // ROUTE TTL value A classe routing define: a variável route, que é usada para guardar o array de processos de encaminhamento ativos no encaminhador; e a tabela de encaminhamento, em tab: private Routing_process[] route; // Array of routing processes private HashMap<Character, RouteEntry> tab; // Routing table Por sua vez, a classe Routing_process define: a lista (da classe HashMap) map, onde é guardada a lista de routers conhecidos (que enviaram pacote ROUTE); e a tabela de encaminhamento da área, guardada na lista tab. private HashMap<Character, RouteEntry> tab; // Routing table private HashMap<Character, RouterInfo> map; // Router list 7 Luis Bernardo

Durante o trabalho devem ser definidos ou completados os seguintes métodos da classe routing: /** Construtor da classe routing */ public routing(char local_name, neighbourlist neig, boolean sendifchanges, int period, int min_interval, String areas, String multi_addr, int multi_port, router win, DatagramSocket ds, JTable tabela) {...} /** Chamado quando a rede muda em algumas áreas */ public void network_changed(string areas) {...} /** Retorna uma tabela de encaminhamento inicial apenas com os vizinhos diretos do nó (ou equivalentes, para encaminhamento multi-área), para a área area */ public HashMap<Character,RouteEntry> local_route_table(char area) {...} /** Retorna o vetor com a lista de vizinhos, usado para construir o pacote ROUTE para a área area */ public Entry[] local_vec(char area) {...} /** Recalcula a tabela de encaminhamento, após detetar modificação numa área usada com a opção Send if changes */ public synchronized void update_routing_table(char area) {...} /** Recalcula a tabela de encaminhamento global */ private synchronized void update_global_routing_table() {...} /** Consulta tabela de encaminhamento e devolve próximo router */ public char next_hop(char dest) {...} Durante o trabalho devem ser definidos ou completados os seguintes métodos da classe Routing_process: /** Processa um pacote ROUTE */ public boolean process_route(char sender, int seq, int TTL, Entry[] data) {...} /** Corre o algoritmo de Dijkstra sobre os dados da lista map a partir da tabela inicial devolvida por local_route_table e devolve a tabela de encaminhamento na variável tab */ public boolean run_dijkstra() {...} /** Inicia envio periódico de pacotes ROUTE */ public void start_announce_timer(){ } /** Para envio periódico de pacotes ROUTE */ public void stop_announce_timer(){ } /** Chamado após detetar uma modificação na topologia da área; deve ter em conta o tempo mínimo entre envio de ROUTE */ public void area_changed() { } Durante o trabalho devem ser definidos ou completados os seguintes métodos da classe RouterInfo: /** Testa se o vetor de Entry guardado no objeto ainda é válido */ public boolean vec_valid() { } 8 Luis Bernardo

Durante o trabalho pode e deve utilizar os métodos que já são disponibilizados pelas várias classes do trabalho: para enviar o pacote ROUTE (send_local_route na classe Routing_process), comparar tabelas de encaminhamento, etc. Desta forma, antes de iniciar o trabalho, os alunos devem ler atentamente todo o código fornecido, de forma a poder tirar total proveito dele. Adicionalmente, os alunos vão poder testar os programas desenvolvidos com uma realização de teste do programa router, disponibilizado apenas nas aulas de laboratório. 3.2 Metas Uma sequência para o desenvolvimento do programa poderá ser: 1. Começar por programar apenas uma área utilizando um objeto da classe Routing_process (tal como é fornecido no projeto): a. Programar um temporizador que invoca a rotina para calcular a tabela de encaminhamento e para enviar o pacote ROUTE. O temporizador deve ser arrancado no método start_announce_timer, e terminado no método stop_announce_timer; b. Programar o método process_route de forma a guardar os dados recebidos na lista de routers, para cada área; c. Programar o cálculo da tabela de encaminhamento no método run_dijkstra. A parte mais IMPORTANTE do trabalho é programar o algoritmo de Dijkstra, prevendo a situações de erro comuns (partições na rede, letras não sequenciais (A, F, Z), etc.). Use as estruturas de dados definidas para a tabela de encaminhamento e valide os dados usados. d. Programe a função next_hop da classe routing para aceder à tabela de encaminhamento. 2. Estender o programa para suportar múltiplas áreas. Nesta segunda fase, vão-se usar vários objetos da classe Routing_process, sendo necessário modificar vários métodos no projeto: a. Deve modificar o construtor da classe routing, de maneira a passar a usar a string de áreas introduzida na GUI; b. Deve modificar na classe routing os métodos update_global_routing_table e update_routing_table de maneira a fundir numa única tabela de encaminhamento as várias tabelas das áreas a que pertence o nó. Parte relevante deste processo é realizado nos métodos local_route_table e local_vec, onde poder-se-á realizar a junção de elementos de tabelas de encaminhamento à lista local de vizinhos. 3. Programar a reação rápida a modificações na topologia. Neste caso, para além das modificações nos vizinhos locais (já feito no código distribuído) deve detetar mudanças topológicas através dos vetores de estado de linha recebidos de cada vizinho (nos pacotes ROUTE). Lembre-se que se o intervalo mínimo (min_interval) for maior do que 0, define o número mínimo de milisegundos que deve decorrer entre dois envios do pacote ROUTE. Caso realize esta funcionalidade, recomenda-se que faça vários testes com a opção Send if changes ligada e com um período de envio de ROUTE muito grande, de maneira a não existirem pacotes periódicos. TODOS os alunos devem tentar concluir pelo menos a fase 1.d. Na primeira semana do trabalho é feita uma introdução geral do trabalho. No fim da segunda semana devem estar a concluir a fase 1.c. No fim da terceira semana devem ter concluído o passo 2.b. No fim da quarta e última semana devem tentar realizar o máximo de fases possível, tendo sempre em 9 Luis Bernardo

conta que é preferível fazer menos e bem (a funcionar e sem erros), do que tudo e nada funcionar. Postura dos Alunos Cada grupo deve ter em consideração o seguinte: Não perca tempo com a estética de entrada e saída de dados Programe de acordo com os princípios gerais de uma boa codificação (utilização de indentação, apresentação de comentários, uso de variáveis com nomes conformes às suas funções...) e Proceda de modo a que o trabalho a fazer fique equitativamente distribuído pelos membros do grupo. 10 Luis Bernardo