Examen Introducció a les Xarxes d Ordinadors - 2008-2009 24 de març de 2009, 15h00 Duració: 2,5 hores (1 hora per al test) Publicació de notes provisionals: 14 d abril 2009 Revisió de l examen: 15 d abril 2009, 12h30 Parte I: aserciones (22 preguntas, 4 puntos total) Indica si cada una de las siguientes aserciones es cierta o falsa. Los fallos restan. 1. El checksum de un paquete IP se calcula sobre el paquete completo (cabecera y datos). 2. En un sistema de routers con enrutamiento dinámico, cualquier pérdida de conectividad de uno de los routers es comunicada a los routers próximos para que éstos actualicen automáticamente sus tablas de enrutamiento. 3. Toda la información que necesita un host que recibe fragmentos de datagramas para poder reensamblarlos es la siguiente: IP origen, flag M, desplazamiento, longitud de cabecera y longitud total. 4. El siguiente dibujo muestra correctamente la estructura de un un router inalámbrico (Wii) con entrada/salida Ethernet. Enlace Ethernet TCP IP Enlace Wii 5. Para implementar técnicas NAT en IPv6, hay que reservar unos rangos de direcciones IP como direcciones privadas que no se puedan asignar a redes públicas. 6. Se puede utilizar la técnica de tunnelling para hacer comunicar dos hosts con IPv6 a través de una red IPv4. 7. Si host A envía un SYN a host B, y host B envía un SYN a host A antes de recibir el SYN de host A, no se puede completar el 3-way handshake. 8. El protocolo ARP ofrece un subconjunto de las funciones del protocolo DHCP. 9. Si un paquete va dirigido a dirección 201.201.201.201 y la máscara es 255.255.255.224, el destinatario es host 6 en subred 9 de la red 201.201.0.0. 10. Con el protocolo distance vector routing, la caída de un enlace entre routers puede producir una cadena de actualizaciones infinita e incorrecta de las tablas de los routers. 11. Si dos hosts A y B intercambian los siguientes segmentos TCP, 1 A > B SEQ 0 LEN 0 WIN33580 SYN 2 B > A SEQ 1000 ACK 1001 LEN 0 WIN64240 SYN el host A completará el three way handshake enviando un ACK 1001 a host B. 12. La técnica de diferenciación de tráfico DiffServ no requiere que todos los paquetes IP de una determinada aplicación sigan la misma ruta. 13. La dirección 111.111.111.111 es una dirección IP válida y pública. 1
14. Si el bit PUSH está puesto en un segmento TCP, el segmento se enviará aunque la longitud de sus datos pueda ser inferior al MSS. 15. Tenemos un fragmento de datagrama IP con el flag M=1. Si un dispositivo (p.ej. router) lo vuelve a fragmentar en 2 partes, cada una de ellas tendrá el flag M=1. 16. Tenemos tres routers CIDR (C, D y E) que dan acceso a tres redes con rangos de direcciones 195.14.0.0/21, 195.14.8.0/21 y 195.14.16.0/20: C A B D E El router A podría tener definida una única entrada en su tabla de encaminamiento para direccionar hacia las redes conectadas a C, D y E. Dicha entrada tendría la dirección de red y máscara: 195.14.0.0/19. 17. Cuando un computador que pertenece a una red privada que implementa NAT realiza una petición hacia un computador de una red externa, el dispositivo NAT almacenará en una tabla interna la IP y puerto del remitente y los sustituirá en el datagrama IP por una IP pública y un puerto. El puerto escogido permitirá recuperar la información del remitente al recibir la respuesta. 18. Tras hacer un ping a una dirección IP, obtenemos el siguiente resultado: Respuesta desde @IP: bytes=32 tiempo=1ms TTL=253. El número de routers por los que pasa el paquete ICMP de respuesta es de 3. 19. Hacemos el tracert siguiente: D:\ >tracert -d 159.23.127.63 Tracing route to 159.23.127.63 over a maximum of 30 hops 1 <1 ms <1 ms <1 ms 159.23.100.254 2 1 ms <1 ms 2 ms 10.128.248.1 3 3 ms 3 ms 3 ms 159.23.45.12 4 4 ms 4 ms 4 ms 159.23.127.63 Para el tracert anterior, el computador con IP 159.23.127.63 tiene configurada como puerta de enlace la IP 159.23.45.12. 20. La librería WINSOCK permite controlar el flag de PUSH de los segmentos TCP. 21. El uso de redes privadas virtuales (PN) puede ser útil para que un trabajador de una empresa que se encuentra de viaje de negocios acceda a los recursos de la red privada de su empresa desde el lugar donde se encuentre. 22. Para que un computador dentro de una red privada que se conecta a Internet a través de NAT pueda ofrecer a otros nodos de Internet un servidor de páginas web, basta con arrancar en dicho computador una aplicación que actúe como servidor (p. ej. Apache) con el contenido necesario. 2
Part II: problemes (2 problemes, 6 punts total) Començar cada problema en un full diferent! Permutació 1 Problema 1 (2 punts) a) Quan un host envia un segment TCP a un altre host a través d una xarxa IP, explica per què resulta tan difícil estimar el temps que trigarà la confirmació (ACK) del segment en tornar. (0,5 punts) b) Explica per què amb TCP és molt més fàcil produir congestió en una xarxa que desfer-la. (0,5 punts) c) Descriu almenys 3 elements d una implementació de TCP que poden afectar la congestió d una xarxa, i explica breument com cada un d aquests elements afecta la congestió. (0,5 punts) d) Quina seria la millor estratègia de confirmació de segments TCP d un client HTTP: piggybacking o confirmació individual? Explica per què. (0,5 punts) Problema 2 (4 punts) En una màquina realitzem una captura amb l aplicació Wireshark. a) Mirant els tres primers paquets capturats, raona què està intentant fer el host que té la IP 147.83.30.239 (0,4 punts) b) Raona què està passant en l intercanvi 4. A quina adreça i port va dirigida la petició? (0,4 punts) 3 Continuació en la pàgina següent
Disposem de la següent informació addicional d un ping: Permutació 1 C:\>ping -a 209.85.229.104 Haciendo ping a www.google.es [209.85.229.104] con 32 bytes de datos: Respuesta desde 209.85.229.104: bytes=32 tiempo=43ms TTL=241 Respuesta desde 209.85.229.104: bytes=32 tiempo=43ms TTL=241 Respuesta desde 209.85.229.104: bytes=32 tiempo=43ms TTL=241 Respuesta desde 209.85.229.104: bytes=32 tiempo=44ms TTL=241 Estadísticas de ping para 209.85.229.104: Paquetes: enviados = 4, recibidos = 4, perdidos = 0 (0% perdidos), Tiempos aproximados de ida y vuelta en milisegundos: Mínimo = 43ms, Máximo = 44ms, Media = 43ms i més detalls de l intercanvi 6 de la captura: c) Quin nom de domini o URL li correspon a la màquina amb IP 209.85.229.104? Quina és la màxima quantitat de dades (en bytes) que pot arribar a enviar la màquina amb IP 147.83.30.239 a l'altra dins un segment TCP? (0,4 punts) d) Raona què està passant en els intercanvis 5 a 9 (0,6 punts) Continuació en la pàgina següent 4
A continuació fem exactament les mateixes operacions en una altra màquina i obtenim el següent resultat: Sabent que des d aquesta segona màquina tenim el mateix resultat del ping mostrat anteriorment: e) A quina adreça i port va dirigida la petició del paquet 4? Quines diferències observes en l intercanvi 4 a nivell HTTP respecte de la captura anterior? (0,4 punts) f) Raona per què es poden donar aquestes diferències. (0,7 punts) Continuació en la pàgina següent 5
A continuació facilitem el codi d una aplicació programada amb la llibreria de Berkeley Sockets, que dóna com a resultat el que vèiem a la primera captura: /** application.c **/ #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <netdb.h> #define SERER_PORT 80 #define BU_SIZE 4096 int main(int argc, char **argv) { int c, s, bytes; char buf[bu_size]; struct hostent *h; struct sockaddr_in channel; if (argc!= 2) printf( %s\n, Usage: application server-name ); h = gethostbyname(argv[1]); if(!h) printf( %s\n, gethostbyname failed ); s = socket(p_inet, SOCK_STREAM, IPPROTO_TCP); if(s < 0) printf( %s\n, socket ); memset(&channel, 0, sizeof(channel)); channel.sin_family = A_INET; memcpy(&channel.sin addr.s addr, h->h addr, a->h length); channel.sin_port = htons(serer_port); c = connect(s,(struct sockaddr *)&channel, sizeof(channel)); if (c < 0) printf( %s\n, connect failed ); char request[bu_size]; sprintf(request,"get / HTTP/1.1\r\nHost: %s\r\n\r\n", argv[1]); write(s, request, strlen(request)); while(1){ bytes = read(s, buf, BU_SIZE); if (bytes <= 0) exit(0); write(1, buf, bytes); /*escriure per sortida estàndar*/ } } close(s); return 0; g) Què espera rebre aquesta aplicació com a argument? Per a què el fa servir? (0,4 punts) h) Què modificaries en el codi perquè donés com a resultat el que es mostra a la segona captura? (Nota: si ho consideres necessari, pots definir nous arguments d entrada del main). (0,7 punts) -------------------------------------- i d examen --------------------------------------------- 6
Examen Introducció a les Xarxes d Ordinadors - 2008-2009 assercions Nom i cognoms: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 7