UNIVERSIDAD DE CUENCA FACULTAD DE INGENIERIA ESCUELA DE INFORMATICA REDES DE COMPUTADORES 1 PRÁCTICA: ANALISIS DE UDP UTILIZANDO WIRESHARK NOMBRES: Angel Oswaldo Vázquez Patiño NOTA: PROCEDIMIENTO En esta práctica se estudiará el protocolo de transporte UDP. Debido a que UDP es simple y no requiere de mucha información en su estructura; la práctica es sencilla. En esta práctica, se empleará Wireshark.
TAREA A REALIZAR Empiece la captura de paquetes en Wireshark y realice una tarea en la cual el computador local envíe y reciba varios paquetes UDP. Por ejemplo, el uso del comando nslookup generará tráfico UDP.
Si no tiene posibilidad de generar tráfico UDP, se puede utilizar el archivo de trazas de paquetes UDP disponible como resultado d e una captura de tráfico UDP generado por 1 actividad de DNS en un computador local. Luego de generar el tráfico UDP, detenga el proceso de captura en Wireshark, fije el filtro de modo que se muestren solamente paquetes UDP enviados y recibidos por el computador local. Señale uno de estos paquetes UDP y expanda los campos UDP en la ventana de detalles.
1
Para emplear el archivo generado previamente, emplear en Wireshark la opción File -> Open y seleccione el archivo udp-wireshark-trace.
Cuando sea necesario, al responder una pregunta se debería tener para referencia un reporte del paquete o paquetes dentro de la traza que se emplea para responder las preguntas. Incluya el reporte para explicar de mejor forma su respuesta.
Para generar un reporte de un paquete emplee File -> Print , luego seleccione Selected packets only, y a continuación escoger Packet summary line, y seleccione la cantidad mínima de detalles de los paquetes para responder las preguntas: 1. Seleccione un paquete. De este paquete, determine cuántos campos existen en la cabecera UDP. Liste estos campos. Capture una pantalla que muestre estos campos.
Del paquete escogido se puede ver que la cabecera UDP tiene los siguientes campos: Source port Destination port Length Checksum 2. Desde el campo de contenido de un paquete, determine la longitud (en bytes) de cada uno de los campos de la cabecera UDP. • • • •
Del paquete escogido se puede presentar la siguiente tabla que muestra la información requerida.
Campo Source port Destination port Length Checksum
Hexadecim al
Decimal
Binario
Tamaño (bytes)
C058 8181
49240 33153
1100000001011000 1100000001011 000 1000000110000001 1000000110000 001
2 2
006f 661D
111 26141
0000000001101111 0000 000001101111 0110011000011101 0110011000011 101
2 2
3. ¿Qué longitud representa el valor en el campo Length? Verifique su respuesta con un paquete UDP capturado en el computador local. Este campo “incluye tanto el encabezado como los datos.” (1) De la pregunta dos vemos que el encabezado del paquete capturado para la práctica es de 8 bytes (Source port, Destination port, Length, Checksum) y de la captura de imagen de la pregunta uno vemos que los datos son igual a 103 bytes, sumando nos da 111 bytes que es lo que nos indica el campo Length.
4. ¿Cuál es el número máximo de bytes que pueden ser incluidos en un payload de UDP? “En teoría el máximo tamaño del payload de UDP sería 65507 bytes. En la práctica esto está limitado por la implementación del socket en el sistema operativo. Tampoco está claro que sucede cuando se supera este límite. ” (2) 5. ¿Cuál es el número de puerto origen más grande posible? Ya que el número de puerto de origen es un campo de 16 bits el número más grande sería cuando todos los bits estén a uno es decir el número sería 1111111111111111 2=6553510=FFFF16 6. ¿Cuál es el número de protocolo de UDP? Dar su respuesta tanto en notación hexadecimal como en decimal. Para responder esta pregunta, probablemente requiera examinar la cabecera IP. Examinando la cabecera del paquete que se muestra en la imagen siguiente se puede identificar que el número de protocolo de UDP es: 11 16=1710.
7. Busque UDP en Google y determine los campos sobre los cuales se calcula el “checksum” de UDP. La idea en la que se basa la suma de chequeo de Internet es muy sencilla: se suman todas las palabras de 16 bits que conforman el mensaje y se transmite, junto con el mensaje, el resultado de dicha suma (checksum ). Al llegar el mensaje a su destino, el receptor realiza el mismo cálculo sobre los datos recibidos y compara el resultado con el checksum recibido. Si cualquiera de los datos transmitidos, incluyendo el mismo checksum , está corrupto, el resultado no concordará y el receptor sabrá que ha ocurrido un error.
El checksum se realiza de la siguiente manera: los datos que serán procesados (el mensaje) son acomodados como una secuencias de enteros de 16 bits. Estos enteros se suman utilizando aritmética complemento a uno para 16 bits y, para generar el checksum , se toma el complemento a uno para 16 bits del resultado. El uso del algoritmo de checksum de Internet en los headers de los protocolos se puede resumir en tres pasos simples. 1. Los octetos adyacentes que se deben verificar con la suma de chequeo deben ser acomodados para formar enteros de 16 bits, luego se calcula la suma complemento a uno de estos enteros (de 16 bits) 2. Para generar el checksum , el campo de checksum del header del PDU que será transmitido es puesto en cero, luego la suma complemento a uno es calculada sobre los octetos correspondientes y el complemento a uno de esta suma se coloca en el campo de checksum. 3. Para revisar el checksum, la suma es calculada sobre los mismos octetos, incluyendo el campo de checksum. Si el resultado es 16 bits con valor 1 (-0 en aritmética complemento a uno), el chequeo es correcto. Como un ejemplo sencillo del cálculo del checksum supongamos que tenemos tres "palabras" de 16 bits
0110011001100110 0101010101010101 0000111100001111 La suma de las dos primeras palabras sería:
0110011001100110 0101010101010101 1011101110111011 Adicionando ahora la tercera "palabra" al resultado anterior tenemos
1011101110111011 0000111100001111 1100101011001010 La suma complemento a uno se obtiene convirtiendo todos los ceros en unos y todos los unos en ceros. De esta forma la suma complemento a uno de 1100101011001010 sería 0011010100110101. Que vendría a ser el checksum . Al llegar al receptor las cuatro palabras de 16 bits, incluyendo el checksum son sumados y el resultado debe ser 1111111111111111. 1111111111111111. Si uno de los bits es cero, un error e rror ha sido detectado. detec tado. (3) 8. Examine un par de paquetes UDP en el cual el primer paquete se envíe desde el computador local y el segundo paquete sea una respuesta al primer paquete. Describa la relación entre los números de puertos en los dos paquetes. A continuación se muestra la captura de dos paquetes UDP
Los dos puertos sirven para lo mismo que en el TCP: para identificar los puntos terminales de las máquinas origen y destino (4). Para este caso en particular se tiene entonces que se recibe un paquete de la máquina con dirección IP 90.209.84.33 desde el puerto 53849 hacia hac ia la máquina local con dirección IP 172.31.13.75 en el puerto 49240, para la respuesta de la máquina local hacia la otra se usan los mismo puertos pero en este caso el puerto de destino se convierte en puerto de envió y viceversa. 9. Capture un paquete UDP. Verifique manualmente el checksum de este paquete. Muestre todos los pasos de este proceso. A continuación se muestra la captura de pantalla del paquete que se va a analizar (checksum=0xa0e3):
El mensaje UDP es el siguiente 0000 0000 0010 0010 0020 0020 0030 0030 0040 0040 0050 0050 0060 0060 0070 0070 0080 0080 0090
00 00 0d 3a 30 65 43 69 00 65
16 83 4b 69 64 74 b8 6e 31
44 4c d2 64 ca 32 cc 64 3a
6a db 59 32 92 30 4e 5f 76
36 00 c0 30 f5 3a 1c 6e 34
34 00 58 3a c4 a5 8f 6f 3a
00 6d 00 ae 26 51 a1 64 55
1e 11 6f 7e 67 be 15 65 54
f7 98 a0 4c 31 2c 20 31 38
52 32 e3 f0 32 58 65 3a 7a
67 5a 64 fb 36 d7 31 74 31
cc d1 31 1d 3a bd 3a 34 3a
08 54 3a 6a 74 b7 71 3a 79
00 21 61 65 61 fa 39 b4 31
45 ac 64 59 72 e3 3a 1c 3a
00 1f 32 19 67 c6 66 01 71
. . Dj 64. 64. . . . L. . . m. . K. Y. X. o : i d20: d20: . ~ 0d. 0d. . . . &g et 20: 20: . Q. C. . N. . . . i nd_ nd_ node node . 1: v4: UT e
. Rg. . . E. . 2Z. 2Z. T! . . . . d1: d1: ad2 L. . . j eY. eY. 126: 126: t ar g , X. . . . . . e1: e1: q9: q9: f 1: t 4: . . . 8z1: y1: q
El checksum para UDP se calcula sobre los octetos que componen un seudo-header , el el header de UDP y los datos (que se deben completar con ceros al final si es necesario). Se debe recordar también los formatos del frame Ethernet, el header IPv4 y el header de UDP: •
Formato del frame Ethernet (el tamaño de los campos está en bytes)
•
Formato del header de IPv4
•
Formato del header UDP
Ahora debemos separar nuestro frame en su componentes: header Ethernet, Header IPv4, Header UDP y Datos Header del frame Ethernet 00 16 16 44 6a 36 34 00 00 1e
f 7 52 67 cc 08 00 00
Header IPv4 45 00 00 83 4c db 00 00 00 6d 11 11
98 32 5a d1 54 21 ac 1f 0d 4b
Header UDP d2 59 c0 58 58 00 6f
a0 e3
Datos 64 31 31 3a 61 64 64 32… 32……. .
El seudo-header de este mensaje sería: 5a d1 54 21 ac 1f 0d 4b
0011 0011 0033 0033
===> Dirección IP origen ===> Dirección IP destino ===> cero + número de protocolo + longitud UDP
A continuación se suma, con aritmética complemento a uno, el seudo-header + el header UDP + los datos UDP, como palabras de 16 bits
Suma con aritmética complemento a uno del seudoheader [ Hex] [ a8 b0] [ 03 19] [ a8 b0] [ 01 32] [ 00 11] [ 00 33] [ 155 EF]
Bi nar i o 10101000 101010001011 10110000 0000 00000011 000000110001 00011001 1001 10101000 101010001011 10110000 0000 00000001 000000010011 00110010 0010 00000000 000000000001 00010001 0001 00000000 000000000011 00110011 0011 10101010 101010101111 11110111 01111 1
En la aritmética complemento a uno, cuando una operación genera un acarreo ( carry) en el bit más significativo, se debe incrementar el resultado [ 55EF] 55EF] [ 55F0]
010101 010101011 011110 11011 1111 11 1 010101 010101011 011111 11100 0000 00
Suma con aritmética complemento a uno del header UDP [ Hex] [ e5 73] [ 00 35] [ 00 33] [ 00 00] [ E5 DB]
Bi nar i o 11100101 111001010111 01110011 0011 00000000 000000000011 00110101 0101 00000000 000000000011 00110011 0011 00000000 000000000000 00000000 0000 11100101 111001011101 11011011 1011
Suma con aritmética complemento a uno de los datos transportados por UDP [ Hex] Bi nar i o [ 39 f 9] 001110 001110011 011111 11110 1001 01 [ 01 00] 00000001 000000010000 00000000 0000 [ 00 01] 00000000 000000000000 00000001 0001 [ 00 00] 00000000 000000000000 00000000 0000 [ 00 00] 00000000 000000000000 00000000 0000 [ 00 00] 00000000 000000000000 00000000 0000 [ 02 35] 00000010 000000100011 00110101 0101 [ 30 01] 00110000 001100000000 00000001 0001 [ 31 03] 00110001 001100010000 00000011 0011 [ 31 37] 00110001 001100010011 00110111 0111 [ 36 03] 00110110 001101100000 00000011 0011 [ 105 6D] 6D] 10000010101101101 10000010101101101 0000010101101110 0000010101101110 [ 56E] [ 31 36] 00110001 001100010011 00110110 0110 [ 38 07] 00111000 001110000000 00000111 0111 [ 69 6e] 01101001 011010010110 01101110 1110 [ 2d 61] 00101101 001011010110 01100001 0001 [ 100 0C] 10000000000001100 10000000000001100 0000000000001101 0000000000001101 [ D] [ 64 64] 01100100 011001000110 01100100 0100 [ 72 04] 01110010 011100100000 00000100 0100 [ 61 72] 01100001 011000010111 01110010 0010 [ 137 DA] 10011011111011010 10011011111011010 0011011111011011 0011011111011011 [ 37DB] 37DB]
- - > 0000010101101101 0000010101101101 + 1 =
- - > 0000000000001100 0000000000001100 + 1 =
- - > 0011011111011010 0011011111011010 + 1 =
[ 70 [ 00 [ 0c [ 01 [ 7D
61] 00] 00] 00] 61]
01110000 011100000110 01100001 0001 00000000 000000000000 00000000 0000 000011 000011000 000000 00000 0000 00 00000001 000000010000 00000000 0000 01111101 011111010110 01100001 0001
Se suman los subtotales [ Hex] Bi Bi nar i o [ 5 6E] 00000101 000001010110 01101110 1110 [ D] 00000000 000000000000 00001101 1101 [ 37 DB] 00110111 001101111101 11011011 1011 [ 7D 61] 01111101 011111010110 01100001 0001 [ BA B7] B7] 10111010 101110101011 10110111 0111
Para calcular el checksum se deben hacer dos cosas ahora, sumar los resultados obtenidos con el seudo-header, el header UDP y los datos y, finalmente, calcular el complemento a uno. 1. Suma de los resultados obtenidos con el seudo-header, el header UDP y los datos [ 55 F0] 01010 01010101 101111 111100 10000 00 [ E5 DB] 11100101 111001011101 11011011 1011 [ BA B7] B7] 10111010 101110101011 10110111 0111 [ 1F6 82] 82] 11111011 111110110100 01000001 00010 0 11110110 111101101000 10000011 0011 [ F683]
- - > 11110110 111101101000 10000010 0010 + 1 =
El complemento a uno se obtiene convirtiendo todos los ceros en unos y todos los unos en cero. De esta forma, el complemento a uno de 1111011010000011 es 0000100101111100 . Que vendría a ser el checksum: checksum : el hexadecimal a0 e3
Citas bibliográficas 1. UDP Protocolo de datagrama de usuario. [En línea] [Citado el: 13 de Mayo de 2009.] http://mi.ubp.edu.ar/archivosmiubp/MaterialDeEstudio/13/R-II/1497/UDP.pdf.
Alej andro. www.fiuba6662.com.ar. [En 2. Orlandi, Guido, Tassara, Veira y Agustín, Alejandro. línea] 2005. [Citado el: 13 de Mayo de 2009.] http://www.fiuba6662.com.ar/6648/presentaciones/2005/G2/G2_TP2.pdf. 3. Algoritmo de checksum de Internet. [En línea] [Citado el: 13 de Mayo de 2009.] http://www.arcesio.net/checksum/checksuminternet.html. WEB para enseñanza enseñanza de protocolos protocolos de 4. El protocolo UDP. Herramientas WEB comunicación. [En línea] [Citado el: 14 de Mayo de 2009.] http://neo.lcc.uma.es/evirtual/cdd/tutorial/transporte/udp.html.
5. Agudelo, Oscar. Cálculo del campo de checksum en el header de UDP. arcesio.net. [En línea] 2003. [Citado el: 14 de Mayo de 2009.] http://www.arcesio.net/checksum/checksumUDP.html.