1º parcial de Redes - ETSIA - 30 de enero de 2007 Apellidos, Nombre: Soluciones _ Grupo de matrícula: 1. (1,5 punto) Dos host, A y B, están conectados mediante un router. La distancia entre cada uno de los hosts (A, B) y el router es de 100 m. La velocidad de transmisión empleada por todos los dispositivos es 100 Mbps, y la velocidad de propagación a través de los enlaces es de 2 x 10⁸ m/s. a) Si se está transmitiendo de forma continua, ¿cuántos bits puede transmitir A antes de que su primer bit transmitido llegue al router? El número de bits que A podrá transmitir hasta que su primer bit llegue al router serán los bits que pueden transmitirse durante un intervalo igual al tiempo de propagación. De esta forma tenemos: Ttrans = Tprop nº bits/Vtrans = Distancia/Vprop --> nº bits = (100 m / 2 x 108 m/s) x (100 x 106 bit/s) nº bits = 50 bits b)Sabiendo que las cabeceras de los niveles inferiores a TCP ocupan 34 bytes en total, ¿cuánto tiempo tardaría A en establecer una conexión TCP con B? Suponemos despreciables los tiempos de procesamiento, y no se considera el retardo asociado a las colas en el router. El establecimiento de conexión en TCP se realiza mediante el intercambio de los segmentos que podemos ver en la figura: router A B El tiempo de transmisión de un segmento será: SYN SYN SYN,ACK SYN,ACK ACK ACK T trans = nº bits/Vtrans Los segmentos intercambiados entre los dispositivos no llevarán datos, al tratarse de segmentos de establecimiento de conexión, por lo tanto: nº bits = cabecera TCP + cabeceras inferiores = = 20 bytes + 34 bytes = 54 x 8 bits = 432 bits El tiempo total necesario para que el segmento de SYN llegue de A hasta B será: T sync = T trans A-router + T prop A-router + T trans router-B + T prop router-B donde T trans A-router = T trans router-B = 432 bits / 100 x 106 bit/s = 432 x 10-8 seg. T prop A-router = T prop router-B = 100 m / 2 x 108 m/s = 50 x 10-8 seg. Puesto que los tres segmentos de establecimiento de conexión son del mismo tamaño, el tiempo total de establecimiento de la conexión con B será: =3xT = 3 x ( 2 x (432 + 50) x 10-8 seg) = 3 x 964 x 10-8 = 2892 x 10-8 seg. T total sync c) ¿Cuál sería la longitud de un bit expresada en metros si aumentamos la velocidad de transmisión a 155 Mbps? El tiempo de transmisión de 1 bit será: Ttrans = nº bits/Vtrans = 1 bit/155 x 106 bit/s el tiempo que tardará en propagarse la señal de dicho bit por el enlace será: T = (Distancia / 2 x 108 m/s)) prop por lo tanto, igualando los dos términos tendremos: Ttrans = Tprop nº bits/Vtrans = 1 bit/155 x 106 bit/s = (Distancia / 2 x 108 m/s) Distancia = (1 bit/155 x 106 bit/s) x 2 x 108 m/s) = 1,29 m/bit 2. (0,5 puntos) Justifica la utilización de MIME en el correo electrónico. El protocolo de correo SMTP impone que los mensajes de correo estén en formato ASCII 7-bits. La utilización de MIME permite enviar texto y objetos que inicialmente están en un formato diferente al ASCII 7-bits, permitiendo así la inclusión de imágenes, audio, ficheros comprimidos, ejecutables, etc... en los correos electrónicos. Entre otras cosas, MIME especifica cómo convertir esos objetos al ASCII 7bits que necesita SMTP. 3. (0,5 puntos) Indica la utilidad de la cabecera “ Content-Transfer-Encoding”. La cabecera “Content-Transfer-Encoding” especifica el método empleado para codificar los datos en formato distinto a ASCII 7-bits. Esta cabecera permite al receptor conocer el método que debe emplear para decodificar los datos recibidos. 4. (0,5 puntos) ¿Es posible emplear un mismo socket TCP para intercambiar datos con dos procesos diferentes? ¿Y si el socket es UDP? Justifica las respuestas. No, ya que un socket TCP, o bien está en modo pasivo (no intercambia datos, sino que espera conexiones), o está conectado a un único socket remoto, y por tanto a un único proceso. En el caso de sockets UDP, sí es posible, puesto que estos sockets no conectan con otros, sino que es necesario especificar la dirección destino para cada DatagramPacket. Cada datagrama que se envía puede ir destinado a un socket distinto. 5. (0,5 puntos) Indica las clases mínimas necesarias de Java.net necesarias para implementar un: a) Servidor TCP b)Cliente TCP c) Cliente UDP a) ServerSocket, Socket b) Socket c) DatagramSocket, DatagramPacket, InetAddress 6. (0,5 puntos) a) ¿Puede un cliente abrir dos sockets sobre el mismo puerto local (del mismo protocolo)? Justifica la respuesta. No. La apertura del segundo socket produciría un error, ya que de permitirse la existencia de este segundo socket haría que TCP no supiera a cuál entregar un segmento si se emplean ambos para acceder al mismo servidor. b)¿Pueden existir en un servidor dos sockets con el mismo puerto y protocolo? Justifica la respuesta, y pon un ejemplo. Si, únicamente en los servidores TCP, ya que en este caso los sockets se diferencian por la conexión, de la cual forma parte la dirección del socket remoto (del cliente), ya que son sockets conectados. Ejemplo: Se crean sockets con el mismo puerto en un servidor concurrente cada vez que se ejecuta la llamada a accept . 7. (0,5 puntos)¿Cuáles son los objetivos del control de flujo y del control de la congestión en TCP? Ambos mecanismos intentan evitar la pérdida de datos por saturación. En el caso del control de flujo, se desea evitar que se sature el receptor de los datos, mientras que en el caso del control de congestión se evita que lo haga la red. 8. (0,5 puntos) ¿En qué consiste el piggybacking? Consiste en añadir un campo ACK (de reconocimiento) a los datos transmitidos, intentando minimizar el número de mensajes de ACK de los datos recibidos. Dicho de otra forma, permite que los mensajes de ACK viajen en los segmentos de datos del sentido contrario. 9. (1 punto) Desde el ordenador rtv1.retevision.es se quiere enviar un correo. El remitente es [email protected] y el destinatario [email protected]. El DNS local de dicho ordenador es montgo.retevision.es y el servidor SMTP del remitente smtp.retevision.es. La dirección destino [email protected] es un alias de [email protected], [email protected] y [email protected]. Sabiendo que el servidor de correo para el dominio redes.upv.es es zoltar.rediris.es, y que las cachés DNS de los equipos mencionados están vacías, indica la secuencia TOTAL de PETICIONES DNS (las contestaciones no) necesaria para poder hacer llegar el correo. Supóngase que los TLD's conocen todos los servidores de nombres autorizados. Orden Origen Destino Tipo de consulta Recursiva/ Iterativa Objeto de la consulta 1 rtv1.retevisión.es montgo.retevision.com A R smtp.retevision.es 2 smtp.retevision.es montgo.retevision.com MX R redes.upv.es 3 montgo.retevision.com root.A MX I redes.upv.es 4 montgo.retevision.com DNS.es MX I redes.upv.es 5 montgo.retevision.com DNS.redes.upv.es MX I redes.upv.es 6 zoltar.rediris.es DNS.rediris.es MX R privada.com 7 DNS.rediris.es root.A MX I privada.com 8 DNS.rediris.es DNS.com MX I privada.com 9 DNS.rediris.es DNS.privada.com MX I privada.com 10.(1 punto) Escribe un programa en Java que implemente un servidor TCP iterativo. El servidor acepta una línea de caracteres del cliente y devuelve al cliente la misma línea. import java.net.*; import java.io.*; class ServidorTCP { public static void main(String args[]) throws UnknownHostException,IOException { ServerSocket ss = new ServerSocket(7777); while (true) { Socket s = ss.accept(); BufferedReader entrada = new BufferedReader(new InputStreamReader(s.getInputStream())); PrintWriter salida = new PrintWriter(s.getOutputStream()); salida.println(entrada.readLine()); s.close(); } } } b) Modifica el programa realizado para convertir el servidor iterativo en un servidor concurrente. import java.net.*; import java.io.*; class ServidorTCPConcurrente extends Thread { Socket id; public ServidorTCPConcurrente(Socket s) {id=s;} public void run() { try { BufferedReader entrada = new BufferedReader(new InputStreamReader(id.getInputStream())); PrintWriter salida = new PrintWriter(id.getOutputStream()); salida.println(entrada.readLine()); id.close(); } } catch(Exception e) {} } public static void main(String args[]) throws IOException{ ServerSocket ss=new ServerSocket(7777); while(true) { Socket s = ss.accept(); ServidorTCPConcurrente t = new ServidorTCPConcurrente(s); t.start(); } } } 11.(0,5 puntos) Indica alguna razón por la que pueda ocurrir la excepción IOException al instanciar un objeto de tipo Socket en Java. Al intentar conectar un socket cliente el puerto en el ordenador destino está cerrado. 12.(1 punto) La gráfica siguiente representa la evolución de una ventana de congestión TCP en función del tiempo. Responde las siguientes preguntas: a) ¿Qué valor tiene la ventana de permisos del receptor (WIN)? 64 segmentos b)Identifica los intervalos en los que actúa el mecanismo de incremento aditivo. [6,8] y [9,13] c) ¿Qué ha sucedido en RTT 8? ¿y en RTT 13? En ambos casos se ha producido una pérdida de segmento, ésta se ha detectado por: RTT = 8 : recepción de 3 ACKs duplicados RTT = 13: vencimiento del temporizador d)Calcula el valor del umbral en los RTTs: 3, 10 y 15. Indica la fórmula utilizada para el cálculo. RTT = 3, umbral= WIN=64 RTT = 10, umbral = max ( ventana de transmisión/2, 2 segmentos) = (64/2,2) =32 RTT = 15, umbral = max ( ventana de transmisión/2, 2 segmentos) = (36/2,2) =18 e) Suponiendo que en el RTT 10 WIN pasa a valer 32 , calcula los valores de la ventana de congestión y del umbral en el RTT 18. Indica la fórmula utilizada para el cálculo. umbral = max ( ventana de transmisión/2, 2 segmentos) = (32/2,2) =16 Ventana de congestión = Ventana de congestión + 1/Ventana de congestión = 17 13.(0,5 puntos) En una aplicación ftp: a) ¿Qué órdenes de un cliente FTP provocan que se establezca una conexión de datos? Indica si son órdenes del protocolo FTP o de la interfaz de usuario. (Se aceptan ambos tipos) Las órdenes que crean una conexión de datos son las que producen un intercambio de datos (bien sea ficheros o contenido de directorios). Estas órdenes son LIST, RETR y STOR en el caso del protocolo FTP y dir, ls, get, put, mget y mput en el caso de la interfaz de usuario. b)¿Cómo se sabe el número de puerto al que hay que conectarse al establecer una conexión de datos? Si el modo es activo, el cliente le envía al servidor la orden PORT n1, n2, n3, n4, n5, n6, donde n5*256+n6 es el número de puerto donde el servidor debe conectarse al cliente. Si el modo es pasivo, entonces el servidor devuelve la cadena “227 Entering Passive Mode (n1, n2, n3, n4, n5, n6)”, donde n5*256+n6 es el número de puerto donde el cliente debe conectarse al servidor. 14.(0,5 puntos) Dada la orden ./sock -l :7777 -d 'cat inicio.htm' indica la misión de cada uno de los parámetros. El parámetro “-l” indica que se va a crear un servidor. Por defecto, el servidor será un servidor TCP, dado que no se indica lo contrario. El parámetro “-d” indica que cuando se conecte un cliente se ejecute la orden “cat inicio.htm”. La salida estándar de esta orden se redirige hacia la red, de forma que el cliente recibe la salida generada por la orden. 15.(0,5 puntos) El siguiente fragmento de código forma parte de un cliente del protocolo http: Socket s = new Socket(“www.redes.upv.es”,80); System.setProperty(“line.separator”,”\r\n”); BufferedReader lee = new BufferedReader(new InputStreamReader(s.getInputStream())); PrintWriter esc = new PrintWriter(s.getOutputStream(),true); esc.println(“GET /redes/index.html HTTP/1.0”); System.out.println(“lectura: “ + lee.readLine()); Suponiendo que en el puerto 80 de www.upv.es está escuchando un servidor que emplea el protocolo http y que el archivo solicitado se encuentra disponible, indica qué ocurrirá al ejecutar el programa. Justifica la respuesta. El cliente se bloqueará en la línea “System.out.println(“lectura: “ + lee.readLine());” y no continua su ejecución. La razón es que el servidor ha recibido parte de la petición HTTP, pero no la ha recibido completa. Le falta una línea en blanco para saber que puede procesar la petición. Dado que el cliente no envía esa línea en blanco, el servidor sigue esperando el resto de la petición y, por lo tanto, no devuelve nada al cliente. A su vez, el cliente está esperando una línea del servidor. Como ambos se esperan mutuamente, se entra en una situación de bloqueo.