Redes de ordenadores

Curso 2001/2002

Profesor: Daniel Morató Osés

[Teoría] [Prácticas] [Laboratorio]

Prácticas:

Bibliografía:

Ejercicios (algunos del año pasado) y anotaciones:

  1. Nota: En el laboratorio hay dos máquinas (tlm71 y tlm72) que emplean encapsulado IEEE 802. Dichas máquinas se están enviando paquetes del protocolo ICMP, por lo que deberín encontrarse en la red paquetes con cabecera 802.3, seguida de 802.2 LLC/SNAP, seguida de IP, seguida de ICMP. La librería libeasydecod.a de la Práctica 1 debe saber decodificar ese tipo de tramas. El ejemplo expuesto implicaría llamar a las funciones apuntadas por las variables func_esETH, func_esIP y func_esICMP
  2. En las máquinas de la maqueta, dada la configuración de subredes y protocolo de enrutamiento en qué situación nos encontramos? Redes classful? Subnetting? Un reparto actual con requerimientos de soporte CIDR en los routers? Por qué y qué implicaciones tiene?
  3. Las máquinas del laboratorio, en la sección de alumnos, pertenecen a la subred 1.1.1/24. Qué tipo de direccionamiento se está empleando? Qué implicaciones tiene?
  4. Supongamos una organización a la que se ha asignado el espacio de direcciones 193.1.1.0/24. Esta organización desea tener emplear Subnetting y formar 5 subredes. La red más grande debe soportar el direccionamiento de 25 hosts. Diseñe una posible solución de direccionamiento. Cuál es la dirección de cada red y la dirección de broadcast? Cuál es la máscara que se va emplear? Qué ruta/s anunciará el router conectado al exterior? Asigne direcciones IP a cada interfaz del router
  5. Partiendo del programa de la Práctica 2 modifíquelo para que calcule el tráfico entrante y saliente de cada máquina. Cuáles son las máquinas que más tráfico generan? Se ve desde cualquier máquina de la red 1.1.1/24 el tráfico generado por cualquier otra de esa red?
  6. Partiendo del programa de la Práctica 3 estudie el proceso X={Xi:0 < i <n} donde Xi son los bytes en el segmento en cada intervalo consecutivo de t segundos de anchura. Para ello tome una realización del proceso 'larga'. Cómo es este proceso? Constante? Hay ráfagas? Si es así cómo son? Estudie media, varianza, coeficiente de variació, distribución de la marginal del proceso, correlación, etc . Se puede modelar con algún proceso que conozca?
  7. Nota: Está accesible la página del manual para el comando routed(8)
  8. Supongamos que modificamos el nivel IP de todos los hosts de la red 1.1.1/24 para que éste encripte los datos de los paquetes IP antes de enviarlos. Para ello emplea una clave que conocen todos las máquinas de esa red. En la recepción desencriptan los datos antes de pasárselos al nivel correspondiente. Es necesario algún cambio en los niveles de transporte? Y en ICMP? Qué sucedería si el host 1.1.1.11 envía ahora un paquete al host 10.1.8.251?
  9. En la maqueta: RouterA envía un paquete. Qué direcciones MAC origen y destino pone si el paquete tiene como IP origen 1.1.1.11 y como IP destino 10.1.5.1? Y si el destino es 10.1.7.1? Y si es 10.1.4.253?
  10. En la maqueta: la máquina tlm11.net.tlm.unavarra.es tiene un paquete IP para mandar a la dirección IP 10.1.11.1 pero esa máquina está apagada. Qué sucederá? Tras responder a la pregunta compruébelo mandando un paquete IP a la dirección 10.1.11.2 (no existe tal máquina así que es como si estuviera apagada) y observe con tcpdump el resultado.
  11. Escriba el rango de direcciones IP que corresponden a la red 130.206.160.0 con máscara 255.255.240.0
  12. Siendo la eficiencia de transmisión de un protocolo igual a la longitud del campo de datos de su PDU dividida por la longitud total de la misma dibuje la eficiencia de transmisión de IP frente a la longitud del campo de datos suponiendo el nivel de enlace Ethernet II.
  13. Un paquete IP atraviesa varios routers hasta llegar al destino. Todas las redes son Ethernet. En qué segmento la dirección MAC destino y la IP destino son iguales?
  14. Enumere todas las rutas asimétricas entre pcs del labo+maqueta
  15. En la maqueta: supongamos que en la maqueta añadimos las siguientes rutas (columnas tal y como las sacaría /sbin/route -n):
    A RouterA: 0.0.0.0 10.1.1.253 0.0.0.0 UG 0 0 0 eth1
    A RouterB: 0.0.0.0 10.1.3.254 0.0.0.0 UG 0 0 0 ppp0
    A RouterC: 0.0.0.0 10.1.2.254 0.0.0.0 UG 0 0 0 eth0
    Describa lo que sucederá si desde el host 1.1.1.11 se hace un 'ping' al 10.1.21.1
  16. En la maqueta: si desde el host tlm61 hacemos un 'ping' al 10.1.7.1 la ruta que se sigue pasa por RouterG, RouterA y RouterD. Este camino es más largo que ir directamente a RouterA y de él a RouterD. Por qué no se sigue ese camino? Qué habría que modificar para que se siguiera ese camino? Suponga que solo puede modificar (a nivel de software) la máquina tlm61. Después suponga que en vez de tlm61 la única que puede modificar es RouterG.

  17.   Supongamos una empresa con la topología de red representada en la figura de la izquierda. En la Red A se esperan conectar 213 hosts, en la Red B 13, en la Red C 2, en la Red D 12 y en la Red E ninguno. Estas cifras no cuentan a los interfaces de los routers. Se le asigna a esta empresa el espacio de direcciones 21.143.188/23.
      Suponiendo que todos los routers soportan CIDR cree las subredes oportunas, haga el reparto, asigne direcciones y máscaras a los interfaces de los routers, especifique los rangos de direcciones disponibles y las direcciones de broadcast de cada red y la configuración de las tablas de los routers.

  18.   Supongamos una empresa con la topología de red representada en la figura de la izquierda. En la Red A no se esperan conectar ningún host, en la Red B 20, en la Red C 2400, en la Red D 3200, en la Red E 15 y en la Red F 4. Estas cifras no cuentan a los interfaces de los routers. Se le asigna a esta empresa el espacio de direcciones 145.2/16.
      Suponiendo que todos los routers soportan CIDR cree las subredes oportunas, haga el reparto, asigne direcciones y máscaras a los interfaces de los routers, especifique los rangos de direcciones disponibles y las direcciones de broadcast de cada red y la configuración de las tablas de los routers..
      Suponiendo que los routers no soportan CIDR pero sí Subnetting haga de nuevo el reparto y configuración.
      Suponga finalmente que R2 no soporta CIDR pero los demás routers (y hosts) sí.
  19. Nota: En el empleo de la librería sockpromis basta con llamar una vez a la funcion sp_new_sock() para hacer cuantas llamadas a sp_recv() como se desee.
  20. En la maqueta: supongamos que tlm11 envía un paquete ICMP echo request con la IP destino de tlm12 pero la dirección MAC destino de broadcast de la Ethernet. Cuántas respuestas se recibirán?
  21. En la maqueta: supongamos que tlm11 envía un paquete UDP al servicio echo (suponiendo que estuviera activado en todas las máquinas del laboratorio) con la IP destino de tlm12 pero con la dirección MAC destino de broadcast de la Ethernet. Cuántas respuestas se recibirán?
    Nota: El funcionamiento del servicio de echo es responder a ese datagrama con otro con el mismo contenido (RFC 862)
  22. En la maqueta: desde el tlm61 ejecutamos un traceroute con el siguiente resultado:
    [daniel@tlm61 daniel]$ /usr/sbin/traceroute 10.1.1.253
    traceroute to 10.1.1.253 (10.1.1.253), 30 hops max, 38 byte packets
     1  tlm3 (1.1.1.3)  1.047 ms  0.491 ms  0.489 ms
     2  tlm1 (1.1.1.1)  153.462 ms  145.815 ms  149.403 ms
     3  RouterBred1.maqueta.tlm.unavarra.es (10.1.1.253)  152.593 ms  152.915 ms  149.483 ms
    
    Por qué en la línea 2 se indica la IP 1.1.1.1?
  23. En la maqueta: intente provocar fragmentación con segmentos de una conexión TCP
  24. Es capaz de crear un programa que consiga que un socket TCP creado por inetd esté durante un minuto en el estado FIN_WAIT_2 ? (12/11/2001)
  25. Es capaz de crear un programa que tena un socket UDP durante un minuto en el estado CLOSE_WAIT ? (12/11/2001)
  26. En los linux del laboratorio qué valor de MSL se está empleando? (12/11/2001)
  27. En la maqueta: cuál es el retardo extremo a extremo máximo, en ausencia de carga, entre dos máquinas del labo+maqueta? Cómo depende de la longitud del paquete? (12/11/2001)
  28. Comente los efectos de cambiar la MTU del enlace PPP entre RouterG y RouterA de los valores actuales a subirle uno de ellos a 1500 bytes o los dos a 1500 bytes. Estudie el efecto según el/los enlaces de baja/alta MTU y según la aplicación sea de tipo transferencia masiva (FTP-data) o interactiva (Telnet) (12/11/2001)
  29. Sea una conexión TCP en la que el ISN en el sentido A->B es ISNab y en el sentido B->A es ISNba. Suponiendo que la conexión se cierra con normalidad mediante segmentos de FIN, cuál es el valor mínimo que puede tener el último número de confirmación que se envíe en cada sentido? Y el número máximo? (12/11/2001)
  30. Es capaz de conseguir que un extremo de una conexión TCP se encuentre en el estado ESTABLISHED y el otro en el estado FIN_WAIT_1 durante unos segundos? (13/11/2001)
  31. Es capaz de conseguir que un extremo de una conexión TCP se encuentre en el estado LAST_ACK y el otro en el estado FIN_WAIT_2 durante unos segundos? (13/11/2001)
  32. Es capaz de conseguir que los dos extremos de una conexión acaben en el estado TIME_WAIT? (13/11/2001)
  33. Cuándo se empiezan a aceptar conexiones por un socket TCP, cuando hacemos la llamada bind(), al hacer el listen() o al hacer el accept() ? (15/11/2001)
  34. Cuándo empieza a recoger el kernel los datagramas dirigidos a un puerto UDP en vez de mandar un error ICMP de puerto destino inalcanzable, cuando hacemos la llamada bind() o al hacer la llamada recvfrom() ? (15/11/2001)
  35. Repase las prácticas de la asignatura Arquitectura de Computadores del curso 2000/01. A qué le recuerdan las "entidades de comunicación"? Y los "puntos de acceso"? Y el modo de empleo de la zona de memoria compartida entre la entidad de comunicación y una aplicación? Y las funciones de libcommarq.a? Intente crear un programa de nombre lanzadornet que permita poner en funcionamiento la topología propuesta en la práctica pero con cada entidad de comunicación ejecutándose en una máquina diferente. (15/11/2001)
  36. Implemente un cliente de TFTP. Tiene un servidor corriendo en la máquina lucas a la que puede solicitar el fichero texto.txt. (19/11/2001)
  37. Supongamos las dos siguientes funciones:
    int func_snd(char *dir, short puerto)
    {
    	int	mysocket;
    	struct sockaddr_in	dirsock;
    	struct hostent	*elhost;
    	
    	if ((mysocket=socket(PF_INET,SOCK_DGRAM,0))==-1)
    		return 1;
    
    	dirsock.sin_family=AF_INET;
    	elhost=gethostbyname(dir);
    	if (elhost==NULL)
    		return 2;
    	dirsock.sin_addr.s_addr=*(unsigned int *)elhost->h_addr_list[0];
    	dirsock.sin_port=htons(puerto);
    		
    	if (sendto(mysocket, "Hola", 5, 0, (struct sockaddr *)&dirsock, sizeof(dirsock))==-1)
    		return 4;
    	if (sendto(mysocket, "Adios", 6, 0, (struct sockaddr *)&dirsock, sizeof(dirsock))==-1)
    		return 8;
    
    	close(mysocket);
    	return 0;
    }
    
    int func_rcv(unsigned short puerto)
    {
    	int	mysocket,addlen;
    	struct sockaddr_in	dirsock;
    	char	aux[10];
    	int	err=0;
    	
    	if ((mysocket=socket(PF_INET,SOCK_DGRAM,0))==-1)
    		return 1;
    
    	dirsock.sin_family=AF_INET;
    	dirsock.sin_addr.s_addr=INADDR_ANY;
    	dirsock.sin_port=htons(puerto);
    		
    	if (bind(mysocket,(struct sockaddr *)&dirsock,sizeof(struct sockaddr_in)))
    		return 2;
    
    	addlen=sizeof(dirsock);
    	if (recvfrom(mysocket,aux,10,0,(struct sockaddr *)&dirsock,&addlen)==-1)
    		return 4;
    	if (strcmp(aux,"Hola"))
    		err=8;
    		
    	if (recvfrom(mysocket,aux,10,0,(struct sockaddr *)&dirsock,&addlen)==-1){
    		err|=16;
    		return err;
    	}
    	if (strcmp(aux,"Adios"))
    		err|=32;
    	
    	return err;
    }
    
    Un programa emplea una de ellas de la forma func_rcv(valor_de_puerto) y otro programa la otra func_snd(nombre_de_la_otra_maquina, valor_de_puerto). Cada función puede devolver diferentes valores de error. Explique qué situaciones deben darse para que se devuelva cada valor posible. Hay alguno imposible? (27/11/2001)
  38. Supongamos las dos siguientes funciones:
    int func_snd(char *dir, short puerto)
    {
    	int	mysocket;
    	struct sockaddr_in	dirsock;
    	struct hostent	*elhost;
    	
    	if ((mysocket=socket(PF_INET,SOCK_STREAM,0))==-1)
    		return 1;
    
    	dirsock.sin_family=AF_INET;
    	elhost=gethostbyname(dir);
    	if (elhost==NULL)
    		return 2;
    	dirsock.sin_addr.s_addr=*(unsigned int *)elhost->h_addr_list[0];
    	dirsock.sin_port=htons(puerto);
    		
    	if (connect(mysocket,(struct sockaddr *)&dirsock,sizeof(dirsock))<0)
    		return 4;
    	
    	if (write(mysocket,"Hola", 5)!=5)
    		return 8;
    	if (write(mysocket,"Adios", 6)!=6)
    		return 16;
    		
    	close(mysocket);
    	return 0;
    }
    
    int func_rcv(unsigned short puerto)
    {
    	int	mysocket,susocket,addlen;
    	struct sockaddr_in	dirsock;
    	char	aux[10];
    	int	err=0, tam;
    	
    	if ((mysocket=socket(PF_INET,SOCK_STREAM,0))==-1)
    		return 1;
    
    	dirsock.sin_family=AF_INET;
    	dirsock.sin_addr.s_addr=INADDR_ANY;
    	dirsock.sin_port=htons(puerto);
    		
    	if (bind(mysocket,(struct sockaddr *)&dirsock,sizeof(struct sockaddr_in)))
    		return 2;
    	if (listen(mysocket,5))
    		return 4;
    	addlen=sizeof(dirsock);
    	if ((susocket=accept(mysocket,(struct sockaddr *)&dirsock,&addlen))<0)
    		return 8;
    
    	if ((tam=read(susocket, aux, 10))!=5)
    		err|=16;
    	if (strcmp(aux,"Hola"))
    		err|=32;
    		
    	if ((tam=read(susocket, aux, 10))!=6)
    		err|=64;
    	if (strcmp(aux,"Adios"))
    		err|=128;
    	
    	return err;
    }
    
    Un programa emplea una de ellas de la forma func_rcv(valor_de_puerto) y otro programa la otra func_snd(nombre_de_la_otra_maquina, valor_de_puerto). Cada función puede devolver diferentes valores de error. Explique qué situaciones deben darse para que se devuelva cada valor posible. Hay alguno imposible? Compárelo con la situación en el ejercicio anterior. (27/11/2001)
  39. Señale los campos de la cabecera IP del siguiente paquete IPv4:
                             4510 0034 9e2a 4000 4006 55b5 82ce a060
                             82ce a0d7 02f0 0016 9ad8 d531 fd6a 3a53
                             8010 76c8 970c 0000 0101 080a 00a6 5396
                             1c78 0691
    
    Cuál es el protocolo que transporta este paquete IP? Puede identificar los campos de ese protocolo? (27/11/2001)
  40. Señale los campos de la cabecera IP del siguiente paquete IPv4:
                             4520 0182 963d 4000 6606 39a6 a672 795a
                             82ce a0d7 042f 0050 017c 67ef c36f a470
                             5018 1f2c 4e07 0000 4745 5420 2f61 7369
                             676e 6174 7572 6173 2f62 692f 6269 3938
                             5f39 392f 6269 3038 2f69 6d61 6765 732f
                             616e 696d 616c 6573 2f43 4152 4131 2e47
                             4946 2048 5454 502f 312e 310d 0a41 6363
                             6570 743a 202a 2f2a 0d0a 5265 6665 7265
                             723a 2068 7474 703a 2f2f 7777 772e 746c
                             6d2e 756e 6176 6172 7261 2e65 732f 6173
                             6967 6e61 7475 7261 732f 6269 2f62 6939
                             385f 3939 2f62 6930 382f 6874 6d2f 616e
                             696d 616c 6573 2f43 4152 4143 4f4c 2e48
                             544d 0d0a 4163 6365 7074 2d4c 616e 6775
                             6167 653a 2065 730d 0a41 6363 6570 742d
                             456e 636f 6469 6e67 3a20 677a 6970 2c20
                             6465 666c 6174 650d 0a55 7365 722d 4167
                             656e 743a 204d 6f7a 696c 6c61 2f34 2e30
                             2028 636f 6d70 6174 6962 6c65 3b20 4d53
                             4945 2035 2e30 3b20 5769 6e64 6f77 7320
                             3938 3b20 4469 6745 7874 290d 0a48 6f73
                             743a 2077 7777 2e74 6c6d 2e75 6e61 7661
                             7272 612e 6573 0d0a 436f 6e6e 6563 7469
                             6f6e 3a20 4b65 6570 2d41 6c69 7665 0d0a
                             0d0a
    
    Cuál es el protocolo que transporta este paquete IP? Puede identificar los campos de ese protocolo? Y el servicio que transporta ese nuevo protocolo? Continúe la decodificación hasta donde sea capaz. (27/11/2001)
  41. Es capaz de escribir un par de programas que se comuniquen y provocar un anuncio de tamaño de ventana 0 en un sentido? Cómo? Y que el anuncio de ventana 0 sea en los dos sentidos? Sería capaz de hacer un solo programa, que el otro extremo sea el servidor de telnet y conseguir un anuncio de ventana 0, en cualquier sentido? (27/11/2001)
  42. Cuando se anuncia ventana 0 el extremo que ha recibido ese anuncio empieza a enviar segmentos TCP para comprobar si se ha abierto la ventana (window probes); cada cuánto tiempo? Haga una gráfica con el eje-x el número de segmento de sondeo y el eje-y el tiempo entre él y anterior segmento enviado. (27/11/2001)
  43. En qué se diferencia la configuración del interfaz de red de un host con dirección IP en una red de clase B de la configuración de un host con IP en una red de clase A con Subnetting siendo el identificador de subred (Subnetwork ID) de 8 bits? (4/12/2001)
  44. Partiendo de los esquemas de red de los ejercicios 17 y 18 y suponiendo que no existen los enlaces etiquetados como "Enlace exterior" estudie cómo se irán poblando las tablas de rutas de cada router si todos ellos corren un demonio de RIP-1. Al estabilizarse el proceso cómo quedará la tabla de cada router? (4/12/2001)
  45. La llamada al sistema int close(int) permite cerrar un descriptor de fichero. Se puede emplear para cerrar las conexiones TCP dado que vienen referidas por descriptores. Sin embargo, existe otra llamada con mayor flexibilidad, la función int shutdown(int,int). Lea la sección del manual que hace referencia a esta llamada (SHUTDOWN(2)). Estudie con un programa simple y el uso de la herramienta tcpdump_ro qué sucede al hacer un close() sobre el descriptor de una conexión o al hacer shutdown() con sus diferentes argumentos posibles. Qué sucede si hacemos shutdown() con el segundo argumento valiendo SHUT_RD y después llegan datos a ese extremo de la conexión? (4/12/2001)
  46. Creamos el siguiente programa:

    #include <stdio.h>
    #include <netdb.h>
    
    main(int argc, char *argv[])
    {
    	if (argc>1) {
    		printf("Resolviendo %s ...\n", argv[1]);
    		if (gethostbyname(argv[1])!=NULL)
    			printf("Resuelto\n");
    		else printf("Error!\n");
    	}
    }
    

    Lo guardamos como prog.c, lo compilamos y lo ejecutamos en la máquina tlm11 obteniendo el siguiente resultado:

    % gcc prog.c -o progdns
    % ./progdns dominiofalso.com
    Resolviendo dominiofalso.com ...
    Error!
    
    Antes de ejecutar el programa ejecutamos el comando netstat con el argumento -a. Entre la aparición del texto Resolviendo dominiofalso.com ... y de Error! transcurre suficiente tiempo para que en otro terminal ejecutemos en esa misma máquina de nuevo un netstat -a. Entre la primer ejecución de comando y la segunda observamos una única diferencia, en la segunda aparece una nueva línea, la siguiente:

    udp        0        0 *:1467        *:*
    
    Qué está sucediendo? Qué significado tiene esa línea? Por qué se crea, para qué, por quién? Al terminar la ejecución del programa hacemos de nuevo netstat -a y ya no aparece, por qué? (12/12/2001)
    Estas páginas pueden sufrir modificaciones frecuentes
    Última actualización 19:31 12/12/2001