Thursday, February 16, 2012

Empacar datos ( Mucho mas que cintas, moños, cajas y plastico)

En este artículo describiremos algunos de los conceptos clave relacionados con el empaquetamiento de datos, incluyendo bits, bytes, paquetes, la encapsulación de datos y su interpretación por parte de las capas del modelo TCP/IP.

Para empezar definiremos que es un Host, este es un término genérico que puede hacer referencia a una estación de trabajo, un router o un servidor web, por citar sólo algunos ejemplos. Los hosts están conectados a una red que capaz de transportar datos desde, hacia y a través de ellos.

Los datos intercambiados entre dos hosts deben ser agrupados en paquetes usando un formato estándar. La confusión surge porque dichos paquete de datos tienen diferentes nombres en las distintas capas de comunicación, desde la capa de aplicación del dispositivo de  origen a la capa aplicación del dispositivo de destino.


Bits, bytes y paquetes

La unidad mas pequeña e indivisible de la computación es el bit, algo así como el átomo de la informática. Un bit es un simple espacio de almacenamiento que puede tener unicamente el valor 0 o 1, así que usaremos lenguaje binario.

Aunque breve y compacto, la realidad es que no es posible almacenar o transmitir una gran cantidad de información con un solo bit, así que es mejor agrupar los bits en grupos de ocho. La unidad de ocho bits se denomina byte (octeto). Ocho veces una cantidad muy pequeña de información es todavía muy pequeño, sin embargo un byte puede contener un carácter ya sea una letra (a), un símbolo coma(,)  o un número entero entre 1 y 255 (2^8-1). Esto lo determina el Código del Estándar Americano para Intercambio de Información (-ASCII- American Standard Code for Information Interchange).


La posición de cada bit se representa en base binaria y se expande como potencia de 2 desde 2^0 a 2^7. Si todos los bits tienen un valor 0, el byte completo representa un 0. Ahora si todos los bits son 1s (como en nuestra tabla). Es necesario sumar todos los valores de los bits individuales, empezando por el menor valor (2^0 = 1, cualquier base con exponente 0 es igual a 1), así 1 + 2 + 4 + 8 + 16 + 32 + 64 + 128 = 255, este es el máximo valor que un byte puede tener y lo aplicaremos con frecuencia al hablar de direcciones IP.

Cuando obtenemos un byte de datos, debemos convertir su valor en binario a su valor decimal correspondiente. La posición de cada bit asigna el valor decimal que lo acompaña. Entonces, sumamos todos los valores decimales, y listo, la conversión se realiza, después de todo no es tan difícil ¿verdad?.

El empaquetamiento y envío de datos a través de la red genera altos costos operativos para el host de origen, adicionalmente los paquetes deben desempacarse cuando llegan al host de destino, el cual verifica el sello que garantiza que los datos no han sido modificados (Tamper proof seal), este es el campo de verificación de redundancia cíclica (CRC -cyclical redundancy check), el cual valida que la trama (frame: nombre del paquete enviado por la capa física) no ha sido dañada o corrompida durante el transporte.

Análogamente con un oficina de correo tradicional, los sobres de las cartas indican la dirección de correo donde deben entregarse, los paquetes IP incluyen la dirección de envío y recepción del host. Podemos pensar en la dirección de control de acceso al medio MAC (Media Access Control) de la tarjeta de interfaz de red como la dirección asignada a la puerta de una casa.

En Redes, al menos en redes Ethernet,  la tarjeta de interfaz de red o NIC (Network interface card) contiene la dirección de hardware MAC; la cual es asignada por el fabricante al construir la tarjeta. La dirección MAC es de 48 bits, lo que significa que puede contener un número muy grande (2^48-1). Más adelante analizaremos las diferencias entre las direcciones MAC e IP.

Para crear una trama o frame, que es el nombre que el paquete adquiere cuando se transmite por el medio físico, el paquete se construye con varias capas de protocolo, Por ultimo la tarjeta NIC incluye su dirección física (MAC) y pone la trama en el medio de transmisión de la red. La trama tiene una cabecera de 14 bytes, y sus campos incluyen: datos propios de la trama que pueden variar en longitud, la dirección MAC del origen y destino, ademas de un espacio de 4 bytes que representa el CRC.

Las aplicaciones como Telnet, FTP o un cliente de correo electrónico, cargan los datos en paquetes, las aplicaciones TCP las discutiremos mas detalladamente en la sección Protocolos IP. El paquete TCP tiene dos segmentos, el encabezado y los datos.


Un segmento TCP se transmite desde la capa TCP a la capa IP del modelo TCP/IP. La capa IP añade su cabecera en la parte delantera del segmento TCP recibido, asi se convierte en un datagrama IP. En realidad, la cabecera TCP y el contenido interno se ven como datos del datagrama IP, el cual tiene su propio encabezado. El datagrama IP es enviado a la capa de enlace de la pila TCP/IP, y es conocido como trama. La capa de enlace antepone el encabezado a la trama a los datagramas IP para llevarlo a través del medio físico, por ejemplo Ethernet.

La cabecera de una capa hace parte de los datos en la siguiente capa. En el ámbito UDP, el paquete es llamado datagrama. No confundirlo con el datagrama TCP cuyo nombre similar describe al paquete de la capa IP.

El proceso se repite inversamente cuando la trama llega al host de destino y todos los encabezados son removidos al pasar por los respectivos protocolos de capa superior. Cada capa de la pila TCP/IP incluye mensajes para comunicarse con la capa similar de host de recepción.

Interpretación del encabezado

Cuando se ejecutan todas las capas en un paquete, este se ve como un gran conjunto de 0s y 1s adyacentes. ¿Cómo interpretarlo? Suponiendo que estamos buscando la cabecera IP. ¿Cómo saber qué tipo de protocolos se han incluido? Sin duda necesitamos conocer el protocolo para poder interpretar el paquete adecuadamente. El término "Protocolo" se usa para designar un conjunto de acuerdos entre reglas o formatos. Cada protocolo (IP, TCP, UDP, e ICMP) tiene sus propias formas de comunicación y formatos.



La figura anterior muestra un ejemplo de la estructura del encabezado IP, el cual asigna un número de bits a cada campo. El campo de protocolo identifica el protocolo embebido(incorporado). Cada fila que se ve en la cabecera IP es de 32 bits (de 0 a 31), es decir, cuatro bytes.

Para complicar las cosas un poco, empezaremos a contar las posiciones de los bytes desde 0. La primera fila representa los bytes 0 a 3, la segunda fila representa los bytes de 4 a 7, y la tercera fila representa bytes de 8 a 11. Observe el circulo en el campo Protocolo que está en la tercera fila. El campo anterior tiempo de vida (TTL -TimeToLive) es un octeto de 1 byte de longitud en el octavo byte, y el campo de Protocolo, que también tiene una longitud de 1 byte, representa el noveno byte. Esto significa que el noveno byte (en realidad, es el byte 10,  recuerde comenzar a contar desde 0) indica el protocolo incluido. El punto es que la mayoría de los paquetes en sus respectivos niveles son posiciónales, los campos son identificados al conocer su ubicación en el paquete.

Ahora que hemos contado el camino hasta el campo Protocolo, su valor nos indica qué protocolo se encuentra en los datos adjuntos. Suponiendo que el valor encontrado en este byte es 17 en decimal,  el cual representado en hexadecimal es 11. Esto significa que después de la cabecera IP hay un paquete UDP. El valor 6 significa que hay un paquete TCP y el valor 1 significa que es un Protocolo de Mensajes de Control de Internet (ICMP -Internet Control Message Protocol).

Base 16 Hexadecimal

Hemos aprendido que un número binario tiene una base 2 y se compone de 0s y 1s. Este es el sistema de numeración que utilizan los computadores para representar los datos. ¿Por qué complicar el asunto con otro sistema nuevo de numeración en base 16 (o hexadecimal)? El dilema es que se necesitan muchos bits para representar cualquier número grande, por lo tanto, el manejar tanta información binarios puede complicarnos la vida fácilmente. La notación Hexadecimal abrevia los números binarios. 4 bits binarios se pueden sustituir un carácter hexadecimal (2^4 = 16).

Consideremos por ejemplo, el campo de cabecera del protocolo IP que es de 8 bits. Este se puede convertir en 2 caracteres hexadecimales. El decimal 17 en el campo de protocolo, significa que el protocolo incluido es UDP. ¿Cómo convertir el decimal 17 a el hexadecimal 11?


Aquí tenemos las potencias binarias de un byte. Para representar el decimal 17, es necesario tener el bit correspondiente a 16 (2^4) en 1, y el bit (2^0) en 1, es decir, 16 + 1 = 17. Estos han sido agrupados en dos dígitos hexadecimales, dos grupos de 4 bits o caracter hexadecimal. Los 4 bits de la izquierda (también conocidos como de orden superior o bits más significativos) tienen el valor 0001. Del mismo modo, los 4 bits más a la derecha (también conocidos como de orden inferior o bits menos significativos) tienen un valor de 0001. Cada carácter representa valores hexadecimales de 0 a 15. Cada uno tiene un bit menos significativo de valor 1 en 2^0, por lo que el valor hexadecimal es 11 (también conocido como 0x11, donde 0x lo identifica como hexadecimal.

Si tienes información adicional sobre este tema, tus comentarios o links de referencia son bienvenidos. 

No comments: