Download Router - dit/UPM

Document related concepts
no text concepts found
Transcript
Laboratorio de Programación
Práctica 3
Entrada/Salida y
Manejo de excepciones
Dpto. de Ingeniería de Sistemas Telemáticos
http://www.lab.dit.upm.es/~lprg/
Abril 2004
Objetivos
 Se cubren los siguientes aspectos
 Lectura de un fichero de entrada
 Manejo de excepciones
 Escenario
 Configuración de un router
Abril 2004
Práctica 3
2
Internet: red de “redes”
A
Estaciones de usuario (PC)
R2
R1
R3
Servidores
R4
R5
Router
Conexión entre dispositivos,
a través de una red
B
Camino que va siguiendo
el tráfico de la comunicación
del PC A al servidor B (ruta)
Abril 2004
Práctica 3
3
Router
 Un router es un dispositivo con conexiones a otros
dispositivos a través de redes y que actúa como
encaminador de tráfico.
 Cada conexión se realiza a través de una interfaz, que
es el punto de comunicación entre un dispositivo y el
exterior.
 Para encaminar el tráfico es necesario conocer las
rutas hacia los posibles destinos

no la ruta completa, sólo el “gateway” o “siguiente salto”. (R1
sólo necesita saber que para encaminar el tráfico dirigido hacia
B, hay que enviarlo a R2)
Abril 2004
Práctica 3
4
Dirección IP
 En Internet, se necesita “algo” para identificar
unívocamente las interfaces y redes. Para ello se
utilizan las direcciones IP (Internet Protocol)


Formada por 4 bytes
 Cada byte permite 28 valores, entre 0 y 255
Notación
 Notación decimal: 138.4.54 4
 Notación binaria: 1111 1111 0000 0100 0111 0110 0000 0100
138
4
54
4
1000 1010
0000 0100
0011 0110
0000 0100
Abril 2004
Práctica 3
5
Dirección de Red
 Una dirección de red identifica el conjunto de direcciones IP posibles de las
interfaces conectadas en una red
 El procedimiento empleado es hacer que todas las direcciones IP de una
red tengan una parte común: los primeros N bits


Esa parte común se representa mediante una máscara de red
La máscara de red se representa como una dirección IP, con los primeros N bits
igual a 1 y el resto de bits 0, ej. 255.255.255.0
 Por tanto, una dirección de red queda definida mediante:

dirección IP, máscara de red
Ej. Red de área local con
un router y varios servidores:
138.4.54.0 / 255.255.255.0
138.4.54.1
138.4.54.2
Abril 2004
138.4.54.3
138.4.54.x
Práctica 3
6
Interfaz
 Una interfaz, se identificará por:
 un nombre, de uso interno en el dispositivo (ej, ce0)
 una Dirección IP (ej, 138.4.54.4)
 un identificador de la red a la que está conectada (dirección de la red)
 La dirección de red se genera a partir de:
 Dirección IP (ej, 138.4.54.4)
 una Máscara de Red (ej, 255.255.255.0)
 Por tanto, una interfaz queda definida mediante:
 nombre, dirección IP, máscara de red
ce0
138.4.54.4 / 255.255.255.0
Abril 2004
Práctica 3
7
Rutas
 Para encaminar el tráfico es necesario conocer las rutas hacia los
posibles destinos
 Dos casos:


Si el destino está en una de las redes a las que estoy conectado
directamente, se lo envío directamente a través de esa red.
Si el destino no está en una de las redes a las que estoy conectado
directamente, se lo intentaré enviar indirectamente a través de otro
router con el que sí tengo conexión directa.
 Un router guarda información sobre las rutas que conoce (tabla de
encaminamiento). Cada ruta especifica:
dirección de la red destino (= dirección IP + máscara)
 dirección IP del “gateway” (dispositivo al que tengo que reenviar el
tráfico dirigido a cualquier dirección de esa red destino)
 Por tanto, una ruta queda definida mediante:


dirección de red (destino), dirección IP (gateway)
Abril 2004
Práctica 3
8
Parámetros de un Router
 Un router queda definido por:



Su nombre
Sus interfaces de red; cada interfaz queda definida por:
 Un nombre
 Una Dirección IP
 Una Máscara de red
Su tabla de rutas; cada ruta queda definida por:
 Red destino (Dirección de Red)
 Gateway (Dir. IP)
Abril 2004
Práctica 3
9
Fichero de configuración
// nombre del router
device name "my router"
// definición
interface add
interface add
interface add
de interfaces
ce0 "192.168.0.3" "255.255.0.0"
ce1 "10.0.0.5" "255.0.0.0"
ce2 "138.4.54.4" "255.255.255.0"
// definición de rutas
route add "11.0.0.0" "255.0.0.0" "10.0.0.1"
route add "212.166.250.0" "255.255.0.0" "192.168.0.1"
route add "138.4.63.0" "255.255.255.0" "138.4.54.1"
Abril 2004
Práctica 3
10
¿Qué hay que hacer?
 Implementar una clase que lea un fichero
de configuración de un router, como el
anterior, y cree un router con dicha
configuración
Abril 2004
Práctica 3
11
Diagrama de Clases
Abril 2004
Práctica 3
12
Clases
 Clases (y ficheros) proporcionados:
 Clase DireccionIP.java
 Clase DireccionIPException.java
 Clase DireccionRed.java
 Clase Interfaz.java
 Clase Ruta.java
 Clase Router.java
 Clase Configuracion.java
 Fichero de ejemplo de configuración: Device.txt
 Clase Entrega.java
 Clases pedidas:
 Clase ConfigRouterException.java
 Clase ConfigRouter.java
 Clase ConfigRouterTest.java
Abril 2004
Práctica 3
13
Entrada/Salida para ConfigRouter
 Para leer el fichero
 java.io.File(nomfichero)
 java.io.FileReader(File)
 Para descomponer la entrada en tokens
 java.io.StreamTokenizer
Abril 2004
Práctica 3
14
StreamTokenizer
final char DELIMITADOR_WORD = ‘”’;
fr = new FileReader (new File(“fichero”));
st = new StreamTokenizer(fr);
// una secuencia de caracteres encerrada
// entre dos caracteres DELIMITADOR_WORD es
//vista como un solo token
st.quoteChar(DELIMITADOR_WORD)
// ignora comentarios del tipo “//”
st.slashslashComments(true)
// ignora comentarios del tipo “/*...*/”
st.slashStarComments(true)
Abril 2004
Práctica 3
15
Método nextToken
de StreamTokenizer
 El método nextToken() de StreamTokenizer puede
devolver varios valores:




TT_WORD: indica que el token es una palabra.
TT_NUMBER: indica que el token es un número.
TT_EOL: indica que se ha llegado al final de una línea.
 Para que esto funcione, debe haber sido invocado el método
eolIsSignificant con el argumento true.
TT_EOF: indica el final de la entrada.
Abril 2004
Práctica 3
16
Ejemplo trivial
// _st es un objeto de la clase StreamTokenizer
for (int lexema = _st.nextToken(); lexema != StreamTokenizer.TT_EOF;
lexema = _st.nextToken())
System.out.println (_st.sval);
device
name
my router
interface
add
ce0
192.168.0.3
255.255.0.0
interface
Add
ce1
10.0.0.5
255.0.0.0
interface
add
ce2
138.4.54.4
255.255.255.0
route
add
Abril 2004
11.0.0.0
255.0.0.0
10.0.0.1
route
add
212.166.250.0
25.255.0.0
192.168.0.1
route
add
138.4.63.0
255.255.255.0
138.4.54.1
Práctica 3
17
Palabras Clave
 Las palabras clave utilizadas en la definición de
un router son las siguientes:



device
interfaz
route
 Además, existen otras dos palabras clave, que
representan operaciones:


name
add
Abril 2004
Práctica 3
18
Posible algoritmo de reconocimiento:
método configura
 Abrir fichero para lectura
 Crear StreamTokenizer
 Leer una primera línea que comience por device
 Si el siguiente token es name
 tratar de reconocer un nombre para el router
 Mientras haya tokens
 Si el primer token es interfaz
 Si el siguiente token es add
• Tratar de reconocer una definición de interfaz para el router

Si el primer token es router
 Si el siguiente token es add
• Tratar de reconocer una definición de Ruta para el dispositivo
 Si en algún momento se llega a una situación no deseada (token
incorrecto, fin de línea, etc.) se debe lanzar una Excepción:
ConfigRouterException.
Abril 2004
Práctica 3
19
Sugerencias
 Crear los siguientes métodos





getWord, para leer una palabra (o secuencia de palabras
entrecomilladas)
getDireccionIP, para leer una dirección IP
procesaNombre, para leer líneas que comiencen por device
procesaInterfaz, para leer líneas que comiencen por interfaz
procesaRuta, para leer líneas que comiencen por route
Abril 2004
Práctica 3
20
Logging
 Se deberán incluir trazas en la implementación de la clase pedida
ConfigRouter:


se utilizará java.util.logging
niveles de trazado:
 SEVERE: para fallos graves, como excepciones que no se pueden
tratar; se indica la excepción que se lanza.
 INFO: para mostrar información de alto nivel: entrada y salida en los
métodos.
 FINE: para mostrar información de bajo nivel, concretamente de los
tokens que se van leyendo de la entrada.
 Se puede indicar en tiempo de ejecución dónde está el fichero de
configuración para el paquete java.util.logging:

java -Djava.util.logging.config.file=logging.properties
lprg.p3.ConfigRouterTest
Abril 2004
Práctica 3
21
Logging: Ejemplos
11-abr-2004 23:42:17 lprg.p3.ConfigRouter
INFO: Entrada
11-abr-2004 23:42:17 lprg.p3.ConfigRouter
FINA: token leído: device
11-abr-2004 23:42:17 lprg.p3.ConfigRouter
INFO: Entrada
11-abr-2004 23:42:17 lprg.p3.ConfigRouter
FINA: token leído: name
....
11-abr-2004 23:46:40 lprg.p3.ConfigRouter
INFO: Entrada
11-abr-2004 23:46:40 lprg.p3.ConfigRouter
FINA: token leído: 1192.168.0.3
11-abr-2004 23:46:40 lprg.p3.ConfigRouter
GRAVE: Lanzada ConfigRouterException
Abril 2004
Práctica 3
getWord
getWord
getWord
getWord
getWord
getWord
getDireccionIP
22
Pruebas: Clase
Configuracion.java
 Existe una clase Configuración.java que permite comprobar la funcionalidad
del Router:



Crea un router a partir de un fichero de configuración
Calcula rutas para algunas direcciones IP predefinidas en el código
Solicita direcciones IP por la entrada estándar y dice por qué interfaz deberá
encaminarse el tráfico dirigido hacia esa dirección IP
java lprg.p3.Configuracion –Djava.util.logging.config.file=logging.properties
lprg\p3\Device.txt
138.4.54.38 -> ce2: 138.4.54.4/255.255.255.0
10.0.3.0 -> ce1: 10.0.0.5/255.0.0.0
192.168.0.1 -> ce0: 192.168.0.3/255.255.0.0
192.160.0.1 -> null
device name my router"
interface add ce0 "192.168.0.3" "255.255.0.0"
interface add ce1 "10.0.0.5" "255.0.0.0"
interface add ce2 "138.4.54.4" "255.255.255.0"
route add "11.0.0.0" "255.0.0.0" "10.0.0.1"
route add "212.166.250.0" "25.255.0.0" "192.168.0.1"
route add "138.4.63.0" "255.255.255.0" "138.4.54.1"
Introduzca direcciones IP para averiguar la ruta:
138.4.54.1 -> ce2: 138.4.54.4/255.255.255.0
212.166.250.21 -> ce0: 192.168.0.3/255.255.0.0
Abril 2004
Práctica 3
23
Excepciones
en ConfigRouter.java
 Deben lanzarse excepciones:


IOException: si no se puede abrir el fichero porque no existe o
no tenemos permisos
ConfigRouterException: no se reconoce el tipo de elemento de
una línea
 Tratamiento:



IOException: no se pueden tratar, el programa debe terminar
ConfigRouterException: tampoco se tratan, el programa termina
DireccionIPException deben capturarse y propagarse en forma
de RouterException
 Cada vez que se lance una Excepción se generará una
línea de log con el nivel SEVERE
Abril 2004
Práctica 3
24
Pruebas en
ConfigRouterTest.java
 Se proporcionan algunas pruebas muy simples:
 Fichero vacío
 Fichero que no existe
 Deberá completarse con casos de prueba adicionales que permitan
comprobar toda la funcionalidad de la clase ConfigRouter
 ¿Cómo escribir en un fichero?
FileWriter fw = new FileWriter(<nomfichero>);
BufferedWriter salida = new BufferedWriter(fw);
salida.write(<String>);
salida.write (<String>);
...
salida.close();
Abril 2004
Práctica 3
25
Entrega
 Todas las clases pertenecerán al package lprg.p3
 Se deberán dejar en el directorio lprg/p3 de su cuenta del
laboratorio
 Se piden los ficheros



ConfigRouter.java
ConfigRouterException.java
ConfigRouterTest.java
 Fecha límite: 30 de abril de 2004, 23:59
Abril 2004
Práctica 3
26