Archivo octubre, 2012

Fundamentos: Domicilios IP (v4)

El internet trabaja bajo el protocolo TCP/IP. Este mini tutorial explica que exactamente es un domicilio IP.

Los domicilios IP tradicionalmente se expresan en el formato de cuatro números del rango 0 a 255 separados por puntos, por ejemplo 85.14.0.250. Un número IP válido no puede comenzar o terminar con 0 (por ejemplo 0.1.1.1) pero si puede tener ceros en medio.

Este formato de los domicilios IP se usa por que es muy conveniente para segmentar y administrar redes y sub-redes. Tengo planeado explicar esos temas en otros tutoriales. El hecho de formatear los IPs de esta manera oculta un poco en realidad que es un numero IP, así que lo explico en este mini-tutorial.

En realidad, un domicilio IP no es nada más que un int de 32 bits, sin signo.  Por ejemplo, el IP que mencioné previamente, 85.14.0.250, en realidad es 1426981114.

¿Como hacemos esta conversión? Pues si nos fijamos, cada segmento del domicilio (por ejemplo el 85, el 14, el 0, y el 250) es un numero hexadecimal, por ejemplo en hexadecimal se podría explicar el IP mencionado como 55.0e.00.FA. Cada numero es de dos dígitos hexadecimales, y como podemos ver, un domicilio IP consiste de 8 digitos hexadecimales en total, y como cada digito hexadecimal requiere 4 bits para almacenarse, ahí vemos como un domicilio IP usa 32 bits.

Ahora, si en el ejemplo que llevamos tomamos el numero hexadecimal 0x550E00FA y lo convertimos a decimal, obtenemos 1426981114, el equivalente del int que mencioné al principio.

Ahora ¿como se hace la conversión de int a cadena y viceversa? Aparte de esta conversión intermedia a un número hexadecimal, hay una formula que nos permite hacer la conversión mas fácil.

De Cadena a Hexadecimal

Si tenemos un domicilio IP tradicionalmente expresado (por ejemplo 85.14.0.250), podemos aplicar esta formula:

250 + (256 x 0) + (256^2  x 14) + (256 ^3 x 85) = 1426981114

De Hexadecimal a Cadena

La conversión al revés es mas difícil hacerla a mano. Tenemos que dividir y sacar los enteros y dejar el restante para la siguiente operación. Continuando con nuestro ejemplo:

1426981114 / (256^3) = 85.0 Tomamos solo el integro, 85

(Vemos que resta 1426981114 – (85 x 256^3) = 917754)

917754 / (256^2) = 14.003; tomamos el integro, 14

(Vemos que resta 917754 – (14 x 256^2) = 250)

250 / 256 = 0.97; tomamos el integro, 0

(Vemos que resta 250 – (0 x 256) = 250)

250 / 1 = 250; tomamos el integro, 250

Por lo tanto, nuestro domicilio IP es el integro de cada operación: 85.14.0.250

¿Bueno, y por qué me importa esto?

Es muy importante entender esto por varias razones:

  • Se puede almacenar un IP en un solo int sin signo. En cambio si lo almacenas en una cadena, ¡puede usar hasta 15 caracteres! Guardar los IPs como int ahorra mucho espacio.
  • Sin convertir un IP a int es muy difícil saber si un IP esta en un rango de domicilios IP. (Ejercicio: Intenta programar una prueba de rango usando IPs en formato de cadena)
  • Es muy importante entender que un domicilio IP no es nada mas ni nada menos que un int de 32 bits. Esto es fundamental para entender el protocolo IP y el protocolo TCP.

Esto es tan solo uno de los fundamentos de entender el protocolo TCP/IP, pero es un fundamento super importante. Proximamente agregaré mas tuts del protocolo.

No hay Comentarios