Fundamentos del Protocolo IPv4

 Leinier Cruz Salfran     12/ene/2019
Documentación, Estándar, IPv4


Tabla de contenidos

Introducción

Los protocolos TCP (Transmission Control Protocol) e IP (Internet Protocol) tuvieron su origen en los trabajos de la Agencia de Investigación de Proyectos Avanzados de Defensa (DARPA, por sus siglas en inglés) del Departamento de Defensa (DoD) de los Estados Unidos. Los objetivos de estas investigaciones se centraron en dos áreas:

Construir una red descentralizada que ofreciera múltiples alternativas al envío de mensajes entre dos puntos geográficos. Lograr la división del mensaje completo en fragmentos pequeños de tamaño definido que seguirían distintos caminos, pretendiendo que la misma red estuviera en posibilidad de responder a sus propios fallos. A finales de la década de los sesenta, DARPA patrocinó el proyecto conocido como ARPANET, cuyo propósito fue crear una red encargada de proveer conectividad de gran ancho de banda entre los mayores sitios computacionales de los ámbitos gubernamental, educacional y de investigación.

ARPANET ofrecía a sus usuarios la posibilidad de transferir correo electrónico y datos de un sitio a otro. DARPA comenzó a desarrollar un esquema jerárquico común a las tecnologías de red para la transmisión de información, obteniendo como resultado la suite de protocolos TCP/IP que alcanzó enorme popularidad al ser implementado en Unix BSD.

A inicios de la década de los ochenta, las computadoras conectadas a la ARPANET utilizaban los protocolos TCP/IP, a la par sitios que no se conectaban a ella comenzaron a hacerlo.

La red ARPANET dejó de ser la base de protocolos en 1990. A pesar de esta situación, las inclusiones de nuevos nodos permitieron el crecimiento y la evolución del proyecto original al escenario que hoy conocemos como “Internet”

Modelo TCP/IP

El modelo estándar para diseñar una arquitectura de red es el modelo OSI (Open Systems Interconnection), prototipo que consiste de siete capas:

  • Aplicación
  • Presentación
  • Sesión
  • Transporte
  • Red
  • Enlace de datos
  • Capa física

Por su lado, el modelo TCP/IP es un prototipo híbrido derivado del OSI. El TCP/IP combina las tres capas superiores (Aplicación, Presentación y Sesión) del OSI en una capa (Aplicación), así mismo mantiene la capa cuatro (Transporte), combina las capas tres y dos (Red y Enlace de Datos) en una sola a la que llama Internet y mantiene la capa Física.

Protocolo de Internet (IP)

El Protocolo de Internet es un protocolo de capa de red (Capa 3) diseñado en 1981 para usarse en sistemas interconectados de redes de comunicación computacional de conmutación de paquetes. El Protocolo de Internet y el Protocolo de Control de Transmisión (TCP, Transmission Control Protocol) son la base de los protocolos de Internet. El IP tiene dos funciones principales:

  • Entrega de datagramas a través de la interred en la modalidad de mejor esfuerzo

  • Fragmentación y reensamblado de datagramas

Se considera al IP un protocolo de “mejor esfuerzo”, ya que no garantiza que un paquete transmitido realmente llegue al destino ni que los datagramas transmitidos sean recibidos en el orden en que fueron enviados.

La función principal de IP es llevar paquetes de datos de un nodo fuente a un nodo destino. Este proceso se logra identificando cada paquete enviado con una dirección numérica llamada dirección IP.

El protocolo IP no tiene mecanismos de confiabilidad (RFC 791) a diferencia de los demás protocolos. En vez de tener dichos medios, este protocolo no hace uso de ellos para que sean implementados por protocolos de capa superior. El único mecanismo de detección de errores es la suma de verificación para el encabezado IP. Si el procedimiento de la suma de verificación falla, el datagrama será descartado y con ello no será entregado a un protocolo de nivel superior.

Fragmentación y reensamblaje

El Protocolo de Internet (IP) permite a las redes comunicarse unas con otras. El diseño acomoda redes de naturalezas físicas diversas; es independiente de la tecnología usada en la capa inmediantamente inferior, la Capa de Enlace. Las redes con diferente hardware difieren usualmente no sólo en velocidad de transmisión, sino que también en su Unidad Máxima de Transmisión (MTU). Cuando una red quiere transmitir datagramas a una red con un MTU inferior, debe fragmentar sus datagramas. En IPv4, esta función es realizada en la capa de Intenet, y es llevada a cabo en routers IPv4, los cuales sólo requieren esta capa como la más alta implementada en su diseño.

En contraposición, IPv6, la nueva generación del Protocolo de Internet, no permite a los routers a llevar a cabo dicha fragmentación; los hosts son los que determinan el MTU antes de enviar datagramas.

Fragmentación

Cuando un router recibe un paquete, éste examina la dirección de destino y determina la interfaz de salida a utilizar y el MTU de ella. Si el tamaño del paquete es mayor que el MTU y el bit de No Fragmentación (DF) es 0 en la cabecera del paquete, el router tendrá que fragmentar dicho paquete.

El router divide el paquete en fragmentos. El tamaño máximo de cada fragmento es el MTU menos el tamaño de la cabecera IP (entre 20 y 60 bytes). El router pone cada fragmento dentro de su paquete. Estos fragmentos reciben los siguientes cambios:

  • El campo total size es el tamaño de fragmento.
  • La bandera more fragments (MF) es igual a 1 entre dos los paquetes excepto en el último.
  • El campo fragment offset está activado, basado en el offset del fragmento en la carga de datos original. Es medido en unidades de bloques de 8 bytes.
  • El campo header checksum es recomputado.

Por ejemplo, para un MTU de 1500 bytes y un tamaño de cabecera de 20 bytes, los offsets del fragmentos serían múltiplos de (1500-20)/8 = 185. Éstos múltiplos son 0,370,555,740…

Es posible que un paquete sea fragmentado en un router y éstos a su vez sean fragmentados en otro router. Por ejemplo, supongamos una Capa de Transporte con un tamaño de 4500 bytes, sin opciones, y un tamaño de cabecera IP de 20 bytes. Así, el tamaño de paquete sería de 4520 bytes.

Asumiendo que estos fragmentos alcanzan un enlace con un MTU de 1500 bytes. Cada fragmento se convertiría en dos fragmentos:

Fragmento Tamaño Cabecera Datos Más Fragmentos Offset (bloques de 8 bytes)
1 1500 20 1480 1 0
2 1020 20 1000 1 185
3 1500 20 1480 1 310
4 560 20 540 0 495

Observar que los fragmentos conservan el tamaño de datos:

1480 + 1000 = 2480 Bytes

1480 + 540 = 2020 Bytes

Observar también que el bit de “Más Fragmentos” permanece a 1 para todos los fragmentos que vinieron con dicho 1 y que al llegar al último fragmento, dicho bit se establecerá a 0. Por supuesto, el campo de Identificación continúa con el mismo valor en todos los fragmentos refragmentados. De esta forma, incluso si los fragmentos son re-fragmentados, el receptor sabe que inicialmente todos empezarón en el mismo paquete.

Observar cómo conseguimos los offsets de los tamaños de datos:

0

0 + 1480 / 8 = 185

185 + 1000 / 8 = 310

310 + 1480 / 8 = 495

Podemos utilizar el último offset y el último tamaño de datos para calcular el tamaño total: 495*8 + 540 = 4500

3960 + 540 = 4500

Reensamblaje

Un receptor sabe que un paquete es un fragmento si se cumple al menos una de las siguientes condiciones:

  • La bandera Más Fragmentos está activada (= 1). (Esto se cumple para todos los fragmentos excepto para el último).
  • El campo offset del fragmento es distinto de 0. (Esto se cumple para todos los fragmentos menos para el primero).

El receptor identifica fragmentos coincidentes utilizando direcciones locales y foráneas, el protocolo ID y el campo Identificación. El receptor reensamblará los datos de fragmentos con el mismo ID utilizando tanto el offset del fragmento como la bandera de “Más Fragmentos”. Cuando el receptor recibe el último fragmento (que tiene la bandera de “Más Fragmentos” a 0), puede calcular la longitud de la carga útil de datos, multiplicando el offset del último fragmento por 8 y añadiendo su tamaño de datos también. En el ejemplo superior, este cálculo es de 495 x 8 + 540 = 4500 Bytes.

Cuando el receptor tiene todos los fragmentos, puede colocarlos de nuevo en el orden correcto utilizando los offsets para ello.

Será entonces cuando puede pasar sus datos a la pila para su posterior proceso.

Formato de Dirección IPv4

En una red TCP/IP a cada computadora se le asigna una dirección lógica de 32-bits que se divide en dos partes: el número de red y el número de computadora. Los 32 bits son divididos en 4 grupos de 8 bits, separados por puntos, y son representados en formato decimal.

Cada bit en el octeto tiene un peso binario. El valor mínimo para un octeto es 0 y el valor máximo es 255. La siguiente figura muestra el formato básico de una dirección IP con sus 32 bits agrupados en 4 octetos.

Representación de direcciones IPv4

Las direcciones IPv4 se pueden escribir de forma que expresen un entero de 32 bits, aunque normalmente se escriben con decimales separados por puntos. A estos números decimales de 3 dígitos se les llama "octetos", porque en binario requieren de 8 dígitos (8 bits) para ser representados. La siguiente tabla muestra varias formas de representación de direcciones IPv4:

Notación Valor Conversión desde decimal separado por puntos
Decimal separada por puntos 192.0.2.235 -
Hexadecimal separada por puntos 0xC0.0x00.0x02.0xEB Cada octeto se convierte individualmente a la forma hexadecimal
Octal separada por puntos 0301.1680.0002.0353 Cada octeto se convierte de individualmente en octal
Hexadecimal 0xC00002EB Concatenación de octetos de la forma hexadecimal separada por puntos
Decimal 3221226219 El número hexadecimal expresado en decimal
Octal 030000001353 El número hexadecimal expresado en octal

Máscara de red

La máscara de red es una combinación de bits que sirve para delimitar el ámbito de una red de ordenadores. Su función es indicar a los dispositivos qué parte de la dirección IP es el número de la red, incluyendo la subred, y qué parte es la correspondiente al ordenador.

Mediante la máscara de red, un sistema (ordenador, puerta de enlace, router, etc.) podrá saber si debe enviar un paquete dentro o fuera de la subred en la que está conectado. Por ejemplo, si el router tiene la dirección IP 192.168.1.1 y máscara de red 255.255.255.0, entiende que todo lo que se envía a una dirección IP con formato 192.168.1.X, se envía hacia la red local, mientras que direcciones con distinto formato de direcciones IP serán buscadas hacia afuera (internet, otra red local mayor, entre otros) a través de su puerta de enlace.

Suponiendo que tenemos un rango de direcciones IP desde 192.168.1.0 hasta 192.168.1.255, y si todas ellas forman parte de la misma red, su máscara de red sería 255.255.255.0, que también se puede expresar como 192.168.1.0/24.

Una máscara de red representada en binario son 4 octetos de bits:

11111111.11111111.11111111.11111111

La representación utilizada se define colocando en 1 todos los bits de red (máscara natural) y en el caso de subredes, se coloca en 1 los bits de red y 0 los bits de host usados por las subredes. Así, en esta forma de representación (192.168.1.0/24) el 24 sería la cantidad de bits puestos a 1 que contiene la máscara en binario, comenzando desde la izquierda. Para el ejemplo dado (/24), sería:

11111111.11111111.11111111.00000000

y en su representación en decimal sería 255.255.255.0.

Tabla de máscaras de red
Binario Decimal CIDR Nº hosts Clase
11111111.11111111.11111111.11111111 255.255.255.255 /32
11111111.11111111.11111111.11111110 255.255.255.254 /31
11111111.11111111.11111111.11111100 255.255.255.252 /30 2
11111111.11111111.11111111.11111000 255.255.255.248 /29 6
11111111.11111111.11111111.11110000 255.255.255.240 /28 14
11111111.11111111.11111111.11100000 255.255.255.224 /27 30
11111111.11111111.11111111.11000000 255.255.255.192 /26 62
11111111.11111111.11111111.10000000 255.255.255.128 /25 126
11111111.11111111.11111111.00000000 255.255.255.0 /24 254 C
11111111.11111111.11111110.00000000 255.255.254.0 /23 510
11111111.11111111.11111100.00000000 255.255.252.0 /22 1022
11111111.11111111.11111000.00000000 255.255.248.0 /21 2046
11111111.11111111.11110000.00000000 255.255.240.0 /20 4094
11111111.11111111.11100000.00000000 255.255.224.0 /19 8190
11111111.11111111.11000000.00000000 255.255.192.0 /18 16382
11111111.11111111.10000000.00000000 255.255.128.0 /17 32766
11111111.11111111.00000000.00000000 255.255.0.0 /16 65534 B
11111111.11111110.00000000.00000000 255.254.0.0 /15 131070
11111111.11111100.00000000.00000000 255.252.0.0 /14 262142
11111111.11111000.00000000.00000000 255.248.0.0 /13 524286
11111111.11110000.00000000.00000000 255.240.0.0 /12 1048574
11111111.11100000.00000000.00000000 255.224.0.0 /11 2097150
11111111.11000000.00000000.00000000 255.192.0.0 /10 4194302
11111111.10000000.00000000.00000000 255.128.0.0 /9 8388606
11111111.00000000.00000000.00000000 255.0.0.0 /8 16777214 A
11111110.00000000.00000000.00000000 254.0.0.0 /7 33554430
11111100.00000000.00000000.00000000 252.0.0.0 /6 67108862
11111000.00000000.00000000.00000000 248.0.0.0 /5 134217726
11110000.00000000.00000000.00000000 240.0.0.0 /4 268435454
11100000.00000000.00000000.00000000 224.0.0.0 /3 536870911
11000000.00000000.00000000.00000000 192.0.0.0 /2 1073741823
10000000.00000000.00000000.00000000 128.0.0.0 /1 2147483647
00000000.00000000.00000000.00000000 0. /0 4294969294

El número de hosts se determina como el número de direcciones IP posibles menos dos, en cada subred hay una IP con todos los bits a ceros en la parte del host reservada para nombrar la subred y otra con todos los bits a uno reservada para la dirección de difusión.

Dirección IP de la subred: 192.168.1.0/24

Dirección IP de difusión: 192.168.1.255/24

Clases de direcciones IPv4
Clase Bits IP Subred IP Difusión Máscara en decimal CIDR
A 0000 0.0.0.0 127.255.255.255 255.0.0.0 /8
B 1000 128.0.0.0 191.255.255.255 255.255.0.0 /16
C 1100 192.0.0.0 223.255.255.255 255.255.255.0 /24
D (multicast) 1110 224.0.0.0 238.255.255.255 255.255.255.255 /32
E (experimental) 1111 240.0.0.0 255.255.255.254 255.255.255.255 /64
Direcciones IPv4 privadas

Existen ciertas direcciones en cada clase de dirección IP que no están asignadas y que se denominan direcciones privadas. Las direcciones privadas pueden ser utilizadas por los hosts que usan traducción de dirección de red (NAT) para conectarse a una red pública o por los hosts que no se conectan a Internet. En una misma red no pueden existir dos direcciones iguales, pero sí se pueden repetir en dos redes privadas que no tengan conexión directa entre sí o que se conecten a través de un tercero que haga NAT. Las direcciones privadas son:

Clase IP Subred IP Difusión Máscara en decimal CIDR
A 10.0.0.0 10.255.255.255 255.0.0.0 /8
B 172.16.0.0 172.31.255.255 255.240.0.0 /12
C 192.168.0.0 192.168.255.255 255.255.0.0 /16
Agotamiento de las direcciones IPv4

El crecimiento exponencial de Internet está llevando hacia el agotamiento de las direcciones IPv4, es decir a la progresiva merma de la cantidad de direcciones IPv4 disponibles. Este tema ha sido una preocupación desde los años 80. Como consecuencia, se ha convertido en el factor impulsor en la creación y adopción de diversas nuevas tecnologías, incluidas las direcciones CIDR e IPv6; asimismo, ha sido un elemento clave en la adopción de NAT (Network Address Translation por sus siglas en inglés).

Desde el año 2007, IPv6 se ve como una solución a largo plazo para el agotamiento de las direcciones IPv4 aunque su implantación se está realizando a un paso muy lento. A medida que se acerca el plazo límite del agotamiento de la dirección IPv4, la mayoría de vendedores de equipos e ISPs están empezando a considerar el uso generalizado de IPv6.

El 3 de febrero de 2011, la IANA asignó los últimos bloques libres a los RIRs, efectivamente agotando el pool de direcciones IPv4 disponibles.

Las direcciones IP pueden ser de diferentes tipos o clases (A, B, C, D y E). Una red de clase A se reserva en la actualidad para los gobiernos y también para grandes empresas como por ejemplo ETECSA, CENIAI. Las direcciones de clase B se otorgan a medianas empresas. Los usuarios “normales” usarán direcciones de clase C, se pierde así un rango de direcciones IP importante.

No hay suficientes direcciones IPv4 para enrutar públicamente y proporcionar una dirección distinta para cada hablante IPv4 (que incluye ordenadores de sobremesa, teléfonos móviles, dispositivos integrados y hosts virtuales). Este problema se minimiza mediante la NAT, por medio de la cual diversos host de redes de área local (LAN) puede compartir una única dirección IP pública de Internet . Los datos enviados por los hosts individuales a Internet indican tanto su dirección fuente como la IP pública utilizada y el router que proporciona el acceso es capaz de “seguir la pista” de qué host ha originado el tráfico en la red y responde en consecuencia. Lo anterior es un caso similar al de los teléfonos de oficinas, que comparten un mismo número y que, a su vez, cada uno tiene una extensión para distinguirse.

Causas

Varias fuerzas amenazan Internet con el agotamiento de direcciones. Cada una de ellas aumentan de manera drástica la demanda de las limitadas direcciones de 32 bits, con frecuencia de formas imprevistas para los diseñadores originales de redes.

  • Dispositivos móviles: En el momento que IPv4 se convirtió en el estándar de la comunicación mediante red, el coste de integración de capacidades informáticas en dispositivos portátiles ha caído en picado. Como consecuencia, los antiguos dispositivos simples de masas tales como los teléfonos móviles se han convertido en posibles terminales de IPv4. A medida que se implanta al 100% el teléfono móvil a nivel mundial, el resultado es un escenario verosímil en el que cupiera la posibilidad de que cada persona del planeta tuviera asignada una dirección IP.
  • Conexiones Always-on: Durante la década de los 90, el modo predominante del consumidor de acceso a Internet era el telefónico dial-up. Este acceso reduce la presión en las direcciones IP porque los enlaces dial-up están normalmente desconectados y, por lo tanto, no se necesitan direcciones IP permanentes. Sin embargo, en 2007, el acceso de banda ancha supera el 50% de la penetración en el mercado. Las conexiones de banda ancha permanecen activas completamente e, incluso cuando tienen asignadas dinámicamente una dirección, necesitan de una IP continua.
  • Demografía de Internet: Existen millones de hogares en el mundo desarrollado. En 1990, únicamente una mínima parte tenía conectividad a Internet. Años después, unos 15 años más tarde, casi la mitad de estos hogares tienen conexiones de banda ancha.
  • Uso ineficiente de direcciones: A las organizaciones que obtuvieron direcciones IP en los años 80 se les asignaron muchas más direcciones de las que realmente necesitaban. Por ejemplo, a las grandes empresas y universidades se les dieron bloques de direcciones de clase A, con 16 millones de direcciones IPv4 cada uno. Muchas organizaciones siguen utilizando direcciones IP públicas para dispositivos que no son accesibles fuera de sus redes locales y que podrían servirse de la implementación basada en NAT, cediendo un alto rango de direcciones IP para su reasignación. Algunas de las antedichas organizaciones también poseen direcciones IP que, actualmente, no se utilizan pero que no se han devuelto a las autoridades de asignación por varias razones.

Debido a las ineficiencias causadas por el uso de redes secundarias, es muy difícil utilizar todas las direcciones en bloque. El radio de densidad de hosts, tal y como se define en RFC 3194, es una medida intuitiva del uso de bloques de direcciones IP.

Atenuantes

A continuación se exponen algunas de las opciones (que no se excluyen mutuamente) para atenuar el agotamiento de direcciones IPv4.

  • NAT (Network Address Translation, traducción de direcciones de red). Uso de redes privadas.
  • DHCP (Dynamic Host Configuration Protocol, Protocolo para la configuración dinámica del terminal).
  • Control exhaustivo de registros de Internet regional en la asignación de direcciones a los registros locales. Reenumeración de redes para recuperar amplios bloques de espacio de direcciones asignados en los primeros días de Internet.
CIDR (Classless Inter-Domain Routing - Enrutamiento entre dominios sin clases)

CIDR se introdujo en 1993 por la IETF (ver RFCs 1517 y 1518) y representa la última mejora en el modo como se interpretan las direcciones IP. Su introducción permite una mayor flexibilidad al dividir rangos de direcciones IP en redes separadas. De esta manera permite un uso mas eficiente de las direcciones IPv4, al especificar prefijos de red de longitud variable.

Un mayor uso de la jerarquía de direcciones ('agregación de prefijos de red'), disminuyendo la carga de los ruteadores principales de Internet. CIDR reemplaza la sintaxis previa para nombrar direcciones IP, llamada clases de redes. En vez de asignar bloques de direcciones en los limites de los octetos, que implican prefijos "naturales" de 8, 16 y 24 bits, CIDR utiliza la técnica VLSM (Variable-Length Subnet Mask - Mascara de Subred de Longitud Variable), para hacer posible la asignación de prefijos de longitud arbitraria.

Bloques CIDR

CIDR es un estándar de red para la interpretación de direcciones IP. CIDR facilita el enrutamiento al permitir agrupar bloques de direcciones en una sola entrada de tabla de rutas. Estos grupos, llamados comunmente Bloques CIDR, comparten una misma secuencia inicial de bits en la representación binaria de sus direcciones IP.

Los bloques CIDR IPv4 se indentifican utilizando cuatro números decimales separados por puntos, seguidos de una barra diagonal y un número de 0 a 32. Los números corresponden a la dirección inicial del bloque que es descrito por la notación CIDR mas la máscara correspondiente, que corresponde a la cantidad de bits comunes para las direcciones agrupadas en el bloque.

Una direccion IP "corresponde" o "está incluida" en un bloque CIDR si sus primeros N bits son iguales a los del prefijo dado, por lo que para entender cabalmente la notacion de CIDR es necesario visualizar las direcciones IP en binario.

Cabe hacer notar que los prefijos "cortos" (cercanos a cero) incluyen mas direcciones que los prefijos "largos" (cercanos a 32). Esta misma característica permite que una misma direccion IP esté incluida en prefijos de distinta longitud, lo cual es aprovechado para hacer agregación de prefijos de red y simplificar la cantidad de entradas en las tablas de ruteo.