jueves, 11 de septiembre de 2008

Analizando el datagrama IP


Versión: 4 bits
Siempre vale lo mismo 4 en hexadecimal y 0100 en binario. Este campo describe el formato de la cabecera utilizada. En este caso es la versión 4.



Tamaño Cabecera (IHL): 4 bits
Longitud de la cabecera, en palabras de 32 bits. Su valor mínimo es de 5 para una cabecera correcta, y el máximo de 15. En este caso particular es 5 y multiplicado por 32 bits da como resultado 160 bits o 20 bytes.


Tipo de Servicio: 8 bits
Indica una serie de parámetros sobre la calidad de servicio deseada durante el tránsito por una red. Algunas redes ofrecen prioridades de servicios, considerando determinado tipo de paquetes "más importantes" que otros (en particular estas redes solo admiten los paquetes con prioridad alta en momentos de sobrecarga). Estos 8 bits se agrupan de la siguiente manera. Los 5 bits de menos peso son independientes e indican características del servicio:


Bit 0: sin uso, debe permanecer en 0.
Bit 1: 1 costo mínimo, 0 costo normal.
Bit 2: 1 máxima fiabilidad, 0 fiabilidad normal.
Bit 3: 1 maximo rendimiento, 0 rendimiento normal.
Bit 4: 1 mínimo retardo, 0 retardo normal.
Los 3 bits restantes están relacionados con la precedencia de los mensajes, un indicador ajunto que indica el nivel de urgencia basado en el sistema militar de precedencia (véase Message Precedence) de la CCEB, un organización de comunicaciones electrónicas militares formada por 5 naciones. La urgencia que estos estados representan aumenta a medida que el número formado por estos 3 bits lo hace, y responden a los siguientes nombres.
000: De rutina.
001: Prioritario.
010: Inmediato.
011: Relámpago.
100: Invalidación relámpago.
101: Procesando llamada crítica y de emergencia.
110: Control de trabajo de Internet.
111: Control de red.

Longitud Total: 16 bits
Es el tamaño total, en octetos, del datagrama, incluyendo el tamaño de la cabecera y el de los datos. El tamaño máximo de los datagramas usados normalmente es de 576 octetos (64 de cabeceras y 512 de datos). Una máquina no debería enviar datagramas mayores a no ser que tenga la certeza de que van a ser aceptados por la máquina destino.
En caso de fragmentación este campo contendrá el tamaño del fragmento, no el del datagrama original.

En este caso la longitud total es de 48 octetos, divididos de la siguiente manera: 20 octetos para la cabecera IP y 28 octetos para los datos.

Identificador: 16 bits
Identificador único del datagrama. También se utilizará, en caso de que el datagrama deba ser fragmentado, para poder distinguir los fragmentos de un datagrama de los de otro. El originador del datagrama debe asegurar un valor único para la pareja origen-destino y el tipo de protocolo durante el tiempo que el datagrama pueda estar activo en la red.

En este caso aunque el datagrama no está fragmentado el identificador del datagrama es: 2A96 en hexadecimal, 10902 en decimal y 0010101010010110 en binario.

Indicadores: 3 bits
Actualmente utilizado sólo para especificar valores relativos a la fragmentación de paquetes:

Bit 0: Reservado; debe ser 0
Bit 1: 0=Divisible, 1=No divisible
Bit 2: 0=Ultimo fragmento, 1=Fragmento intermedio (le siguen mas fragmentos)

La indicación de que un paquete es indivisible debe ser tenida en cuenta bajo cualquier circunstancia. Si el paquete necesitara ser fragmentado, no se enviará.

En este caso el campo tiene un valor de 010 en binario, lo que significa que el paquete no es divisible ó no está fragmentado.

Posición de Fragmento: 13 bits
En paquetes fragmentados indica la posición, en unidades de 64 bits, que ocupa el paquete actual dentro del datagrama original. El primer paquete de una serie de fragmentos contendrá en este campo el valor 0.

En este caso el campo tiene un valor de 0000000000000 en binario, indicando que es el primero, pero también que es el único paquete porque no está fragmentado.

Tiempo de Vida (TTL): 8 bits
Indica el máximo número de direccionadores que un paquete puede atravesar. Cada vez que algún nodo procesa este paquete disminuye su valor en, como mínimo, un direccionador. Cuando llegue a ser 0, el paquete no será reenviado.

En este caso el valor es de 128 en decimal, 80 en hexadecimal y 10000000 en binario. Este número es considerado el óptimo para aprovechar el rendimiento de Internet. Con este valor el datagrama es enviado y será decrementado en 1 por cada uno de los nodos por los que pase antes de llegar al destino.

Protocolo: 8 bits
Indica el protocolo de siguiente nivel utilizado en la parte de datos del datagrama. En este caso el protocolo es TCP, 06 en hexadecimal y decimal y 00000110 en binario.

Checksum Cabecera: 16 bits
Checksum de la cabecera. Se recalcula cada vez que algún nodo cambia alguno de sus campos (por ejemplo, el Tiempo de Vida). El método de cálculo (intencionadamente simple) consiste en sumar el complemento a 1 de cada palabra de 16 bits y hacer el complemento a uno del valor resultante. En este caso el campo tiene el valor d7fe en hexadecimal y 1101011111111110 en binario, el cálculo es el siguiente:

Primero: Asumimos que el valor del Checksum es 0000 en hexadecimal.

Segundo: Realizamos la suma de las palabras de 16 bits de la cabecera del protocolo IP.

[Hex] Binario Suma
[4500] 0100010100000000 0100010100000000
[0030] 0000000000110000 0100010100110000
[2a96] 0010101010010110 0110111111000110
[4000] 0100000000000000 1010111111000110
[8006] 1000000000000110 10010111111001100
0010111111001100 + 1 = 0010111111001101
[0000] 0000000000000000 0010111111001101 (Checksum)
[c80d] 1100100000001101 1111011111011010
[9e29] 1001111000101001 11001011000000011
1001011000000011 + 1 = 1001011000000100
[c869] 1100100001101001 10101111001101101
0101111001101101 + 1 = 0101111001101110
[c992] 1100100110010010 10010100000000000
0010100000000000 + 1 = 0010100000000001

Tercero: Realizamos el complemento a uno al valor de la suma.

Suma: 0010100000000001
Complemento a 1: 1101011111111110 [d7fe]

El resultado es el valor del Checksum: d7fe en hexadecimal o 1101011111111110 en binario.

Dirección IP de origen: 32 bits
El valor es c8.0d.9e.29 en hexadecimal, 11001000.00001101.10011110.00101001 en binario y 200.13.158.41 en decimal.

Dirección IP de destino: 32 bits
El valor es c8.69.c9.92 en hexadecimal, 11001000.01101001.11001001.10010010 200.105.201.146

Opciones: Variable
Aunque no es obligatoria la utilización de este campo, cualquier nodo debe ser capaz de interpretarlo. Puede contener un número indeterminado de opciones, que tendrán dos posibles formatos. Este datagrama no cuenta con este campo.

Relleno: Variable
Utilizado para asegurar que el tamaño, en bits, de la cabecera es un múltiplo de 32. El valor usado es cero. Este caso no cuenta con ese campo.

Referencias
http://es.wikipedia.org/wiki/Cabecera_IP
Protocolo de Mensajes de Control de Internet o ICMP (Internet Control Message Protocol)

jueves, 3 de julio de 2008

Analizando la trama Ethernet II con Wireshark

En este primer caso, se analiza cada una de las cabeceras que tiene una trama Ethernet II con un ejemplo concreto. La trama Ethernet II, se compone de un Preámbulo, Dirección de destino, Dirección de fuente, Tipo de protocolo, Datos y una Secuencia de verificación de trama que se detalla con un ejemplo en Wireshark.


Preámbulo (Preamble)
Este campo contiene 62 bits de 1 y 0 en forma alternada finalizando con dos bits de 1 (en total 8 bytes), permitiendo ajustar los tiempos de ambas tarjetas (computadoras o equipos de comunicaciones) para tener una transmisión digital sincronizada. El campo no es mostrado por el Wireshark pero siempre tiene el formato siguiente: 10101010 10101010 10101010 10101010 10101010 10101010 10101010 10101011.


Dirección de destino(Destination Address)
Corresponde a la dirección Ethernet (6 bytes) de la tarjeta Ethernet de destino de la trama a transmitir. Si esta dirección se compone enteramente de 1, entonces significa que es un mensaje Broadcast, vale decir, un mensaje para todas las estaciones de la red local. Los primeros 3 bytes de esta dirección están normados por la IEEE y cada fabricante de tarjetas Ethernet le corresponde un único trió. En este caso la dirección de destino es 14:9e:20:00:02:00 en hexadecimal o 00010100 10011110 00100000 00000000 00000010 00000000 en binario.

Dirección de origen (Source Address)
Corresponde a la dirección Ethernet (6 bytes) de la tarjeta Ethernet que envía la trama a transmitir. Los primeros 3 bytes de esta dirección están normados por la IEEE y cada fabricante de tarjetas Ethernet le corresponde un único trió. En este caso la dirección de origen es 02:00:02:00:00:00 en hexadecimal o 00000010 00000000 00000010 00000000 00000000 00000000 en binario.

Tipo de protocolo (Ether Type)
Este campo indica el tipo de protocolo que está ocupando el formato de la trama Ethernet versión II. En otras palabras, diferencia los distintos tipos de protocolos de capas superiores que puedan ocupar Ethernet. IP tiene un Ether Type de valor 0x0800, ARP tiene valor 0x0806, IPX tiene 0x8137. Todos los valores son asignados por la IEEE en el RFC 1700 y poseen valores mayores de 0x05DC (1500 decimal). En este caso el protocolo es IP 0x0800 en hexadecimal y el paquete IP viene contenido en el campo DATA de esta trama Ethernet II.

Datos (DATA)
Es en este campo donde reside la información transmitida y que generalmente consiste de paquetes de tramas superiores. En este caso el campo DATA contiene un paquete IP que lo analizare en otro artículo.

Secuencia de verificación de trama (FCS)
Frame Check Sequence (FCS o CRC) es un campo de 4 bytes que contiene un checksum que permite revisar la integridad del paquete recibido para ser entregado a las capas superiores o descartado. Este campo tampoco es mostrado por el Wireshark debido a que la configuración del sistema operativo (Windows XP SP2) no permite capturar el campo FCS de la trama Ethernet II.
Referencias

Enlaces de interes: