Laboratorio 3 - Wireshark (UDP y TCP)

Documento UDP


1️⃣ Selecciona un paquete y determina cuántos campos hay en la cabecera UDP. Cita esos campos.
Cuatro campos
  • Puerto origen
  • Puerto destino
  • Length, tamaño del paquete
  • Checksum
2️⃣ Del campo de contenido de paquete, determina la longitud (en bytes) de cada uno de los campos de la cabecera UDP.
8 Bytes, 2 bytes cada campo
3️⃣ El valor en el campo Length es la longitud ¿de qué? Verifica tu respuesta con tu paquete UDP capturado.
Tamaño del segmento (cabecera + datos):
  • Cabecera → Headers UDP
  • Datos → Datos de la capa de aplicación
4️⃣ ¿Cuál es el máximo número de bytes que se pueden incluir en la sección de datos de UDP?
Dado que el campo length son 2 bytes, el valor máximo es FFFF (65535), por lo que este es el número máximo de bytes que puede contener un segmento
5️⃣ ¿Cuál es el número de puerto de origen mayor posible?
65535, por la misma razón que el campo length
6️⃣ ¿Cuál es el número de protocolo de UDP? Da tu respuesta en notación hexadecimal y decimal (mira en la cabecera IP).
Hay que mirar en la capa anterior (capa de red) y mirar el campo Protocol
UDP → 17 → 0x11
7️⃣ Busca “UDP” en Google y determina los campos sobre los que se calcula el checksum de UDP.
Todos los campos del segmento menos el campo checksum
8️⃣ Examina un par de paquetes UDP en los que el primer paquete se envíe por tu host y el segundo sea una respuesta al primero. Describe la relación entre los números de puerto de los dos paquetes.
El puerto que se abre en nuestro host es un puerto con un número mayor al 1023 dado que este es un puerto temporal que el sistema operativo abre únicamente para esta conexión. El servidor tiene abierto el puerto 53, el cual es un puerto conocido, lo que significa que tiene un propósito concreto.
9️⃣ Captura un paquete UDP pequeño y verifica manualmente el checksum de ese paquete

Documento TCP


⚠️
Si nos preguntan en el examen por el número de secuencia de un paquete, debemos indicar el número de secuencia real (raw)
1️⃣ ¿Cuál es la dirección IP y el puerto TCP utilizados por tu ordenador (origen) que está transfiriendo el fichero a gaia.cs.umass.edu? Probablemente te sea más fácil seleccionar un mensaje HTTP y explorar los detalles del paquete TCP utilizado para enviar este mensaje HTTP
  • IP → 192.168.1.102
  • Puerto → 1161
2️⃣ ¿Cuál es la dirección IP de gaia.cs.umass.edu? ¿A qué puerto se están enviando y recibiendo segmentos TCP de esta conexión?
  • IP → 128.119.245.12
  • Puerto → 80
3️⃣ ¿Cuál es el número de secuencia del segmento TCP SYN que se ha utilizado para iniciar la conexión TCP entre tu ordenador y gaia.cs.umass.edu? ¿Qué identifica al segmento como segmento SYN?
  • Número de secuencia → 0
  • Como se identifica: Tenemos que mirar el campo flags del paquete
4️⃣ ¿Cuál es el número de secuencia del segmento SYNACK enviado por gaia.cs.umass.edu a tu ordenador en respuesta al SYN? ¿Cuál es el valor del campo ACKkowledgement en el segmento SYNACK? ¿Cómo determinó gaia.cs.umass.edu ese valor? ¿Qué identifica al segmento como segmento SYNACK?
  • Número de secuencia → 0
  • Valor del ACK → 232129013 (1)
  • Como se determina el valor del ACK: Durante el establecimiento de la conexión (three-hand-shake) el cliente manda un paquete SYN con un número de secuencia válido. El servidor recibirá el paquete y mandará un SYN ACK mandando su propio número de secuencia, y en el campo ACK escribirá en valor del número de secuencia recibido en el paquete SYN y le sumará uno, solicitando así el primer byte de la comunicación
  • Como se identifica al segmento: A través del campo flags del paquete
5️⃣ ¿Cuál es el número de secuencia del segmento TCP que contiene el comando HTTP POST? Fíjate que para encontrar el comando POST, necesitarás meterte en el campo de contenido de paquete y buscar un segmento con un “POST” dentro de su campo DATA
  • Número de secuencia del paquete con el POST: 4Para encontrar el paquete, busco el paquete que se reconoce como un paquete HTML, miro que se han reensamblado 122 paquetes, miro cual es el primero, confirmo que contiene el POST
6️⃣ Considera este segmento TCP que contiene el HTTP POST como el primer segmento de la conexión TCP. ¿Cuáles son los números de secuencia de los primeros seis segmentos de la conexión TCP (incluyendo el segmento que contiene el HTTP POST)? ¿En qué momento se envió cada segmento? ¿Cuándo se recibió el ACK de cada segmento? Dada la diferencia entre cuando se envió cada segmento TCP y cuando se recibió su ACK, ¿cuál es el valor de RTT para cada uno de los seis segmentos? ¿Cuál es el valor del RTTEstimado después de recibir cada ACK? Asume que el valor de RTTEstimado es igual al RTT medido para el primer segmento y utiliza la Ecuación 1 para calcular el RTTEstimado de los siguientes segmentos.
RTTEst=(1α)RTTEst+αRTTMuestra(α=0,125)RTTEst = (1 – α) · RTTEst + α · RTTMuestra\\ (α = 0,125)
💡
Nota
Wireshark tiene una bonita aplicación que te permite dibujar el RTT para cada uno de los segmentos TCP enviados. Selecciona un segmento TCP en la ventana de listado de paquetes capturados que se haya enviado del cliente al servidor y después selecciona StatisticsTCP Stream GraphRound Trip Time Graph
  • Números de secuencia: 1 , 566, 2026, 3486, 4946 y 6406
  • Tiempos: 0.0264, 0.0417, 0.0540, 0.0546, 0.0774, 0.0781
  • ACKs: (1) 0.0539, (566) 0.0772, (2026) 0.1240, (3486) 0.1691, (4946) 0.2172, (6406) 0.2678
  • RTTs: En la siguiente gráfica podemos ver en el eje vertical representado el RTT de cada paquete (ACKs)
    • notion image
  • Cálculo del RTTE: Para calcular el RTTE del primero simplemente aplicamos la fórmula con el mismo valor para el RTTE y el RTTM. Para los siguientes, usaremos como RTTE el valor obtenido para el paquete anterior, y para el RTTM usaremos el valor de la tabla para dicho paquete
7️⃣ ¿Cuál es la longitud de cada uno de los primeros seis segmentos TCP?
  • El primero es de 565, el resto de 1460
8️⃣ ¿Cuál es la cantidad mínima de espacio de buffer disponible mostrada en recepción para la traza completa? ¿En algún momento la falta de espacio en el buffer de recepción frena los envíos?
  • El valor más bajo que toma la ventana de recepción es 5840 . Este valor lo he averiguado aplicando el filtro tcp.window_size_value < XXXX , de esta manera he ido probando filtrando por el valor más pequeño que encontraba hasta no encontrar más resultado
9️⃣ ¿Hay algún segmento retransmitido en el fichero de trazas? ¿Qué has mirado para responder esta pregunta?
No hay paquetes retransmitidos. Para comprobarlo he usado el filtro tcp.analysis.retransmission
1️⃣0️⃣ ¿Cuántos datos reconoce normalmente el receptor en un ACK? ¿Puedes identificar casos donde el receptor esté reconociendo un segmento sí, uno no?
A partir del paquete 48, la cantidad de ACKs enviados por el servidor empieza a ser menor, por lo que estos paquetes reconocerán más paquetes. A partir del paquete 69 los ACKs recividos reconoces 2 paquetes
1️⃣1️⃣ ¿Cuál es la tasa de transferencia (bytes transferidos por unidad de tiempo) de la conexión TCP? Explica cómo has calculado este valor.
  • En StatisticsTCP Stream GraphsThroughput
    • notion image
1️⃣2️⃣ Utiliza la herramienta de gráficas Time-Sequence-Graph(Stevens) para ver la gráfica de los números de secuencia frente al tiempo de los segmentos que se envían del cliente al servidor. ¿Puedes identificar dónde empieza y dónde acaba la fase de arranque lento de TCP, y dónde tiene lugar la evitación de congestión? Comenta en qué medida los datos obtenidos difieren del comportamiento ideal de TCP visto en clase.
En StatisticsTCP Stream GraphsTime / Sequence (Stevens)
  • He dibujado una línea roja donde se obserba dicha transición
    • notion image