REDES INTEGRADAS DE TELECOMUNICAÇÕES I 2017 / 2018

Documentos relacionados
REDES INTEGRADAS DE TELECOMUNICAÇÕES I 2013 / 2014

REDES INTEGRADAS DE TELECOMUNICAÇÕES I 2004 / 2005

REDES INTEGRADAS DE TELECOMUNICAÇÕES I 2014 / 2015

REDES INTEGRADAS DE TELECOMUNICAÇÕES I 2018 / 2019

REDES INTEGRADAS DE TELECOMUNICAÇÕES I 2016 / 2017

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

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

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

REDES INTEGRADAS DE TELECOMUNICAÇÕES I 2017 / 2018

PROGRAMAÇÃO DE MICROPROCESSADORES 2007 / 2008

Open Shortest Path First (OSPF)

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

Data and Computer Network Endereçamento IP

3º Semestre. Aula 02 Introdução Roteamento

REDES INTEGRADAS DE TELECOMUNICAÇÕES I 2018 / 2019

Redes de Computadores

REDES INTEGRADAS DE TELECOMUNICAÇÕES I 2006 / 2007

Roteamento e Roteadores. Conceitos Diversos

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

Arquitectura de Redes

Sistemas de Telecomunicações 2012/2013

PROGRAMAÇÃO DE MICROPROCESSADORES 2007 / 2008

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

Arquitectura de Redes

RIP Routing Information Protocol Versão 1 e 2

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

Arquitectura de Redes

ROUTER. Alberto Felipe Friderichs Barros

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

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

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

Aula 12 Protocolo de Roteamento EIGRP

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

Capítulo 8: OSPF de Área Única

Trabalho 10: Simulação de Roteador IPv6

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

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

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

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

Redes de Computadores

Configurar o escape da rota VRF no Switches do nexo de Cisco

CCNA Exploration (Protocolos e Conceitos de Roteamento) OSPF

Configurar o buraco negro provocado telecontrole do IPV6 com IPv6 BGP

Arquitectura de Redes

Recursos de demanda de circuito OSPF

Zone Routing Protocol - ZRP[1]

Configurar a redistribuição de rotas do Internal BGP no IGP

Trabalho Prático 1 P2P-SDIS

Roteamento AS e OSPF. AS Autonomous System

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

Licença de uso do material

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

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

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

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

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

Parte 3: Camada de Rede

Redes de Computadores. Aula: Roteamento Professor: Jefferson Silva

Configurar OSPFv3 como o protocolo PE-CE com técnicas de prevenção do laço

RIP Routing Information Protocol

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

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

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).

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

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

Redes de Computadores e Aplicações. Aula 35 Estratégias de Roteamento IP Unicast Parte 2

REDES AD HOC E DE SENSORES 2011 / 2012

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

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

Capítulo 4 A camada de REDE

Redes de Computadores RES 12502

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

Redes de Computadores

Impedindo IDs duplicados de roteadores EIGRO

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

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

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

Sockets e Threads em Java

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

O Mensagem de Erro e os vizinhos EIGRP/OSPF/BGP de não-sincronização de "%TUN-5-RECURDOWN" sobre um túnel GRE

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

Redes de Computadores

Redes de Computadores

Problema de Roteamento comum com Endereço de Encaminhamento do OSPF

Flávio G F Camacho Vipnet Baixada Telecomunicações e Informática LTDA

Redes de Computadores e a Internet

OSPFv3 Open Shortest Path First para redes IPv6

O que o comando show ip ospf interface revela?

PROTOCOLOS DE COMUNICAÇÃO

Arquitectura de Redes

Capítulo 7: Roteando Dinamicamente (Resumo)

Protocolos de Roteamento link-state

Troubleshooting complexo do Mensagem de Erro OSPF

Trabalho 09: Geração de Pacotes e Tabela de Roteamento IPv6

Engenharia de Software

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

Transcrição:

Departamento de Engenharia Eletrotécnica REDES INTEGRADAS DE TELECOMUNICAÇÕES I 2017 / 2018 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 recetores 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. 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 utilizador 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 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). 3 Luis Bernardo

Pacote HELLO: { sequência contígua de } byte type; { tipo pacote - HELLO = 1 } char sender; { nome router origem } int distance; { distância ao vizinho } int len_area; { número de áreas } byte[] 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 39. A distância 39 é 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 = 2 } 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 seis segundos. 4 Luis Bernardo

Pacote ROUTE: { sequência contígua de } byte type; { tipo pacote - ROUTE = 3 } 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 receçã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 = 4 } 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: Log.java (completa) Interface para escrita de mensagens no écran; 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; RoutingTable.java (completa) Guarda uma tabela de encaminhamento. Oferece funções para manipular o conteúdo da tabela; Routing.java (a completar) Classe responsável por coordenar o cálculo da tabela de encaminhamento global e pelo tratamento dos pacotes DATA. Gere uma lista de objetos da classe Routing_process (um para cada área) e gere a tabela de encaminhamento global; RoutingProcess.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 RouterInfo.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). 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 RoutingTable define a variável rtab onde que é guardada a tabela de encaminhamento: private HashMap<Character, RouteEntry> rtab; // Routing table 7 Luis Bernardo

A classe RoutingTable define os seguintes métodos para lidar com tabelas de encaminhamento: // Default constructor public RoutingTable(); // Constructor that clones src contents public RoutingTable(RoutingTable src); // Test if table is initialized (it may be empty) public boolean is_valid(); // Clear the table public void clear(); // Add or replace a route entry to the table public void add_route(routeentry re); // Merges rt table to the local table excluding routes that go // through exclude_area area public void merge_table(routingtable rt, char exclude_area); // Returns the RouteEntry object to dest, or null if non-existing public RouteEntry get_routeentry(char dest); // Returns the next hop to reach dest, or if not existing public char nexthop(char dest) { // Returns an Entry[] with the table contents public Entry[] get_entry_vector(); // Returns a set with all the routes public Collection<RouteEntry> get_routeset(); // Returns an iterator to go through the route entries public Iterator<RouteEntry> iterator() { // Compares rt with the routing table and returns true if equal public boolean equal_routingtable(routingtable rt); // Log the table contents using a log (Router)object public void Log_routing_table(Log log); A classe Routing define: a variável rprocesses, usada para guardar a lista de processos de encaminhamento ativos no encaminhador; a string areas com um digito ( 0-9 ) para cada área ativa e a tabela de encaminhamento, em tab: private HashMap<Character, RoutingProcess> rprocesses; // List of routing processes private String areas; // String with the local areas private RoutingTable main_rtab; // Global routing table Por sua vez, a classe RoutingProcess 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 rtab. private HashMap<Character, RouterInfo> map; // Router list private RoutingTable rtab; // Routing table 8 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 após o processo de encaminhamento da área c_area calcular a tabela e enviar ROUTE */ public void area_tab_calculated(char c_area, boolean changed) {...} /** 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 RoutingTable 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 global */ private synchronized void update_global_routing_table() {...} Durante o trabalho devem ser definidos ou completados os seguintes métodos da classe RoutingProcess: /** 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 rtab */ 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(){ } /** Handle area changes - update Routing table and send ROUTE */ public void network_changed(boolean send_route) { } 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() { } 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 9 Luis Bernardo

proveito dele. Os alunos também podem modificar as classes fornecidas completas, se entenderem ser necessário. 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 RoutingProcess (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 parado 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. 2. Estender o programa para suportar múltiplas áreas. Nesta segunda fase, vão-se usar vários objetos da classe RoutingProcess, 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 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.c. 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 conta que é preferível fazer menos e bem (a funcionar e sem erros), do que tudo e nada funcionar. 10 Luis Bernardo

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. 11 Luis Bernardo