Examen de Redes - Primer Parcial - ETSIA – 26 de Enero de 2006 Apellidos, Nombre: Grupo de matrícula: Soluciones al examen Todos 1. (1 punto) Convierte el siguiente servidor iterativo en un servidor concurrente: import java.net.*; import java.io.*; class Servidor { public static void main(String args[]) throws Exception { ServerSocket ss = new ServerSocket(7777); while(true) { Socket s = ss.accept(); proporciona_el_servicio(s); s.close(); } } } import java.net.*; import java.io.*; class Servidor extends Thread { Socket id; public Servidor(Socket s) {id=s;} public void run() { proporciona_el_servicio(id); id.close(); } public static void main(String args[]) throws Exception{ ServerSocket ss=new ServerSocket(7777); while(true) { Socket s = ss.accept(); Servidor t = new Servidor(s); t.start(); } } } 1 2. (1 punto) Con respecto al protocolo FTP: a) ¿Pueden haber problemas al utilizar en FTP el modo activo cuando tenemos un cortafuegos? ¿Por qué? Sí. Debido a que habitualmente los cortafuegos impiden el establecimiento de conexiones iniciadas desde el exterior de la red que protegen, con lo que el intento de conexión (de datos) por parte del servidor de FTP puede verse impedido por el cortafuegos b) Supongamos establecida una sesión anónima con un servidor FTP al que le hemos enviado la orden PASV, obteniendo la siguiente respuesta: 227 Entering Passive Mode (158,42,180,62,180,94). Referido a los sockets, ¿qué implica dicha respuesta por parte del servidor? Razona tu respuesta. Que el cliente deberá establecer una conexión de datos con el servidor (158.42.180.62) al puerto 46174 (180*256+94). 3. (1 punto) Evalúa el tiempo necesario para establecer una conexión TCP entre dos hosts A y B. Ambos están conectados a redes de 100 Mbps con una velocidad de propagación de 2*108 m/seg, interconectadas mediante un router. La distancia entre el host A y el router es de 100 m, mientras que la distancia del router al host B es 1000 m. Suponemos que las cabeceras de niveles inferiores al de transporte ocupan 50 bytes en total. Asimismo, el tiempo de procesamiento en el router y en los hosts A y B se supone despreciable. La secuencia de eventos que sucederían sería la siguiente: En el instante inicial, A comienza a transmitir el mensaje SYN. Su tamaño es de 20 bytes (sólo cabeceras TCP, y suponemos que sin opciones) más 50 de cabeceras de nivel inferior, dando un total de 70 bytes, que corresponden a 560 bits Un tiempo de transmisión después, A ha terminado de enviar este segmento. El tiempo de transmisión será Ttrans= 560 / 108 seg. Un tiempo de propagación después, el último bit del segmento ha llegado al router. Este tiempo de propagación será Tprop1 = 100 / 2*108 seg. = 50 / 108 seg. Puesto que el tiempo de proceso en el router se considera despreciable, en este instante comienza la transmisión del segmento a través de la segunda red. Un tiempo de transmisión más tarde se finaliza dicha transmisión. Puesto que las redes tienen la misma velocidad, Ttrans = 560/ 108 seg. Al igual que en el caso anterior, un tiempo de propagación más tarde el último bit llega a B. Este tiempo de propagación es Tprop2= 1000 / 2*108 seg. = 500 / 108 seg. A partir de aquí, y tras un tiempo de proceso despreciable, se contesta con un segmento SYN + ACK. Su tamaño es el mismo que el primer segmento (solo cabeceras) y el tiempo que tarda en llegar a A es el mismo que ha empleado el primer mensaje. Lo mismo es aplicable para el tercer segmento ACK de A a B. Por tanto, el total corresponderá con el triple del tiempo empleado por el primer segmento. Luego Ttotal= 3*(560+50+560+500)/ 108 = 3*1670/108=5010/ 108 = 50'1 μs. 2 4. (1 punto) Introduce las órdenes necesarias para, tras ejecutar en el computador labrdc01.redes.upv.es la orden telnet smtp.upv.es 25, enviar un correo electrónico a profes@redes.upv.es con asunto "ejercicio 4" y que incluya en el mensaje el texto: “Examen de redes”. El remitente del correo es alumno@redes.upv.es. helo labrdc01.redes.upv.es mail from: <alumno@redes.upv.es> rcpt to: <profes@redes.upv.es> data From: <alumno@redes.upv.es> To: <profes@redes.upv.es> Subject: ejercicio 4 <Línea en blanco> Examen de redes . quit 5. (1 punto) En una conexión entre los computadores A y B se han intercambiado los siguientes segmentos: Origen Secuencia Código ACK Datos A 1000 SYN - - B 7000 ACK, SYN 1001 - A 1001 ACK 7001 - A 1001 ACK 7001 GET ..... (70 bytes) B 7001 ACK 1071 HTTP ..... (900 bytes) A 1071 ACK 7901 - B 7901 ACK 1071 Continuación HTTP (300 bytes) A 1071 ACK 8201 - A 1071 ACK 8201 GET ..... (60 bytes) A 1131 ACK 8201 GET ..... (50 bytes) B 8201 ACK 1181 HTTP ..... (900 bytes) A 1181 ACK 9101 - B 9101 ACK 1181 Continuación HTTP (600 bytes) A 1181 ACK 9701 - B 9701 ACK 1181 HTTP ..... (400 bytes) A 1181 ACK 10101 - A 1181 FIN, ACK 10101 - 3 a) ¿Qué protocolo de aplicación (incluyendo versión si procede) ha generado este tráfico? Justifica la respuesta. HTTP 1.1, puesto que las órdenes empleadas corresponden a HTTP y la utilización de conexiones persistentes y pipelinning es exclusiva de la versión 1.1. b) ¿Emplea A reconocimientos retrasados? ¿Y B? Justifica la respuesta. A no emplea reconocimientos retrasados, ya que para cada segmento recibido de B envía inmediatamente el reconocimiento en un segmento ACK. B emplea reconocimientos retrasados, ya que se puede observar, por ejemplo, que el reconocimiento a los dos segmentos que incluyen los GETs enviados por A es devuelto con un único ACK. c) ¿Cuál es el MSS de cada computador? Justifica la respuesta. El MSS del computador B es 900, ya que los mensajes mayores que este tamaño se dividen en varios segmentos (ejemplo, primer HTTP). El de A no es seguro, ya que todas las órdenes enviadas caben en un segmento. Sólo puede asegurarse que es de 70 ó mayor. d) Suponiendo que no se envian más datos y que no se ha producido ningún error, ¿cuál será el siguiente segmento que aparecerá? La confirmación del cierre de conexión por parte del servidor B, es decir B 10101 FIN,ACK 1182 - 6. (1 punto) En el protocolo TCP, desde el punto de vista del emisor, ¿qué dos eventos le avisan que hay una situación de congestión en la red? ¿Cuál de los dos señala una congestión más severa? ¿Por qué? El emisor intuye que se está produciendo una situación de congestión cuando: • Vence un temporizador o • Se reciben 3 ACKs duplicados De estas dos señales el emisor interpreta el vencimiento de un temporizador como señal de una situación de congestión más severa. Esta interpretación se basa en que el vencimiento de un temporizador se produce porque no se ha recibido reconocimiento alguno, lo que implica que o bien en el otro extremo de la conexión no se está recibiendo segmento alguno o que los reconocimientos se están perdiendo o retrasando en exceso debido a una severa situación de congestión en la red. La recepción de 3 ACKs duplicados, está informando implícitamente al emisor que aunque el segmento para el que esperaba el reconocimiento no ha llegado al receptor, si que lo están haciendo otros segmentos enviados, por lo que se intuye que la situación de congestión, si existe, no es tan severa como en el caso anterior. 4 7. (0,75 puntos) En el código Java del servidor web visto en clase se usa el método println de la clase PrintWriter para enviar las cabeceras de la respuesta. Sin embargo, se emplea el método write de la clase OutputStream para enviar el cuerpo de la respuesta. ¿A qué se debe esta diferencia? Esta diferencia se debe a que en el cuerpo de la respuesta se pueden enviar objetos de diferentes tipos: imágenes, sonido, etc. y no únicamente ficheros en formato texto. Para enviar esta información necesitamos una clase que nos permita enviar un flujo de bytes. El método write de la clase OutputStream permite justamente esto, el envío de un flujo de bytes. 8. (1 punto) Tras establecer una conexión TCP, en la que no se usan ACKs retrasados, el computador A transmite 4 segmentos con las siguiente características: Segmento Segmento Segmento Segmento 1: 2: 3: 4: Número Número Número Número de de de de secuencia secuencia secuencia secuencia 3500, 3700, 3900, 4100, con con con con 200 200 200 200 bytes bytes bytes bytes de de de de datos. datos. datos. datos. a) El segmento 2 se pierde durante la transmisión. ¿Cuántos reconocimientos recibirá A tras la transmisión de estos 4 segmentos? ¿Qué valor tendrán en el campo "Número de Reconocimiento"? Se recibirán 3 ACKs con los siguientes valores: 3700, 3700 y 3700 b) Cuando se transmite el segmento número 2, el RTO tiene un valor de 1,2 segundos. El ACK asociado a este segmento se pierde. ¿Qué valor tendrá el RTO que se utilice en la retransmisión? Justifica por qué. El valor del RTO en la retransmisión será de 2,4 segundos. Cuando hay retransmisiones, no se aplica el procedimiento general de estimación del RTT, en cambio se duplica el valor del RTO utilizado en la transmisión anterior. Este mecanismo se conoce como exponential backoff. 9. (1 punto) Con respecto al protocolo HTTP: a) Indica la URL completa que tenemos que introducir en un navegador para acceder al documento "index.html" del servidor HTTP que está instalado en el puerto 7070 del computador "www.servidor.com" . http://www.servidor.com:7070/index.html b) Describe la petición HTTP que generará el navegador si está configurado para usar la versión 1.1 de HTTP. Utiliza únicamente la(s) cabecera(s) imprescindible(s). GET /index.html HTTP/1.1 <CR><LF> Host: www.servidor.com:7070 <CR><LF> <CR><LF> 5 c) Describe la respuesta HTTP (excepto el cuerpo) que generará el servidor si el documento solicitado está disponible. La respuesta debe incluir las cabeceras necesarias para indicar el formato del documento (text/html) y su longitud (335 bytes). HTTP/1.1 200 OK <CR><LF> Content-Length: 335 <CR><LF> Content-Type: text/html <CR><LF> <CR><LF> Supondremos en lo que sigue que el documento "index.html" contiene dos imágenes asociadas: d) Si se usara el protocolo HTTP versión 1.0, ¿cuántas conexiones TCP sería necesario establecer entre cliente y servidor para descargar la página web completa? ¿Quién inicia el establecimiento y quién el cierre de estas conexiones? Razona tu respuesta. Se establecerán 3 conexiones: una para el documento "index.html" y dos más para las imágenes asociadas. En la versión HTTP/1.0 se usa una conexión TCP distinta para descargar cada objeto (html, gif, etc.). Las conexiones las inicia el cliente y las cierra el servidor. En HTTP/1.0, el servidor envía el documento solicitado e, inmediatamente después, cierra la conexión. e) Supongamos ahora que la conexión se realiza a través de un proxy. Las imágenes están contenidas en la caché del proxy, pero no el documento HTML. ¿Cuántas conexiones TCP será necesario establecer entre cliente y proxy para descargar la página web completa? ¿y entre proxy y servidor? (en ambos casos se usa el protocolo HTTP versión 1.0). Razona tu respuesta. Conexiones TCP entre cliente y proxy: 3, una por cada objeto. Conexiones TCP entre proxy y servidor: una para el documento HTML, las imágenes las puede servir desde su caché, evitando así el acceso al servidor. 10. (0,75 puntos) En el bucle principal de un servidor encontramos las siguientes instrucciones: while(true) { Socket cliente=ss.accept(); cliente=ss.accept(); new atiendePeticion(cliente).start(); } ¿Qué inesperado comportamiento producirá este servidor, suponiendo que la clase atiendePeticion se encarga de ofrecer un determinado servicio de aplicación? Los clientes pares reciben servicio normalmente. Los clientes impares, sin embargo, no reciben servicio alguno. 11. (0,5 puntos) ¿Qué hacemos con las excepciones que se produzcan en el método run() de una clase derivada de la clase Thread? No se pueden lanzar excepciones en el método run() de una clase derivada de Thread, por lo tanto hay que tratarlas oportunamente mediante el uso de cláusulas try/catch. 6