Departamento de Física y
Arquitectura de Computadores
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 RTTestimado TimeOut RTTmedido
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 = β*RTTestimado
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:_______________________________________________
Departamento de Física y
Arquitectura de Computadores
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.
20
18
16
Segmentos (MSS)
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
Departamento de Física y
Arquitectura de Computadores
20
18
16
Segmentos (MSS)
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
Departamento de Física y
Arquitectura de Computadores
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
Esclavo-1 Servidor
Maestro Esclavo.n M aestro Esclavo-1
Aplicación Esclavo-1 App. Level
Esclavo.2 Esclavo-n
Esclavo.1 Aplicación
S.O. Socket BC Sistem a Msock Msock Ssock S.O. Level
Msock Ssock Ssock Ssock Operativo UDP TCP
a) b) c)
Fork
Servidor Servidor
M aestro Esclavo.n
Esclavo.1 Aplicación Aplicación
M s.1 M s.n Es.1 Es.k S.O.
M s.1 M s.2 M s.n
Ms.1 M s.2 Ms.n Es.1 Es.k
S.O.
d) e) f)
Diagrama Tipo de servidor
a)
b)
c)
d)
e)
f)
4
Departamento de Física y
Arquitectura de Computadores
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 [Link]...
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
Departamento de Física y
Arquitectura de Computadores
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
Departamento de Física y
Arquitectura de Computadores
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 [Link] 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
Departamento de Física y
Arquitectura de Computadores
(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
Departamento de Física y
Arquitectura de Computadores
(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
Departamento de Física y
Arquitectura de Computadores
(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
Departamento de Física y
Arquitectura de Computadores
Anexo A: Formatos de cabecera de protocolos TCP/IP
IP ARP
0 4 8 16 19 24 31 0 8 16 31
vers longc tipo servicio longitud total tipo de hardware tipo de protocolo
identificación flags desplaz. fragmento lon. dir. física lon. dir. prot. operación
cabecera
tiempo vida protocolo checksum de la cabecera dirección física fuente (octetos 0-3)
dirección IP fuente dir. fís. fuente (octetos 4-5) dir. IP fuente (octetos 0-1)
dirección IP destino direc. IP fuente (octetos 2-3) dir. física 2 (otetos 0-1)
opciones IP (variable) relleno dirección física 2 (octetos 2-5)
DATOS dirección IP 2 (octetos 0 -3)
ICMP (Echo request/Echo reply) ICMP (destino inalcanzable)
tipo (8 o 0) código (0) checksum tipo (3) código (0-12) checksum
identificador número de secuencia no se emplea (debe ser cero)
datos opcionales
cabecera IP + 64 primeros bits del datagrama
...
TCP 5 4 3 2 1 0
Campo código: URG-ACK-PSH-RST-SYN-FIN UDP
0 4 10 16 24 31 0 16 31
Puerto TCP origen Puerto TCP destino Puerto origen UDP Puerto destino UDP
Número de secuencia
Longitud mensaje Checksum
cabecera
Número de reconocimiento
longc reservado código ventana
DATOS
checksum puntero a datos urgentes
opciones (si las hay) relleno
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
Departamento de Física y
Arquitectura de Computadores
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