Clases de direccionamiento IP

A continuación voy a detallar las clases de direccionamiento IP (siempre hablando de IPv4). El énfasis se realizará sobre las mayormente utilizadas y considerando las máscaras de subred por defecto (no se avanza sobre el concepto de subnetting o subredes). Este conocimiento es interesante tenerlo para cuando se defina el direccionamiento (simple) de una red interna ya sea de una organización o un hogar.

Dirección clase A

Estas direcciones tenían la finalidad de utilizarse en grandes organizaciones, debido a que para cada red posible (126) pueden existir muchísimos hosts.

  • El primer octecto se encuentra en el rango 1 – 126
  • La máscara de subred por defecto correspondiente es 255.0.0.0
  • Para direccionamiento privado (no enrutado) se utiliza 10 como primer octeto
    • Ejemplo de dirección IP de un host que pertenece a la red 10.0.0.0: 10.0.0.1

Dirección clase B

Estas direcciones se plantearon para organizaciones de tamaño medio donde se destinan los 2 primeros octectos de la dirección IP para definir la red y los otros 2 para los hosts.

  • El primer octecto se encuentra en el rango 128 – 191
  • La máscara de subred por defecto correspondiente es 255.255.0.0
  • Para direccionamiento privado (no enrutado) se utiliza 172.16 como primer y segundo octectos
    • Ejemplo de dirección IP de un host  que pertenece a la red 172.16.0.0: 172.16.0.1

Dirección clase C

Estas direcciones se establecieron para organizaciones pequeñas, donde solo se utiliza el último octeto para los hosts (máximo 254) y los primeros 3 determinan la red.

  • El primer octecto se encuentra en el rango 192- 223
  • La máscara de subred por defecto correspondiente es 255.255.255.0
  • Para direccionamiento privado (no enrutado) se utiliza 192.168 como primer y segundo octectos
    • Ejemplo de dirección IP de un host que pertenece a la red 192.168.0.0: 192.168.0.1

Dirección clase D

Estas direcciones se utilizan para multicast (comunicación hacia un grupo de destinatarios)

  • El primer octecto se encuentra en el rango 224-239

Dirección clase E

Estas direcciones tienen fines experimentales.

  • El primer octecto se encuentra en el rango 240-255

Dirección de loopback

Se utiliza para hacer pruebas que determinen el correcto funcionamiento del protocolo TCP/IP en el equipo.

  • El primer octeto comienza con 127
  • Por lo general se utiliza la dirección 127.0.0.1 y se la asocia al nombre de host localhost.

Una de las pruebas que se puede hacer con ella es generar un ping:

ping 127.0.0.1
Haciendo ping a 127.0.0.1 con 32 bytes de datos:
Respuesta desde 127.0.0.1: bytes=32 tiempo<1m TTL=128
Respuesta desde 127.0.0.1: bytes=32 tiempo<1m TTL=128
Respuesta desde 127.0.0.1: bytes=32 tiempo<1m TTL=128
Respuesta desde 127.0.0.1: bytes=32 tiempo<1m TTL=128

Estadísticas de ping para 127.0.0.1:
    Paquetes: enviados = 4, recibidos = 4, perdidos = 0
    (0% perdidos),
Tiempos aproximados de ida y vuelta en milisegundos:
    Mínimo = 0ms, Máximo = 0ms, Media = 0ms
Anuncios

Establecer una dirección IP fija en Windows

Cuando un equipo no tiene una dirección IP fija, necesita que otro dispositivo le asigne una automáticamente / dinámicamente. De esta tarea se encarga el servicio DHCP que puede estar provisto por un servidor dedicado o por un router por ejemplo.

Hay casos en los que necesitamos definirle una dirección IP en particular al equipo, ya sea por organización o para configurar alguna otra aplicación o servicio que así lo requiera. Si bien DHCP se puede configurar para asignar cierta IP del rango disponible a una dirección MAC determinada, requiere saber obtener la dirección MAC de la placa de red de un equipo y tener acceso a la configuración del servicio DHCP.

A continuación voy a explicar cómo hacerlo para una dirección IPv4 (es muy similar para IPv6, y en un futuro será necesario hacerlo).

En Windows 7, debemos llegar hasta las Propiedades de la conexión correspondiente al dispositivo de red (placa de red con conexión Ethernet o Wifi). Una de las formas para lograrlo:

  1. Abrir el Panel de Control
  2. Acceder a Centro de Redes y Recursos Compartidos
  3. Elegir “Cambiar configuración del adaptador” en la lista de comandos de la izquierda

También podemos ir a Inicio > Ejecutar… y tipear:

ncpa.cpl

Una vez allí veremos las conexiones existentes y deberemos determinar cual es la que queremos configurar. Sobre ella:

  1. Click derecho y elegir Propiedades
  2. Posicionarse sobre “Protocolo de Internet versión 4”
  3. Presionar “Propiedades”
  4. Elegir la opción “Usar la siguiente dirección IP”
  5. Completar:
    • Dirección IP y Máscara de subred: esta es la dirección fija para el equipo
      • No podemos poner “cualquier” valor. De lo contrario, nuestro equipo podría quedar inaccesible al resto de los dispositivos de la red.
    • Puerta de enlace predeterminada: por lo general es la dirección IP del router de la LAN
  6. Completar también el Servidor DNS preferido: por lo general es la dirección IP del router de la LAN
    • Alternativamente, pueden usarse los DNS de Google: 8.8.8.8 y 8.8.4.4

Configurar un DNS dinámico

Cuando nos conectamos a Internet nuestro proveedor nos asigna una dirección IP que puede variar en cada conexión. Es por ello que existe la posibilidad de comprar una dirección IP para poder establecerla de manera fija y siempre que lo necesitemos poder acceder a nuestro router local a partir de ella, como un punto único de entrada.

Una alternativa tal vez más simple es la creación de un DNS dinámico o DDNS. Ya habíamos hablado de definir un DNS de manera local pero eso solamente sirve cuando desde un equipo de la red interna queremos acceder a otro de la misma red o incluso en internet. En este caso lo que buscamos es una forma para poder acceder desde Internet a nuestro router.

Para ello debemos crear una cuenta en un sitio que provea este servicio (de manera gratuita o pagando) y en ella declarar un host indicando como mínimo:

  • Hostname: un nombre de dominio propio, a partir de uno de los dominios que el servicio permita elegir
    • algunos de estos servicios proveen dominios gratuitos
  • IP address: la dirección IP actual que el proveedor de Internet nos asignó
    • por lo general, estos servicios la obtienen automáticamente

Ahora debemos esperar unos minutos a que se realice la actualización de los DNS y si indicamos en un navegador el Hostname que acabamos de definir, deberíamos tener acceso al router de nuestra red local.

El inconveniente aquí es mantener actualizada la dirección IP en el host que creamos en el servicio. Para ello deberemos optar por:

  • 🙂 configurar nuestro router, en la opción de DDNS para que automáticamente al realizar una nueva conexión, comunique la dirección IP al servicio y hostname que le indiquemos
  • 😐 instalar una aplicación propietaria que el servicio provea en uno de nuestros equipos, de manera que cuando la dirección IP de internet cambie, esta herramienta la comunique al servicio
  • 😦 acceder al sitio web del servicio y actualizar manualmente la dirección IP del host correspondiente

 

Tipos de datos para almacenar una dirección IPv4

Cuando tenemos que almacenar una dirección IP en un campo de la base de datos, tenemos que elegir el tipo de dato a utilizar. Para esta publicación consideramos una dirección IPv4, la cual está formada por 4 octetos. Analizaremos 4 posibles implementaciones:

La primer aproximación sería utilizar un CHAR(15) dado que la mayor dirección IPv4 es ‘255.255.255.255’. Este enfoque consume 15 bytes ya se que guardemos una dirección como la indicada o ‘1.1.1.1’.

Entonces podríamos pensar en utilizar un VARCHAR(15) que en el peor de los casos consume 16 bytes (15 de datos + 1 del prefijo longitud), pero al almacenar ‘1.1.1.1’ consumiría solo 8 bytes.

Pasando al tipo numérico, planteamos utilizar 4 campos de tipo TINYINT UNSIGNED (cada uno consume 1 byte), donde cada uno puede almacenar un valor entre 0 y 255. Por lo que en conjunto consumiríamos nada más que 4 bytes! Si bien parece óptimo, lo molesto es obtener el valor de los 4 campos y concatenarlos con un punto (.) cada vez que necesitemos mostrar la dirección IP. Análogamente deberemos separar la dirección mediante los puntos y almacenar cada valor en un campo diferente.

Finalmente, existe una alternativa que es mucho mejor es usar la función de Mysql INET_ATON(dir-ip-octetos), la cual a partir de un string que representa una dirección IPv4, retorna un entero que es igual al valor numérico de la misma. De esta manera podemos almacenar el resultado en un campo de tipo INT UNSIGNED, que consume 4 bytes pero a diferencia de la propuesta anterior lo hace en un único campo, facilitando el tratamiento del insert y update.

Atención: NO utilicen un campo tipo INT porque como su límite superior es 2147483647, no podrá almacenar direcciones transformadas cuyo prmier octeto sea mayor a 127.

Ejemplo de funcionamiento de INET_ATON:

mysql> SELECT INET_ATON('192.168.0.1');

-> 3232235521

Para recuperar el valor almacenado, usamos la función inversa INET_NTOA(dir-ip-decimal) que convierte el valor decimal nuevamente al string de 4 octetos.

Ejemplo de funcionamiento de INET_ATON:

mysql> SELECT INET_NTOA('3232235521');

-> 192.168.0.1

Para verificar que un string represente una dirección IPv4 válida, podemos utilizar IS_IPV4(dir-ip-octetos). Si retorna 1, entonces podemos estar seguros que INET_ATON(dir-ip-octetos) será distinto de NULL.

Cálculo del valor numérico de una dirección IPv4

Teniendo una dirección con la forma:

v1.v2.v3.v4

su valor numérico se calcula así.

v1 * 256^3 + v2 * 256^2 + v3 * 256^1 + v4 * 256^0

que es lo mismo que:

v1 * 256^3 + v2 * 256^2 + v3 * 256 + v4

 

Ejemplo:

192.168.0.1 = 192 * 256^3 + 168 * 256^2 + 0 * 256 + 1 = 3232235521