Cabeceras de los paquetes de internet

Cabeceras de los paquetes de internet

En las redes de conmutación de paquetes, como es Internet, el flujo de datos a transmitir se divide en trozos pequeños (paquetes) que son transmitidos de forma independiente. Al llegar al destino, los paquetes se vuelven a unir para formar de nuevo el flujo de datos original. Para controlar todo esto, a cada paquete se le añade una cabecera con la información suficiente para que alcance el destino y se puedan reorganizar los datos para reproducir el flujo original.

Las comunicaciones en Internet se producen entre aplicaciones. Esto quiere decir que se interconectan un programa navegador web con el servidor al que está conectado o un programa cliente de correo electrónico con su buzón, por ejemplo. El formato del flujo de datos que se intercambian entre estos programas está definido por esas aplicaciones. Los más comunes son: HTTP para el servicio web o SMTP, IMAP o POP para el correo electrónico. Estos formatos forman parte de lo que en el modelo de Internet se conoce como formatos o protocolos de la capa de aplicación.

El flujo de datos se transmite divididos en paquetes
El flujo de datos se transmite divididos en paquetes

El flujo de datos que sale de la aplicación de origen tiene que llegar a la aplicación de destino. Como este flujo de datos puede llegar a ser muy largo, si se transmitiese tal cual, en el caso de producirse el más mínimo error, habría que empezar de nuevo la transmisión desde el principio. Para evitar esto, el flujo de datos se divide en trozos pequeños llamados paquetes y se envían de forma independiente. En el caso de error, solo hay que reenviar el paquete afectado. Cada paquete puede tener un tamaño entre 576 y 65.535 bytes (aunque con IPv6 pueden llegar a ser mayores).

A cada paquete se le añade dos tipos de cabeceras:

  • TCP o UDP. Cabecera de la capa de transporte. Esta cabecera añade los datos de control necesarios para que los datos troceados que salen de una aplicación de origen, lleguen a su aplicación correspondiente de destino. Esta cabecera no tiene en cuenta cómo están interconectados los terminales que alojan ambas aplicaciones. Simplemente confía en que lo que sale de un terminal le llegue al otro. Como una terminal (ordenador, smartphone, servidor, etc.) puede tener más de una aplicación funcionando simultáneamente, esta cabecera identifica la aplicación dentro de cada terminal.
  • IPv4 o IPv6. Cabecera de la capa de de red. Esta cabecera añade los datos de control necesarios para que los datos que salen del terminal de origen lleguen al terminal de destino. Los datos de esta cabecera se utilizan para mover los paquetes por la red. El dato fundamental en esta cabecera es la dirección IP de ambos terminales.

Por tanto, el flujo de información original se divide en paquetes y, a cada paquete, se le añaden los datos de la cabecera de transporte (formato TCP o UDP) y los datos de la cabecera de red (formato IPv4 o IPv6). Estos datos de control de las cabeceras tienen un formato particular que está regulado. Esto permite que los terminales de destino sepan cómo leer la cabecera TCP/UDP para pasarle los datos a la aplicación correcta. Por otro lado, los routers que forman la red Internet, incluido el que está en el domicilio del usuario, sepan cómo leer la cabecera IP para llevar los datos al terminal de destino.

Para saber más sobre el modelo de capas y los protocolos de Internet se puede consultar el artículo: Cómo funcionan los protocolos de Internet.

Qué es TCP y UDP

TCP y UDP son dos protocolos de la capa de transporte del modelo de Internet. Fundamentalmente se encargan de identificar la aplicación de origen y destino de la comunicación dentro de cada terminal, trocear el flujo de datos que sale de la aplicación de origen y asegurarse de que los paquetes se reensamblan en el orden correcto antes de entregar los datos a la aplicación de destino.

Lo que identifica a cada aplicación dentro de un mismo terminal es el el número de puerto. Por otro lado, para poder reordenar los paquetes se incluye un número de orden (secuencia) en la cabecera de cada paquete.

Independientemente de lo anterior, en Internet se dan dos tipos de comunicaciones:

  • TCP. Transmite los datos exactos. Se utiliza cuando es importante que lo que llegue al destino se corresponda exactamente con lo salió del origen.
  • UDP. Transmite datos en tiempo real. Cuando se transmite voz y vídeo, importa más la velocidad de transmisión del flujo de datos, que el hecho de que algún paquete no sea exacto.

Los servicios como correo electrónico, transferencia de archivo o web, necesitan que la información generada en un extremo de la conexión llegue al otro extremo en el orden original y sin que se haya perdido o duplicado ningún byte. Para estos casos, el protocolo adecuado es TCP (Transmission Control Protocol, ‘Protocolo de Control de Transmisión’). Este protocolo proporciona un flujo fiable de bytes en los dos sentidos de la conexión. Garantiza que los bytes que salen de la aplicación origen sean entregados a la aplicación de destino de una forma exacta, en su mismo orden y sin duplicación. TCP es lo que se conoce como protocolo orientado a la conexión.

Cuando se necesita transmitir voz o vídeo, es más importante transmitir con velocidad que garantizar el hecho de que lleguen absolutamente todos los bytes, o de que no haya ningún byte duplicado. Para estos casos, el protocolo de transporte utilizado es UDP (User Datagram Protocol, ‘Protocolo de Datagrama de Usuario’). UDP no tiene mecanismos para confirmar la recepción de los paquetes, por lo que, entre los paquetes enviados con este protocolo, algunos pueden llegar desordenados, duplicados o puede que no lleguen. UDP es un protocolo no orientado a la conexión.

El protocolo UDP puede ser especialmente útil en aquellas redes que ya son suficientemente fiables por sí mismas, para aquellas comunicaciones que no requieren más de un paquete, para aquellos servicios que disponen de sus propios procedimientos de corrección de error o para servicios de transmisión de voz o vídeo donde la velocidad es más importante que la fiabilidad.

Aunque TCP y UDP son los protocolos de la capa transporte más utilizados por las aplicaciones de Internet, en realidad existe una larga lista de protocolos de este tipo. La IANA (Internet Assigned Numbers Authority, ‘Agencia de Asignación de Números de Internet’) dispone de una lista completa que actualmente contiene 134 protocolos (www.iana.org/assignments/protocol-numbers).

Cada aplicación tiene establecido el protocolo de la capa de transporte que va a utilizar. Evidentemente, ese protocolo lo tienen que saber manejar tanto un extremo como otro de la comunicación.

Cabecera de los paquetes TCP y UDP

Los componentes, los campos, de la cabecera del protocolo TCP son los siguientes:

  • Puerto origen. Son 16 bits que representan el número de puerto del equipo remitente. Este número identifica la aplicación concreta que transmite los datos. Existen números de puertos ya asignados a ciertas aplicaciones conocidas. Por ejemplo, este es el caso del puerto 80, asignado al programa servidor de páginas Web.
  • Puerto de destino. Se trata de 16 bits que representan el número de puerto del equipo destino. Este número identifica la aplicación concreta del equipo de destino que recibirá los datos.
  • Número de secuencia (Sequence number). Es un número secuencial de 32 bits dedicado a asegurar que los paquetes en el destino son reensamblados en el orden correcto.
  • Confirmación (Acknowledgement). El extremo que envía el paquete le indica al otro extremo que ha recibido correctamente todos los paquetes anteriores a este número.
Formato de la cabecera de un paquete TCP
Formato de la cabecera de un paquete TCP
  • Tamaño (Offset). Indica la cantidad de bloques de 32 bits incluidos en la cabecera del paquete.
  • Reservado. Se trata de 6 bits que están siempre puestos a cero.
  • Indicadores (Flags). Se trata de 6 bits dedicados a determinadas labores de control. El objetivo de cada uno de ellos es el siguiente:
    • URG. Urgencia. Cuando está a uno le indica al receptor que lea el dato del campo Puntero de urgencia.
    • ACK. Cuando está a uno le indica al receptor que este paquete incluye un número de confirmación.
    • PSH. Envío forzado (Push). Cuando está a uno le indica a la capa TCP del destino que debe pasar a la capa aplicación estos datos sin demora. Esto evita que los datos puedan estar esperando en TCP a que se complete un segmento. En ocasiones, una aplicación necesita estar segura de que la aplicación de destino ha recibido todos los datos enviados.
    • RST. Inicializar (Reset). Indica que se corte la conexión actual.
    • SYN. Sincronización. Este bit se pone a uno en el primer paquete de una sesión TCP para indicarle al destino que empiece a contar la secuencia de números de los paquetes. Este bit nunca estará a uno durante el resto de la sesión.
    • FIN. Indica que el remitente ha terminado de enviar datos. Esto hace que se termine la sesión.
  • Ventana (Window). Indica el número de octetos (bytes) que puede aceptar el destinatario. Esta información la envía el destinatario con cada paquete de confirmación (Acknowledgment). El emisor no puede enviar más datos, octetos, que los indicados por este tamaño de ventana.
  • Suma de verificación (Checksum). Este valor se utiliza para comprobar la integridad de la cabecera y de los datos. La suma de verificación de los paquetes IP verifica la integridad de la cabecera, pero la de los paquetes TCP comprueba también la integridad de los datos.
  • Puntero de datos urgentes.Cuando el indicador URG está a uno, indica cuál es el último byte de datos que es urgente. Al destinatario le sirve para saber cuántos datos urgentes llegan. Este campo lo utilizan algunas aplicaciones como Telnet o FTP.
  • Opciones. Este espacio hace posible que determinadas aplicaciones puedan intercambiarse parámetros adicionales.
  • Relleno (Padding). Se tratan de bits de relleno para completar los 32 bits no cubiertos por los datos de opciones.

El valor del campo Ventana depende del tiempo que necesita un paquete para viajar de un extremo a otro. Es lo que se conoce como latencia. Tiempos menores a 100 milisegundos se considera una latencia baja, mientras que tiempos mayores a 200 milisegundos se considera una latencia alta. Los tiempos normales están entre ambos valores. A mayor tamaño de ventana menor latencia.

Formato de la cabecera de un paquete UDP
Formato de la cabecera de un paquete UDP

Para comprobar la latencia de nuestra conexión se puede utilizar la utilidad Tracert, presente en la mayoría de los sistemas operativos. Por otro lado, en Windows se puede modificar el tiempo de latencia con la utilidad Regedit.

En cuanto a los paquetes UDP, este protocolo es muy ligero y su cabecera sólo necesita estos datos:

  • Números de puerto origen.
  • Número de puerto destino.
  • Longitud del paquete UDP.
  • Suma de verificación.

Qué es IPv4 e IPv6

Desde principios de los años 70, el sistema de direccionamiento utilizado en Internet ha sido el denominado IPv4 (versión 4 del protocolo IP). Este sistema utiliza 32 bits para identificar cada una de las direcciones de los equipos conectados a Internet. Esto da capacidad para casi 4.300 millones de direcciones (4.294.967.296 direcciones exactamente). Sin embargo, los creadores de IPv4 no imaginaron el gran éxito que iba a tener este protocolo IP en tan poco tiempo.

El hecho es que esta capacidad resultó ser muy escasa para las necesidades de la red. En Norteamérica no se notó tanto este problema, pero en Japón o Europa el problema era creciente debido al desarrollo de las redes de telefonía celular y de tecnologías de banda ancha (fibra óptica, xDSL y WiMax). El problema se vuelve grave en muchos países europeos del este, asiáticos o africanos que sólo tenían una clase C (255 direcciones) para todo el país.

El hecho es que, en poco tiempo, se pasó de utilizar una dirección IP por cada diez usuarios (1:10) a tener una relación 1:1. Incluso con la introducción de dispositivos ‘siempre conectados’ se espera que esta tendencia llegue en un futuro no muy lejano a 50:1 o 100:1.

IPv6 viene a resolver el estas limitaciones ya que aporta 128 bits de direccionamiento. Esto da capacidad para tener 340.282.366.920.938.463.463.374.607. 431.768.211.456 direcciones.

Aparte de lo anterior, IPv6 aporta los siguientes valores:

  • Seguridad intrínseca en el núcleo del protocolo (IPSec).
  • Facilidades de Calidad de servicio (QoS) y Clase de servicio (CoS).
  • Multicast: envío de un mismo paquete a un grupo de receptores.
  • Anycast: envío de un paquete a un receptor dentro de un grupo.
  • Paquetes IP eficientes y extensibles, sin fragmentación de los paquetes en los routers, con cabecera de longitud fija y más simple.
  • Posibilidad de enviar paquetes con una carga útil (información real) de más de 65.535 bytes.
  • Permite un enrutamiento más eficiente gracias a disponer de una jerarquía de direccionamiento basada en la agregación.
  • Renumeración y multihoming. Multihoming permite que una red tenga varios accesos diversificados a Internet.
  • Características de movilidad. Esto permite facilitar servicios sin limitaciones a los terminales móviles.

Para más información sobre IPv6 se pueden consultar las siguientes direcciones: www.ipv6forum.com o www.ipv6-taskforce.org.

Cabecera de los paquetes IPv4

Como hemos visto anteriormente, las cabeceras de los paquetes IP contienen todo un conjunto de datos necesarios para garantizar que el paquete se mueva rápidamente por Internet hasta alcanzar el terminal de destino. La cabecera de los paquetes IPv4 está formada por los siguientes datos:

  • Versión. Se trata de 4 bits que indican el número de la versión del protocolo IP utilizado.
  • IHL (Internet Header Length, ‘Longitud de la Cabecera’). Indica la longitud de la cabecera en conjunto de 32 bits. Generalmente, el valor es 5 (160 bits), aunque puede ser mayor si se añaden determinadas opciones al final de la misma.
  • TOS (Type of Service, ‘Tipo de Servicio’). Se trata de ocho bits que se utilizan para fijar prioridades de confiabilidad y velocidad utilizadas por algunos servicios. Para la voz es más importante realizar la entrega de forma rápida que precisa, mientras que para la transferencia de archivos es más importante que no haya errores que la velocidad.
  • Longitud total. Indica la longitud total del paquete.
  • Identificación. Se trata de un número de identificación utilizado para poder reensamblar los paquetes en el orden original.
  • Indicadores (Flags). Se trata de tres bits utilizados por los routers que manejan los paquetes:
    • El primer bit no es utilizado y está siempre a cero.
    • El segundo bit se utiliza para indicar que el paquete ha sido fragmentado. Un paquete puede tener una longitud mayor que la que pueden manejar determinados routers. Para resolver esto, el router fragmenta el paquete en partes más pequeñas y pone este bit a uno para indicar que el paquete está fragmentado. Generalmente, los fragmentos son de 576 bytes, el mínimo permitido, lo que evita que un paquete sea fragmentado dos veces.
    • El tercer bit indica que el paquete no debe fragmentarse porque el destino no es capaz de reensamblarlo. Si fuese necesaria una fragmentación y este bit estuviera a uno, simplemente se eliminaría el paquete y se informaría al remitente.
  • TTL (Time to Live, ‘Tiempo de Vida’). Es un valor de 8 bits que se decrementa, generalmente en una unidad, cada vez que el paquete pasa por un router. El router que hace que este valor llegue a cero desecha el paquete (lo elimina) e informa al remitente. Por tanto, un paquete puede atravesar un máximo de 255 routers intermedios. El objetivo de este valor es impedir que los paquetes se queden perdidos indefinidamente dando vueltas por la red.
  • Protocolo. Se trata de un valor de 8 bits que indica el protocolo de la capa transporte o aplicación que ha creado el paquete. TCP es uno de estos protocolos. El documento RFC1700 (www.faqs.org/rfcs/rfc1700.html) contiene un listado de estos protocolos. No obstante, esta lista no está actualizada. Puede encontrar un listado más actualizado en www.iana.org/assignments/port-numbers.
  • Suma de verificación (Checksum). Este valor se utiliza para comprobar la integridad de la cabecera. Se asegura de que los ceros y unos que la componen son los mismos que salieron del origen.
  • IP remitente. Se trata de la dirección IP del equipo que envía el paquete.
  • IP destino. Se trata de la dirección IP del equipo de destino del paquete.
  • Opciones. El campo de opciones sólo se utiliza en determinados casos, y puede contener información adicional necesaria para la comunicación. Por ejemplo, el Departamento de Defensa de Estados Unidos lo utiliza para indicar una clasificación de seguridad. También puede utilizarse para especificar la ruta a seguir por el paquete, o para registrar la ruta seguida por el mismo. Generalmente no se suele utilizar este campo.
Formato de la cabecera de un paquete IPv4
Formato de la cabecera de un paquete IPv4

Cabecera de los paquetes IPv6

Las cabeceras de los paquetes IPv6 realizan básicamente el mismo trabajo que la de los paquetes IPv4. No obstante, se ha aprovechado el cambio de versión para realizar algunas modificaciones en la cabecera. Se han suprimido varios campos, renombrado otros y añadido uno nuevo. El campo añadido es el siguiente:

  • Etiqueta de flujo. Se utilizan para las funciones de calidad de servicio o QoS. Le permite al router realizar determinadas acciones para priorizar el tráfico de voz o video en tiempo real. Requiere de 20 bits.
Formato de la cabecera de un paquete IPv6
Formato de la cabecera de un paquete IPv6

Los campos renombrados son: tipo de servicio, longitud total, TTL y protocolo. Con IPv6 toman los nombres: clase de tráfico, longitud de datos, límite de saltos y cabecera siguiente, respectivamente.

Además de lo anterior, la versión IPv6 ha incluido la posibilidad de añadir campos adicionales a la cabecera. La idea es que, si en un futuro se desarrollan servicios que requieren enviar otra información distinta en la cabecera, que haya un sistema que lo permita. A esta información adicional se le llama cabecera de extensión e iría a continuación de la cabecera IPv6. En el campo cabecera siguiente de IPv6 iría el tipo de cabecera de extensión que se incluye a continuación.

Actualmente hay definidas 6 tipos de cabeceras de extensión (RFC 2460), aunque el protocolo está abierto a que se puedan definir más, si fuese necesario. Las extensiones que están definidas tienen que ver con el envío de información adicional sobre cifrado, fragmentación, enrutado, etc.

Colocación de las cabeceras de extensión de IPv6
Colocación de las cabeceras de extensión de IPv6

Otros paquetes de control

El intercambio de datos entre las aplicaciones de origen y destino se produce, básicamente, con las cabeceras indicadas anteriormente. No obstante, a veces es necesario intercambiarse otro tipo de paquetes. Por ejemplo, para resolver los posibles problemas de comunicación que se puedan presentar existen los paquetes ICPM. Existe todo un conjunto de mensajes de control ICPM definidos en la norma RFC 792. Por ejemplo, si un router o equipo terminal no tiene memoria suficiente para seguir gestionando todo el tráfico que le está está llegando, con un paquete ICPM le informar al origen que vaya más lentamente.

También existen los paquetes ARP. Estos paquetes se utilizan para preguntarle al destinatario de una dirección IP cuál es su dirección MAC. Algunas redes locales necesitan de este dato para gestionar el direccionamiento interno. El número MAC es un número único que tiene cada dispositivo de comunicación que se fabrica. Aunque el paquete ARP es de la capa de enlace, nos sirve para ilustrar la necesidad de envío.

Establecimiento de una sesión TCP

Como se ha visto anteriormente, la diferencia principal entre UDP y TCP es que el primero permite enviar información muy rápidamente, ya que no es necesario establecer una conexión con el receptor ni esperar una respuesta. Sin embargo, las comunicaciones con TCP requieren que se inicie una sesión antes del intercambio de datos. De igual modo, cuando se termina la comunicación hay que cerrar dicha sesión. La apertura y cierre de sesión se lleva a efecto intercambiándose algunas cabeceras TCP sin carga de datos, sin añadir datos.

La cabecera TCP tiene un campo llamado Indicadores (Flags) que se utiliza para labores de control. Una de esas labores es el inicio y cierre de sesión. Para ello se hace uso de los bits SYN (sincronización), ACK (confirmación) y FIN (terminar).

Una sesión TCP se inicia con el envío de un paquete TCP, con el bit SYN puesto a uno y un número de secuencia inicial indicado en el campo número de secuencia. El extremo B responde con un paquete con los bits SYN y ACK puestos a uno, su propio número de secuencia, y el número de confirmación igual al número de secuencia enviado por el extremo A más uno.

Cuando el extremo A recibe este paquete considera que la sesión se ha establecido y responde con un paquete con el bit ACK a uno y el número de confirmación igual al número de secuencia enviado por el extremo B más uno. Con esto, el extremo B considera también que la sesión está establecida. A partir de este momento los datos pueden fluir en cualquier dirección. A este procedimiento de establecimiento de sesión se le conoce como establecimiento en tres pasos (Three way Handshake).

Establecimiento de sesión en tres pasos
Establecimiento de sesión en tres pasos

Además de los datos anteriores, el extremo A debe incluir en su primer paquete el número de puerto de destino y de origen. El número de puerto de destino depende del tipo de servidor al que se conecte. Por ejemplo, para un servidor Web el número de puerto sería el 80 y para un servidor FTP el 20. Por su parte, el número de puerto origen dependerá de la aplicación utilizada. En cualquier caso, se tratará de un número entre 1.024 y 65.536.

En el flujo de la comunicación se puede dar la circunstancia de que un equipo envíe datos más rápidamente de lo que el otro equipo puede asimilar. Cada equipo va guardando los datos que va recibiendo del otro extremo en una memoria intermedia llamada ventana. Cuando lee los datos de la ventana la vacía y envía un mensaje de confirmación al remitente. Por tanto, en el peor de los casos (que se quede bloqueado), un equipo siempre podrá recibir, al menos, los bytes que le quepan en la ventana. Esto quiere decir que, entre cada mensaje de confirmación, cada extremo sólo debe enviar, como máximo, el número de bytes de la ventana del otro extremo. El campo ventana está incluido en todos los paquetes TCP, por lo que cada extremo de la comunicación es consciente de las limitaciones del otro extremo.

Para cerrar la sesión se sigue un proceso de cuatro pasos. El terminal A envía un paquete con el bit FIN puesto a uno. El terminal B le responde con ACK puesto a uno (confirmando la recepción de FIN) y a continuación envía el bit FIN puesto a uno. Para terminar, el terminal A responde con ACK puesto a uno (confirmando la recepción de FIN). En este momento la sesión queda cerrada.

Más información

REF: FW-PG47

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *