El Protocolo de Internet (IP) es la lingua franca de las redes modernas. Define cómo se encapsula la información en paquetes, cómo se identifican los extremos y cómo se toman decisiones de reenvío independientemente del medio físico.
Lejos de ser un protocolo aislado, IP es el pegamento que mantiene unido al resto del stack: se sienta sobre la capa de enlace, transporta los segmentos de transporte y convive con mecanismos de diagnóstico como ICMP. En este tema profundizaremos en su razón de ser, sus características operativas y los componentes del encabezado que permiten que millones de routers lo interpreten de forma uniforme.
IP fue diseñado para direccionar y encaminar paquetes entre redes autónomas. Su meta es entregar datos desde un origen hasta un destino que pueden pertenecer a organizaciones y tecnologías distintas, por lo que debe abstraer la diversidad de medios físicos, topologías y políticas administrativas.
Para cumplir con ese objetivo, IP provee:
IP ofrece un servicio de mejor esfuerzo y no orientado a conexión:
Estas decisiones mantuvieron al protocolo simple y escalable. La complejidad reside en los routers y en los algoritmos de enrutamiento, no en el encabezado mismo, lo cual permitió que se implementara incluso en hardware limitado.
Sin importar la versión, un paquete IP se compone de encabezado y datos. El encabezado porta la información mínima para que los dispositivos tomen decisiones correctas; la carga útil transporta los datos de capas superiores.
| Campo | Descripción | Impacto operativo |
|---|---|---|
| Versión | Indica si el paquete es IPv4 (4) o IPv6 (6). | Permite que los nodos usen el parser correcto. |
| IHL / Longitud de encabezado | Define cuántos bloques de 32 bits ocupa el encabezado. | Los routers saben dónde comienzan los datos. |
| Tipo de servicio / DSCP | Marca prioridades o clases de servicio. | Habilita QoS y políticas de tráfico. |
| Longitud total | Tamaño combinado de encabezado y datos. | Evita lecturas fuera de rango. |
| Identificador, flags y offset | Campos destinados a la fragmentación. | Los fragmentos se reensamblan correctamente. |
| TTL / Hop Limit | Número máximo de saltos permitidos. | Previene bucles de enrutamiento. |
| Protocolo / Next Header | Indica la capa superior (TCP, UDP, ICMP). | El host destino entrega la carga al proceso adecuado. |
| Checksum | Suma de verificación del encabezado. | Detecta corrupciones antes de reenviar. |
| Direcciones origen/destino | Identifican al emisor y receptor. | Base del ruteo y los filtros de seguridad. |
En IPv6 varios campos se simplifican (por ejemplo, se elimina el checksum) para acelerar el procesamiento y permitir extensiones más flexibles.
El Time To Live (TTL), renombrado Hop Limit en IPv6, es un contador que decrece en cada router atravesado. Si llega a cero, el paquete se descarta y se envía una notificación ICMP al origen. Esto evita que el tráfico quede atrapado en un circuito infinito.
La fragmentación ocurre cuando un paquete supera la MTU del siguiente enlace. IPv4 permite que cualquier router fragmente; IPv6 delega la tarea únicamente al host de origen, reduciendo la carga en la red. Cada fragmento lleva:
El receptor reensambla fragmentos con el mismo identificador y dirección origen/destino hasta reconstruir el datagrama completo. Si falta un fragmento tras un tiempo prudencial, se descarta todo el conjunto para evitar inconsistencias.
En Windows puedes inspeccionar cómo se comporta IP mediante comandos nativos. El siguiente ejemplo envía solicitudes ICMP incrementando el TTL para observar cada salto intermedio:
Test-NetConnection -TraceRoute reddit.com |
Select-Object -ExpandProperty TraceRoute
Cada línea de salida representa un router que decreta el TTL. Si el valor llega a cero, el nodo envía un mensaje Time Exceeded que revela su dirección IP, lo que ayuda a diagnosticar rutas asimétricas o bucles.
Con la biblioteca estándar ipaddress puedes disectar direcciones y validar redes sin depender de herramientas externas.
El siguiente script recibe una dirección, muestra su versión, máscara y determina si pertenece a un bloque privado:
from ipaddress import ip_interface
def describir_interfaz(cidr):
iface = ip_interface(cidr)
print(f"Dirección: {iface.ip}")
print(f"Prefijo: /{iface.network.prefixlen}")
print(f"Red: {iface.network.network_address}")
print(f"Broadcast: {iface.network.broadcast_address}")
print(f"¿Es privada?: {iface.ip.is_private}")
if __name__ == "__main__":
describir_interfaz("192.168.10.14/24")
Esta aproximación acelera tareas repetitivas como documentar redes o comprobar reservas antes de implementar cambios en routers o firewalls.
IP provee el servicio universal de entrega sin el cual ninguna aplicación moderna podría comunicarse. Sus decisiones de diseño —servicio best-effort, encabezado compacto, TTL y fragmentación— explican por qué sigue vigente tras décadas de uso intensivo.
En los siguientes temas estudiaremos las especificidades de IPv4 e IPv6, profundizando en sus encabezados y en los retos de direccionamiento que resuelven.