ARQUITECTURA DE REDES Y SERVICIOS DE TELECOMUNICACIÓN Junio 2014 Teoría: 1) Qué sucedería si por error recibiera UDP un datagrama UDP que originalmente iba destinado a otra máquina?. (0,5 ptos) 2) Asumiendo que la ventana del receptor TCP es siempre 1 (stop&wait) y suponiendo alfa=0,4 y beta=2, simular la transmisión de los segmentos 1, 2, 3, 4 y 5 donde el segmento 3 requiere dos retransmisiones. Rellenar las celdas de la tabla suponiendo que el valor inicial de RTT estimado es 5 segundos. (0,5 ptos) Seq RTT estimado TimeOut RTT medido 1 5 seg. 2*5= 10 1 2 0,7 3 TimeOut 3 TimeOut 3 0,001 4 0,35 5 0,44 Nota 1: En el envío del paquete 4 se ha tomado como RTTestimado el estimado para el paquete 3. Nota 2: Supóngase que el Timeout se calcula con la siguiente expresión: TOut = β*rtt estimado 3) En una LAN con un RTT estimado de 1 ms, indica la velocidad mínima de transmisión que debe alcanzarse en esta red para que se logre una utilización del 100% de su capacidad con una única conexión TCP. (0.5 ptos) NOMBRE Y APELLIDOS:
4) Supongamos que abrimos una conexión TCP con un servidor remoto para transferir un fichero de 39,5 KBytes. Una vez establecida la conexión, los parámetros iniciales de la misma son los siguientes: (1 pto) Parámetro Valor Descripción MSS 500 Tamaño máximo de segmento (en bytes) CWND 500 Tamaño de la ventana de congestión (en bytes) SSTHRES 8000 Umbral (Slow Start Congestion Avoidance) en bytes RCWND* 10000 Tamaño de la ventana de recepción (en bytes) RTT 500 Tiempo de ida y vuelta (roundtrip) en milisegundos TIMEOUT 2*RTT Tiempo límite del temporizador (*) Tamaño de la ventana de recepción que el otro extremo nos ha indicado (a) Suponiendo que (1) el RTT es constante a lo largo de la conexión y (2) no se pierde ningún segmento, dibuja en un gráfico la evolución de los parámetros CWND, SSTHRES. Segmentos (MSS) 20 18 16 14 12 10 8 6 4 2 1 2 3 4 5 6 7 8 9 10 Tiempo (segundos) (b) Lo mismo que el apartado (a) pero suponiendo que (1) se producen dos eventos de pérdida (se pierde el primer segmento enviado) en los RTTs número 5 y 10 (2,5 y 5 segundos respectivamente) y (2) en el instante 5,5 se recibe una indicación de ventana de 3000 bytes. 2
Segmentos (MSS) 20 18 16 14 12 10 8 6 4 2 1 2 3 4 5 6 7 8 9 10 Tiempo (segundos) (c) Calcula la velocidad de transferencia (bps) que observa el usuario en ambos 5) Al utilizar el interfaz de sockets para implementar un servidor secuencial TCP, cuál es la finalidad de la cola creada mediante la llamada listen? Tiene sentido utilizar esta cola cuando se está implementando un servidor concurrente TCP?. Justifica las respuestas. (0.5 ptos) 3
6) Suponiendo que tenemos un socket conectado de tipo SOCK_STREAM, indique lo que tendremos que hacer para (1) enviar un mensaje como datos urgentes TCP, y (2) utilizar la función PUSH de TCP para el envío de mensajes a través de una conexión. Acompañar las respuestas con ejemplos de uso (pseudo-código). (0.5 ptos) 7) A qué tipo de servidor corresponde cada uno de los siguientes esquemas?(0.5 ptos) Fork Maestro Esclavo.2 Esclavo.1 Esclavo.n Aplicación Maestro Esclavo-1 Esclavo-1 Esclavo-1 Esclavo-n Aplicación Servidor App. Level Msock Ssock Ssock Ssock S.O. Socket BC Sistema Operativo a) b) c) Msock UDP Msock TCP Ssock S.O. Level Maestro Fork Esclavo.1 Esclavo.n Aplicación Servidor Servidor Aplicación Ms.1 Ms.n Es.1 Es.k Ms.1 Ms.2 Ms.n Ms.1 Ms.2 Ms.n Es.1 Es.k S.O. d) e) f) S.O. Diagrama a) b) c) d) e) f) Tipo de servidor 4
8) Cita tres circunstancias en las cuales sea preferible un servidor sin conexión a un servidor con conexión. (0.5 ptos) 9) A continuación se muestra la ejecución del siguiente comando: (0.5 ptos) arss70@obelix:~$ telnet localhost 37 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. È*ýConnection closed by foreign host. arss70@obelix:~$ a) Para qué se ha usado el comando? b) Qué significado tienen los caracteres È*ý? 10) Tanto en correo electrónico como en NEWS, el final de un mensaje se delimita con la secuencia <CR><LF><.><CR><LF>. Qué ocurre si dentro del texto del mensaje tenemos una línea de texto que sólo tiene un punto decimal (carácter <.>) en la primera columna? Cómo procederíamos en este caso? (0,5 ptos) 5
11) Se dispone de un servidor FTP del que queremos bajarnos un fichero que está públicamente disponible (acceso anónimo), Podríamos descargar el fichero utilizando un cliente TELNET? Justifica la respuesta. (0.5 ptos) 12) Sea una fuente de 5 símbolos con sus probabilidades de aparición A(0.8), B(0.05), C(0.05), D(0.05) y E(0.05). Indicar la secuencia de bits resultante al comprimir la secuencia AAA con Huffman y una codificación aritmética. (0.5 ptos) 13) Cuál es el objetivo de una función hash?, indica al menos una aplicación de seguridad en la que se utiliza. (0.5 ptos) 6
Prácticas: (1) En la práctica 1 se analizó el comportamiento del protocolo TCP a través del analizador de protocolos Wireshark. Se utilizó el fichero pr.pcap que contiene una captura de una transferencia FTP de un archivo pdf de 3.5 MB aproximadamente. En la figura se muestra la evolución de los números de secuencia. cuál ha sido la razón del corte producido entre los instantes 0.5 y 0.6? (0.75 ptos) 7
(2) En la práctica sobre el control de congestión en TCP obtenemos una gráfica como la que se muestra abajo. Qué representan cada una de las series?, Por qué tienen forma de escalera?, A qué se debe la pequeña diferencia entre las dos series?. Justifica las respuestas. (0.75 ptos) 8
(3) Detecta y corrige los fallos que encuentres en la siguiente implementación del servidor de echo estándar concurrente con conexión. (0.75 ptos) #include <netdb.h> #include <stdio.h> #include <string.h> #define LINELEN 80 #define QLEN 5 char *service = "37"; // El puerto bien conocido de echo es 7 void main (int argc, char *argv[]) { char buff[linelen]; struct sockaddr_in serv_addr, cli_addr; int ms, ss, cli_size, nbuf; struct servent *pse,*ppe; // struct protoent *ppe; switch (argc) { case 2: service = argv[1]; case 1: break; default: fprintf (stderr, "Uso: %s [port]\n",argv[0]); exit (1); } memset((char *)&serv_addr,0,sizeof(serv_addr)); serv_addr.sin_family= AF_INET; serv_addr.sin_addr.s_addr=inaddr_any; if (pse=getservbyname(service,"tcp")) serv_addr.sin_port=pse->s_port; else if ((serv_addr.sin_port=htons(atoi(service)))==0) errexit("servicio desconocido\n"); if ((ppe=getprotobyname("tcp"))==0) errexit("no encuentro el protocolo tcp\n"); ms=socket(af_inet,sock_stream,ppe->p_proto); if (bind(ms,&serv_addr,sizeof(serv_addr))<0) errexit("no puedo instalar el servidor\n"); } while(1) { if((ss=accept(ms,&cli_addr,&cli_size))<0) errexit("error al aceptar nuevos clientes\n"); if (fork()) close(ms); else { close(ss); while ((nbuf=read(ms,buff,linelen))>0) write(ms,buff,sizeof(buff)); close(ms); exit(0); } } 9
(4) En la práctica cuatro se utilizó el módulo ACE (Application Characterization Environment) de OPNET IT Gurú para estudiar y analizar el rendimiento de las aplicaciones de red. La figura de abajo representa la información que una de las herramientas ACE ha suministrado acerca del rendimiento de una transferencia FTP en un escenario con pérdidas. Podrías indicar las conclusiones que se obtienen de esta gráfica? (0.75 ptos) 10
Anexo A: Formatos de cabecera de protocolos TCP/IP cabecera IP 0 4 8 16 19 24 31 vers longc tipo servicio longitud total identificación flags desplaz. fragmento tiempo vida protocolo checksum de la cabecera dirección IP fuente dirección IP destino opciones IP (variable) relleno DATOS ICMP (Echo request/echo reply) ARP 0 8 16 31 tipo de hardware tipo de protocolo lon. dir. física lon. dir. prot. operación dirección física fuente (octetos 0-3) dir. fís. fuente (octetos 4-5) direc. IP fuente (octetos 2-3) dir. IP fuente (octetos 0-1) dir. física 2 (otetos 0-1) dirección física 2 (octetos 2-5) dirección IP 2 (octetos 0-3) ICMP (destino inalcanzable) cabecera tipo (8 o 0) código (0) checksum identificador datos opcionales... número de secuencia TCP 5 4 3 2 1 0 Campo código: URG-ACK-PSH-RST-SYN-FIN 0 4 10 16 24 31 Puerto TCP origen checksum Número de secuencia Puerto TCP destino Número de reconocimiento longc reservado código ventana opciones (si las hay) DATOS puntero a datos urgentes relleno tipo (3) código (0-12) checksum no se emplea (debe ser cero) cabecera IP + 64 primeros bits del datagrama UDP 0 16 31 Puerto origen UDP Puerto destino UDP Longitud mensaje Checksum DATOS Puertos bien conocidos Identificadores de protocolos echo 7/tcp/udp TCP 0x06 daytime 13/tcp/udp UDP 0x11 chargen 19/tcp/udp ttytst source ICMP 0x01 ftp-data 20/tcp Tipos de Tramas ftp 21/tcp IP 0x0800 telnet 23/tcp ARP 0x0806 smtp 25/tcp mail RARP 0x8035 domain 53/tcp/udp nameserver Novel 0x8137 tftp 69/udp Campo Flags del paquete IP finger 79/tcp Bit 0 N/A (Not Assigned) www 80/tcp Bit 1 DF (Don t Fragment) pop3 110/tcp postoffice Bit 2 MF (More Fragments) nntp 119/tcp usenet news 11
Anexo B: Relación de rutinas y llamadas al sistema /* Definición de una dirección IP */ struct in_addr { u_long s_addr; } /* Definición de una dirección de socket */ struct sockaddr_in { short sin_family; /* familia de direcciones */ u_short sin_port; /* número de puerto */ struct in_addr sin_addr; /* dirección IP */ char sin_zero[8]; /* buffer de relleno. Inicializado a ceros */ } /* Declaración de funciones que podemos utilizar */ extern errexit (char *formato, int error); extern int strcmp (char *dest, char *orig); extern void bcopy (char *origen, char *destino, int nbytes); extern void bzero (char *data, int nbytes); extern char * fgets (char * buffer, int size, int fd); extern int socket (int af, int type, int protocol); extern int connect (int s, const void *addr, int addrlen); extern int accept (int socket, struct sockaddr *dir_clnt, int *dir_size); extern int bind (int s, struct sockaddr *addr, int addrlen); extern int listen (int s, int qlen); extern int read (int sock, char *buffer, int size); extern int write (int sock, char *buffer, int size); extern int sendto (int sock, char *buffer, int size, int flags, struct sockaddr *to, int addrlen); extern int recvfrom (int sock, char *buffer, int size, int flags, struct sockaddr *to, int *addrlen); extern int close (int sock); extern int shutdown (int sock, int c); extern int select (int nfds, fd_set * rfds, fd_set * wfds, fd_set * excp, struct timeval * timeout); FD_ZERO (fd_set* set); FD_SET (sock, fd_set* set); FD_ISSET (sock, fd_set* set); extern int connecttcp (char *host, char *service); extern int connectudp (char *host, char *service); extern int passivetcp (char *service, int qlen); extern int passiveudp (char *service); extern int fork( ); 12