¿Qué conforma una cabecera de un paquete IP?
El uso del Protocolo de Internet (IP) es fundamental para el desarrollo de las comunicaciones de Internet como las conocemos. Pero, ¿sabes qué contiene por dentro?
¿Alguna vez te has preguntado cómo los dispositivos en internet saben a dónde enviar la información? La clave está en las direcciones IP, un sistema que permite la comunicación en la red y hace posible todo lo que hacemos en línea. Sin ellas, la comunicación en internet simplemente no sería posible.
Una dirección IP permite identificar a un host en la red, ya sea de manera privada o de forma pública, es decir, en Internet, donde el ISP es quien provee dicha dirección para navegar en línea.
Digamos que una IP define el barrio o la casa en el que te encuentras, en caso tal de que te mudes a otro sitio, la dirección cambiará.
Lo cierto es que, para que las IP tengan sentido, es necesario que dos host estén conectados y envíen datos. Si bien no vamos a hacer énfasis en este artículo sobre dicho proceso, es importante recalcar que los datos deben ser encapsulados a través de las diferentes capas hasta llegar a ser simplemente bits.
Por ejemplo, supongamos que un usuario realiza una petición HTTP a una página web. Los datos deben pasar por el proceso de encapsulamiento, donde se va agregando los protocolos correspondientes que conforman la unidad de datos (PDU) final.
Mientras en la capa de transporte el PDU es el segmento y el capa de enlace de datos el PDU es la trama, para la capa de red el PDU es el paquete.
Un paquete de red está justamente conformado por la unión entre los datos inicialmente solicitados en la capa de aplicación, sumado al protocolo de dicha capa (que podría ser HTTP), además del protocolo de transporte y el protocolo de Internet.
Existen dos protocolos de Internet extremadamente populares: IPv4 o IPv6.
El principal motivo de la creación de IPv6 está basado en las limitaciones que significaba la versión anterior. Igualmente, esto no indica que IPv4 se haya vuelto obsoleto, pero es algo que eventualmente sucederá al tener una cantidad de bits para direcciones IP limitado.
Mientras IPv4 puede proveer hasta 4 mil millones de direcciones IP posibles (lo que implica también el uso de sistemas NAT para distinguir entre direcciones privadas y públicas), IPv6 permite alcanzar un máximo insólito para la actualidad de 340 undecillones de direcciones, es decir, un 1 seguido de 36 ceros. En términos coloquiales, probablemente nunca alcancemos ese número, al menos en el mediano plazo.
A pesar de esto, tanto IPv4 e IPv6 conviven simultáneamente. Si nos fijamos en nuestra configuración propia de la dirección IP (ipconfig en el cmd), podremos observar que se muestra información tanto para IPv4 como para IPv6, teniendo una IP privada de ambos protocolos.
Retomando con el encapsulamiento, cuando el segmento llega a la capa de red se le debe incrustar el protocolo de Internet que corresponda. De este modo, quedará conformado el paquete.
¿Pero alguna vez te has preguntado qué contiene específicamente un paquete? Vamos a averiguarlo.
Desglosaremos una cabecera de un paquete IPv4 e IPv6 para ver qué información contiene.
¿Qué es una cabecera IP?
La cabecera IP es utilizada para asegurarse que el paquete es entregado al siguiente destino en su camino hasta llegar al dispositivo final.
Consiste en campos que contienen información importante sobre el paquete. Estos campos tienen valores binarios que son examinados por el proceso de la capa 3 (red).
¿Qué contiene una cabecera IPv4?
Una cabecera IPv4 se ve de esta manera:
Los campos son:
Versión: Está conformada por un valor de 4 bits (0100) que identifican que este paquete en concreto es IPv4.
Internet Header Length (IHL): Es un campo de 4 bits que indica la longitud de la cabecera en múltiplos de 4 bytes. Su valor mínimo es 5 (20 bytes) y el máximo es 15 (60 bytes). Por ejemplo, si el IHL es 10, la cabecera mide 40 bytes (10 x 4). Se usa para determinar dónde comienza la información útil del paquete.
Differentiated Services - DiffServ (DS): También se lo suele llamar Type of Service (ToS) y es un campo de 8 bits que se usa para determinar la prioridad de cada paquete. Tenemos dos campos importantes en este apartado:
Differentiated Service Code Point (DSCP): Conforman los primeros 6 bits de este campo y se usa para clasificar el tráfico de red y priorizar ciertos paquetes sobre otros, lo que permite aplicar mecanismos de calidad de servicio (QoS). Por ejemplo, un paquete con un DSCP alto puede recibir prioridad en la transmisión frente a otros con un valor más bajo. Son los más significativos.
Explicit Congestion Notification (ECN): Conforman los 2 bits restantes del campo e indican si hay congestión en la red y permiten a los dispositivos de red y sistemas finales reaccionar sin necesidad de descartar paquetes. Funciona junto con TCP para reducir la velocidad de transmisión en caso de congestión.
Time to Live (TTL): Contiene un campo de 8 bits que es usado para limitar el tiempo de vida de un paquete, haciendo que no circulen de por vida por la red . El dispositivo de origen es quien establece el valor TTL inicial, el cual decrece de a un valor cuando es procesado por un router, es decir, cuando se produce un hop. Si el TTL cae a 0, entonces el router va a descartar el paquete y envía una traza ICMP de Time Exceeded Message a la IP origen que indica que el paquete ya no puede ser procesado y debe enviarse nuevamente. Debido a que el router reduce el TTL de cada paquete, el dispositivo debe recalcular el Header Checksum, que es un código que detecta errores en la cabecera IP utilizado para descartar paquetes que hayan sufrido errores de transmisión.
Protocol: Este campo de 8 bits es utilizado para identificar el protocolo del siguiente nivel del modelo de capas, como puede ser ICMP (1), TCP (6) y UDP (17). Esto permite a la capa de red pasar el paquete al protocolo apropiado y que fue seleccionado.
Header Checksum: Es utilizado para detectar posibles corrupciones en la cabecera IPv4.
Dirección IPv4 de Origen: Es un campo de 32 bits que representa la dirección IP de origen que envía el paquete. Siempre será una dirección unicast.
Dirección IPv4 de Destino: Es un campo de 32 bits que representa la dirección IP de destino que recibe el paquete. Puede ser unicast, multicast o broadcast.
Tanto la dirección IPv4 de origen y destino no suelen variar mientras el paquete viaja, siendo los campos más comunes.
Por otro lado, el IHL, Total Lenght y el Header Checksum son campos que están centrados en la identificación y validación del paquete.
Otros campos, como las Flags, el Identification o el Fragment Offset son usados para reordenar y fragmentar el paquete.
Así se observa un paquete IPv4 en la herramienta de Wireshark:
¿Qué diferencias hay entre una cabecera IPv6 y una cabecera IPv4?
Recordemos que una de las ideas por las cuales se propuso una nueva versión de IP fue que había que optimizar este protocolo. Las limitaciones en el número de IP que se podían seleccionar, así como también el uso constante de mecanismos como NAT, hicieron que IPv6 se centre principalmente en la optimización.
Una de las mayores ventajas de IPv6 es la forma en la que se simplificó su cabecera IP. Mientras una cabecera IPv4 consiste en un número de campos variables de hasta 60 bytes, una cabecera IPv6 tiene un menor número de campos.
Por otro lado, hay campos que en la cabecera IPv6 desaparecen, otros se mantienen y algunos cambian de nombre y posición. Esto arroja un valor fijo de 40 bytes.
¿Qué contiene una cabecera IPv6?
Los campos son:
Version: Está conformada por un valor de 4 bits (0110) que identifican que este paquete en concreto es IPv6.
Traffic Class: Es un campo de 8 bits que equivale al Differentiated Services (DS) de IPv4.
Flow Label: Es un campo de 20 bits que sugiere que todos los paquetes tengan el mismo tratamiento por parte de los routers. Se usa para distinguir flujos de tráfico sin depender de la dirección IP y el puerto. Esto permite que un paquete UDP o un paquete VoIP, entre otros, sean optimizados de igual manera para evitar que un router analice cada paquete individualmente, fomentando una mejor calidad de servicio.
Payload Length: Es un campo de 16 bits que indica el tamaño de la porción de los datos o payload de un paquete IPv6. No incluye la longitud de la cabecera como tal, ya que es fijo en 40 bytes.
Next Header: Es un campo de 8 bits que equivale al campo de protocolo usado en IPv4.
Hop Limit: Es un campo de 8 bits que equivale al campo de TTL usado en IPv4. A diferencia de IPv4, IPv6 no incluye un Header Checksum, pues esta función es dirigida en otras capas, no en la capa de red. Al no aplicarse este proceso por un router, mejora el rendimiento de la red. Un caso interesante es si el paquete tiene como protocolo ICMPv6. ICMPv6 usa un Hop Limit de 255 (alto) en ciertos mensajes para evitar que sean reenviados por routers. Esto es una medida de seguridad, pues si el Hop Limit termina siendo menor, entonces algún router lo mandó por fuera de la red, algo que no debería suceder. Además que ICMPv6 suele ser utilizado para enviar a direcciones multicast link-local, por eso el Hop Limit elevado en comparación con los clásicos 64 y 128.
Dirección IPv6 de Origen: Es un campo de 128 bits que representa la dirección IP de origen que envía el paquete.
Dirección IPv6 de Destino: Es un campo de 128 bits que representa la dirección IP de destino que recibe el paquete.
Un paquete IPv6 puede contener Extension Headers (EH), que se usan para proveer información adicional de la capa de red, como cuestiones de fragmentación, seguridad y soporte.
A diferencia de IPv4, los routers no fragmentan los paquetes IPv6.
Así se ve un paquete IPv6 utilizando la herramienta de Wireshark:
Si te resultó valioso, me ayudaría mucho que puedas darme una ayuda contribuyendo a que pueda crear más contenido. Lo agradeceré muchísimo!