Objetivo
Encapsulación:
- Aprender cómo se encapsula un mensaje ICMP dentro de un paquete IP
- Aprender cómo se encapsula un mensaje IP dentro de una trama Ethernet
Wireshark:
- Aprender a interpretar los datos generados por el Wireshark.
- Conocer cómo utilizar filtros en el Wireshark
- Reconocer los campos de la cabecera de un paquete IP.
- Reconocer los campos de la cabecera ICMP
Tarea a realizar
Se enviarán 100 bytes en un mensaje ICMP de tipo pregunta (request). Un mensaje ICMP está dividido siempre en una sección de cabecera ICMP y en una sección de datos ICMP. En esta simulación se envían 100 bytes en la sección de datos del mensaje ICMP.
Para generar este mensaje, dependiendo del sistema operativo utilizado, se ejecutará el comando “ping” de la siguiente manera:
- Desde Linux, “ping 192.168.1.100 -c 1 -s 100”
- Desde la consola de Windows “ping 192.168.1.100 -l 100”.
Notas:
- El parámetro “-c 1” en Linux hace que se envíe solamente 1 mensaje ICMP de tipo pregunta (request). No existe un parámetro equivalente para entornos Windows por lo que en Windows siempre se generarán 4 mensajes ICMP de tipo pregunta.
- El parámetro “-s 100” hace que se envíen 100 bytes dentro del campo “datos” del mensaje ICMP. El parámetro “-l 100” hace lo mismo que “-s” pero en Windows.
Notas de ayuda y recursos
Filtros en el Wireshark:
Durante la captura se puede haber obtenido muchas tramas (al estar dentro de un aula podemos recibir broadcast del resto de los equipos). Para identificar las tramas generadas por nuestro comando “ping” se debe identificar el paquete ICMP de tipo “echo request”. Para ello, en el apartado “Filter” se ha puesto: “icmp && ip.src==192.168.1.104 && ip.dst==192.168.1.100”.
- icmp hará que se muestren sólo las tramas que contengan mensajes ICMP,
- ip.src hará que se muestren sólo aquellos paquetes cuya IP origen sea 192.168.1.104 (el equipo que realiza el “ping”)
- ip.dst hará que se muestren sólo los paquetes cuya IP destino sea 192.168.1.100 (el equipo al que se realiza el “ping”)
En la RFC 791 se muestran todos los campos de la cabecera IP http://www.ietf.org/rfc/rfc0791.txt
Explicación detallada del proceso de encapsulación.
Primer paso: analizar el mensaje ICMP con wireshark
Al capturar la trama Ethernet mediante el Wireshark (la trama número 1 encuadrada en rojo), se puede ver con detalle el mensaje ICMP, tanto su cabecera como sus datos. En la imagen se aprecia que la sección de datos ocupa 100 bytes y que en total el mensaje ocupa 108 bytes, por lo que deducimos que la cabecera ocupa 8 bytes.
Segundo paso: encapsular mensaje ICMP dentro de un paquete IP
Un mensaje ICMP no puede viajar a través del nivel de red. Siempre debe viajar dentro (encapsulado) de un paquete IP, es decir, siempre viaja encapsulado dentro de un paquete IP. Un paquete IP tiene dos partes diferenciadas, una cabecera y los datos.
- La cabecera IP: ocupa por defecto 20 bytes. Existen un campo en la cabecera que indica cuántos bloques de 4 bytes ocupa la cabecera. En una cabecera por defecto de 20 bytes, en este campo aparece un 5 que indica que la cabecera tiene 5x4 bytes.
- El campo de datos IP: En este campo va el mensaje ICMP anterior. Por lo tanto, ocupará 108 bytes.
Visto de otra forma, tendríamos el mensaje IP siguiente:
Tercer paso: analizar el mensaje IP con wireshark
Al capturar la trama Ethernet mediante el Wireshark (la trama número 1 encuadrada en rojo), se puede ver con detalle el mensaje IP, tanto su cabecera como sus datos. En la imagen se aprecia que la sección de cabecera ocupa 20 bytes (tamaño por defecto) y que en total el paquete IP ocupa 128 bytes tal y como era de esperar: cabecera IP 20 bytes + datos IP 128 bytes (el mensaje ICMP al completo es lo que va dentro de la zona de datos IP).
Cuarto paso: encapsular el paquete IP dentro de una trama Ethernet
Un paquete IP no puede viajar a través del nivel de enlace en una red de área local Ethernet.
Siempre debe viajar dentro de una trama Ethernet, es decir, siempre viaja encapsulado dentro de una trama.
Una trama tiene tres partes diferenciadas, una cabecera, los datos y el CRC o control de errores.
- La cabecera de la trama: tiene un campo preámbulo de 7 bytes, un campo start field delimiter de 1 byte, un campo MAC destino con 6 bytes, un campo MAC origen con 6 bytes y un campo Tipo o Longitud con 2 bytes.
- El campo de datos de la trama: En este campo va el paquete IP anterior. Por lo tanto, ocupará 128 bytes.
- El campo CRC: ocupa 32 bits
Visto de otra forma, tendríamos la trama Ethernet siguiente (no se muestra el CRC):
Preguntas para ampliar conocimientos
- ¿Qué tamaño tiene la sección de datos de los mensajes ICMP de tipo request por defecto? En esta simulación se ha forzado a que tenga 100 bytes añadiendo al comando “ping” el parámetro “–l 100”
- ¿Cómo se consigue enviar en la sección de datos del mensaje ICMP request bytes de relleno como en este ejemplo en los que se aprecia la cadena “MIGUEL ZUNDA” repetida?
- ¿Cuántos bytes ocupa la cabecera IP por defecto?
- Para una cabecera IP de tamaño estándar, ¿cuántos bytes como mínimo debe ocupar el campo datos de un paquete IP que va encapsulado dentro de una trama Ethernet para que no se tengan que generar bytes de relleno a nivel de enlace? ¿Por qué?
- Para una cabecera IP de tamaño estándar, ¿cuántos bytes como máximo debe ocupar el campo datos de un paquete IP que va encapsulado dentro de una trama Ethernet? ¿Por qué?
- ¿Cuántos bytes ocupa la cabecera del mensaje ICMP de tipo request?
- Para una cabecera IP de tamaño estándar que en su campo datos contiene un mensaje ICMP request con tamaño estándar ¿cuántos bytes como mínimo debe ocupar el campo datos de ese mensaje ICMP cuando va encapsulado dentro un paquete IP que, a su vez, va encapsulado dentro de una trama Ethernet para que no se tengan que generar bytes de relleno a nivel de enlace? ¿Por qué?
- Para una cabecera IP de tamaño estándar que en su campo datos contiene un mensaje ICMP request estándar, ¿Cuántos bytes como máximo debe ocupar el campo datos de ese mensaje ICMP cuando va encapsulado dentro un paquete IP que, a su vez, va encapsulado dentro de una trama Ethernet? ¿Por qué?
- Teniendo en cuenta las respuestas anteriores, ¿se podría ejecutar el comando ping -c 1 -s 1500? ¿Qué ocurriría? … ¡bienvenidos al apasionante mundo de la fragmentación!
Encapsulación: mensaje ICMP dentro de paquete IP dentro de trama Ethernet by
Miguel Ángel Zunda Calderón is licensed under a
Creative Commons Reconocimiento-NoComercial-CompartirIgual 4.0 Internacional License.