UNIVERSIDAD DE CUENCA FACULTAD DE INGENIERIA ESCUELA DE INFORMATICA REDES DE COMPUTADORES 1 TEMA: PRÁCTICA SOBRE TCP EMPLEANDO WIRESHARK NOMBRES: Angel Oswaldo Vázquez Patiño NOTA: ___________ INTRODUCCION En este laboratorio se investigará el comportamiento del protocolo TCP. Para ello se analizará una traza de segmentos TCP enviados y recibidos en una transferencia de un archivo de 150 Kb (llamado alice.txt) desde un computador local hasta un servidor remoto. Se estudiará el uso de números de secuencia y reconocimiento (ACK) en TCP para proveer una transferencia de datos confiable, se revisará el funcionamiento del algoritmo de control de congestión denominado “Slow Start and Congestion Avoidance” (inicio lento y evitando colisiones), y se revisará el mecanismo de control de flujo “Receiver-Advertised” (receptor anunciado) de TCP. Se considerará además el establecimiento de la conexión y se investigará el rendimiento (throughput and roundtrip time) de la conexión TCP entre el servidor remoto y el computador local. PROCEDIMIENTO ETAPA 1: Captura de una transferencia TCP entre el computador local y un servidor remoto. Antes de empezar la exploración de TCP, se necesitará emplear Wireshark (http://www.wireshark.org/) para obtener una traza de paquetes de la transferencia TCP de un archivo desde el computador local hasta un servidor remoto. Para ello, se debe acceder a una página Web que permitirá ingresar el nombre de un archivo almacenado en el computador local (alice.txt) y luego transferirlo al servidor Web usando el método HTTP POST. Se emplea el método POST antes que el GET como si se hiciera una transferencia de una gran cantidad de datos desde un computador a otro. Por supuesto, se deberá ejecutar Wireshark durante el tiempo de la transferencia para obtener la traza de los segmentos TCP enviados y recibidos desde el computador local. Siga el resto del procedimiento que se describe a continuación. Paso 1. Ejecute un browser de Internet e ingrese el URL siguiente: http://gaia.cs.umass.edu/ethereal-labs/alice.txt, luego grabe el contenido en un archivo de texto con el nombre de alice.txt en alguna carpeta del computador local. Ver figura 1.
Figura 1. Sitio Web con el contenido del archive alice.txt Paso 2. Digite el siguiente URL en el browser de Internet: http://gaia.cs.umass.edu/ethereal-labs/TCP-ethereal-file1.html. Se debe obtener una pantalla como la siguiente:
Figura 2. Sitio Web con la página para transferir un archivo a un servidor remoto
Paso 3. Emplee el botón “Browse” en el formulario, mostrado en la figura 2, para ingresar el nombre del archivo (con el path completo) almacenado en el computador local y que contiene el documento obtenido en el paso 2.
Paso 4. Ahora ejecute Wireshark y empiece la captura de los paquetes (Capture -> Start) y presione OK en la pantalla de las opciones de captura de paquetes de Wireshark. No es necesario seleccionar ninguna opción en esta pantalla.
Paso 5. Regrese el browser y presione el botón “Upload alice.txt file” (ver figura 2) y proceda a transferir el archivo alice.txt al servidor remoto gaia.cs.umass.edu. Una vez
que el archivo haya sido transferido, se recibirá un mensaje de felicitaciones en la ventana del browser (ver figura 3).
Figura 3. Ventana de felicitación una vez transferido el archivo Paso 6. Detenga el proceso de captura de paquetes en Wireshark. La ventana de Wireshark debería ser semejante a la mostrada a continuación en la figura 4:
Figura 4. Resultado de la captura de paquetes en Wireshark
Si no fuera posible la ejecución de Wireshark en una conexión de red activa, se puede emplear un archivo que contiene las trazas de paquetes capturados previamente 1 . Se puede emplear estas trazas, aun si ha capturado sus propias trazas, con la finalidad de que se facilite la respuesta a las preguntas de la práctica, en las siguientes páginas. ETAPA 2: Una primera mirada a la traza capturada Antes de analizar en detalle el comportamiento de la conexión TCP, es necesario revisar la traza de paquetes: Paso 7. Filtre los paquetes mostrados en la ventana de Wireshark para lo cual se debe ingresar la palabra TCP en la ventana de especificación del filtro, en la parte superior de la ventana mencionada. Lo que se debe observar es una serie de mensajes TCP y HTTP entre el computador local y el servidor gaia.cs.umass.edu. Se debería observar el handshake de 3 vías inicial que contiene un mensaje SYN. Se debería observar un mensaje HTTP POST y una serie de mensajes “HTTP Continuation” que están siendo enviados desde el computador local al servidor gaia.cs.umass.edu. Estos mensajes “HTTP Continuation” son una mecanismo de Wireshark para indicar que existen múltiples segmentos TCP que están siendo utilizados para llevar un solo mensaje HTTP. Se debería también observar segmentos TCP ACK que están siendo retornados desde el servidor remoto hacia el computador local. Responda a las siguientes preguntas, luego de abrir el archivo de paquetes capturados con Wireshark llamado tcpethereal-trace-1. Siempre que sea posible, para responder una pregunta se debería generar un reporte de detalle de un paquete dentro de la traza que se emplea para responder a la pregunta. Se debe adjuntar el detalle en la justificación de la respuesta. Para generar el reporte del paquete, seleccione File -> Print, escoger Selected packet only y seleccione la mínima cantidad de detalle del paquete que se necesita para responder la pregunta. 1. ¿Cuál es la dirección IP y el número de puerto TCP usado por el computador cliente (origen) que está transfiriendo el archivo a gaia.cs.umass.edu? Para responder a esta pregunta, probablemente es más fácil seleccionar un mensaje HTTP y explorar los detalles del paquete TCP empleado para llevar este mensaje HTTP, empleando la ventana de detalles de la cabecera del paquete seleccionado.
1
Descargue el archivo ethereal-traces.zip y extraiga el archivo tcpethereal-trace-1. Esta traza de paquetes fue recopilada ejecutando Wireshark en un computador local, mientras se realizaba el proceso descrito en esta guía. Una vez que se ha descargado la traza mencionada, se puede cargar en Wireshark a través de la opción File/Open y luego seleccionando el archivo de traza mencionado.
El número IP es 189.78.197.227, y el puerto pedido es el puerto 49099. 2. ¿Cuál es la dirección IP de gaia.cs.umass.edu? ¿En qué número de puerto se está enviando y recibiendo los segmentos TCP para esta conexión? Si tiene sus propias trazas de paquetes, responda a la siguiente pregunta: Dirección IP 69.5.88.71 y el puerto que utiliza es el 80. 3. ¿Cuál es la dirección IP y número de puerto TCP empleado por el computador cliente (origen) para transferir el archivo a gaia.cs.umass.edu? El número IP es 172.31.13.75, y el puerto pedido es el puerto 50412. Puesto que esta práctica trata sobre TCP antes que con HTTP, se debe modificar la ventana “Lista de paquetes capturados” de modo que se muestre la información relacionada con los segmentos TCP que contienen los mensajes HTTP, antes que la información de los mensajes HTTP. Para hacer esto, seleccione Analyze -> Enabled Protocols, luego desmarque HTTP y seleccione OK. Se debería presentar en pantalla una ventana similar a la siguiente:
Figura 5. Paquetes TCP filtrados Esto es lo que se estaba buscando: una serie de segmentos TCP enviados desde el computador local hasta gaia.cs.umass.edu. Se empleará la traza de paquetes capturada (y/o el archivo que contiene las trazas de paquetes tcp-ethereal-trace-1) para estudiar el comportamiento de TCP en lo que resta de esta práctica. ETAPA 3. TCP básico Responda a las siguientes preguntas: 4. ¿Cuál es el número de secuencia del segmento TCP SYN que se emplea para iniciar la conexión TCP entre el computador local y gaia.cs.umass.edu? ¿Cuál es la parte del segmento que identifica al segmento como uno de tipo SYN?
El número de secuencia es 0. La parte del segmento que identifica al segmento como tipo SYN son las Flags.
5. ¿Cuál es el número de secuencia del segmento SYN ACK enviado por el servidor gaia.cs.umass.edu al computador local (cliente) en respuesta al SYN? ¿Cuál es el valor del campo ACKnowledgement en el segmento SYN ACK? ¿Cómo determina el servidor gaia.cs.umass.edu ese valor? ¿Cuál es la parte del segmento que identifica el segmento como un segmento SYN ACK?
Numero de secuencia de SYN/ACK: 0 Acknowledgement number: 1 El servidor gaia.cs.umass.edu determina este valor mediante el campo Sequence number de TCP. El campo FLAGS indica que es un segmento SYN ACK La parte que identifica el segmento como un segmento es Flags: 0x12 (SYN, ACK). 6. ¿Cuál es el número de secuencia del segmento TCP que contiene el comando HTTP POST? Note que con el propósito de encontrar el comando POST, se necesitará buscar, en el campo de contenido del paquete en la parte inferior de la ventana de la aplicación, un segmento con un POST dentro del campo DATA.
Número de secuencia: 1
7. Considere el segmento TCP que contiene el HTTP POST como el primer segmento en la conexión TCP. ¿Cuál son los números de secuencia de los primeros seis segmentos en la conexión TCP (incluyendo el segmento que contiene el HTTP POST)? ¿En qué tiempo fue enviado cada segmento? ¿Cuándo fue recibido el ACK de cada segmento?
RTT= 0.9 * RTT anterior + (1‐0.9) * RTT nuevo
Primer paquete (tiempos): ‐ Numero de secuencia: 1
Segundo paquete (tiempos): ‐ Numero de secuencia: 1
Tercer paquete (tiempos): ‐ Numero de secuencia: 801
Cuarto paquete (tiempos): ‐ Numero de secuencia: 801
Quinto paquete (tiempos): ‐ Numero de secuencia: 2261
Sexto paquete (tiempos): ‐ Numero de secuencia: 1
Dada la diferencia entre el envío de cada segmento TCP, y cuando fue recibido su reconocimiento (acknowledgement), ¿cuál es el valor RTT para cada uno de los seis segmentos? ¿Cuál es el valor estimado de RTT después de la recepción de cada ACK? Asuma que el valor estimado de RTT es igual al RTT medido para el primer segmento, y luego es calculado usando la ecuación del RTT estimado para todos los segmentos subsecuentes. Nota: Wireshark tiene una característica interesante que permite dibujar RTT para cada uno de los segmentos TCP. Seleccione el segmento TCP en la ventana “lista de paquetes capturados” que están siendo enviados desde el computador local hacia el servidor gaia.cs.umass.edu. Luego seleccione Statistics -> TCP Stream Graph -> Round Trip Time Graph. 8. ¿Cuál es la longitud de cada uno de los primeros seis segmentos TCP? Segmento 1 2 3 4 5 6
Longitud de cabecera 20 20 20 20 20 20
Longitud de datos 800 0 1460 1460 0 1460
Longitud total (bytes) 820 0 1480 1480 20 1480
9. ¿Hay segmentos retransmitidos en el archivo de traza de paquetes? ¿Qué observó en la traza de paquetes para responder esta pregunta?
Para responder esta pregunta podemos emplear la herramienta expert info la cual se encuentra en el menú Analize que nos muestra un informe con los posibles errores producidos como ack duplicado, que se genera cuando se pierde un paquete y se debe retransmitir:
10. ¿Qué cantidad de datos reconoce típicamente el receptor en un ACK? ¿Puede identificar casos donde el receptor está reconociendo cada segmento recibido? Mediante los indicadores se puede representar información adicional: SYN: indica un pedido para establecer una conexión. FIN: Si está fijado en 1, se interrumpe la conexión. ACK: Si está fijado en 1, el paquete es un acuse de recibo. URG: Si está fijado en 1, el paquete se debe procesar en forma urgente. PSH (PUSH): Si está fijado en 1, el paquete opera de acuerdo con el método PUSH. RST: Si está fijado en 1, se restablece la conexión. 11. ¿Cuál es el throughput (bytes transferidos por unidad de tiempo) para la conexión TCP? Explique cómo calculó este valor.
ETAPA 4. Control de congestión en TCP Ahora examine la cantidad de datos enviados por unidad de tiempo desde el cliente hacia el servidor. Antes que calcular esto desde los datos sin procesar en la ventana de Wireshark, se empleará una de las utilidades de graficación de TCP en Wireshark – Time-Sequence-Graph (Stevens) – para dibujar los datos de la práctica. Seleccione un segment TCP en la ventana de “lista de paquetes capturados” de Wireshark. Luego seleccione el menú Statistics->TCP Stream Graph-> Time-SequenceGraph(Stevens). Se debería ver un gráfico similar al que se muestra a continuación, el cual fue creado a partir de los paquetes capturados en el trazado tcp-ethereal- trace-1 de http://gaia.cs.umass.edu/ethereal-labs/etherealtraces.zip
Figura 6. Gráfico del flujo TCP En este gráfico, cada punto representa un segmento TCP enviado, y se graficó el número de secuencia del segmento versus el tiempo en el cual fue enviado. Note que cada conjunto de puntos apilados representa una serie de paquetes que fueron enviados “back-to-back” por el emisor. Responda a las siguientes preguntas para los segmentos TCP de la traza de paquetes tcpetherealtrace-1: 11. Use la herramienta de graficado Time-Sequence-Graph(Stevens) para ver el diagrama del número de secuencia versus el tiempo de los segmentos que
son enviados desde el computador local al servidor gaia.cs.umass.edu. ¿Puede identificar donde inicia y donde termina la fase de inicio lento de TCP (TCP’s slow start), y donde se da el proceso de evitar la congestión (congestion avoidance)?
La fase de inicio lento, comienza aproximadamente entre un número de secuencia muy cercano a 0, menor a 50, y entre un tiempo de 0,2 y 0,28 segundos. La fase de inicio lento, termina aproximadamente entre un número de secuencia de 100 y 150, y entre un tiempo de 0,29 y 0,30 segundos.