Recientemente me preguntaron cómo se calcula cuantos ordenadores pertenecen a una red IP. La pregunta está muy relacionada con saber si un ordenador pertenece o no a una red dada y cómo podemos configurar adecuadamente la máscara y la dirección IP de un equipo... O de toda una red. Vamos allá.
Matemática binaria
Antes de abordar este tema tenemos que saber un poco sobre cómo operar con números binarios. Primero la conversión decimal-binario.
De binario a decimal
Para saber cómo se representa en decimal el número binario 01001000 haremos lo siguiente:
01001000
= 0*2^7
+ 1*2^6
+ 0*2^5
+ 0*2^4
+ 1*2^3
+ 0*2^2
+ 0*2^1
+ 0*2^0
Es decir:
01001000
= 0*128
+ 1*64
+ 0*32
+ 0*16
+ 1*8
+ 0*4
+ 0*2
+ 0*1
O sea que:
01001000 = 64 + 8 = 72
De decimal a binario
A la inversa lo podemos hacer mediante divisiones sucesivas por dos:
72 / 2 = 36, resto 0
36 / 2 = 18, resto 0
18 / 2 = 9, resto 0
9 / 2 = 4, resto 1
4 / 2 = 2, resto 0
2 / 2 = 1, resto 0
La representación en binario del número 72 se obtiene tomando el último cociente y todos los restos. Los he marcado con un * para que se vean:
72 / 2 = 36, resto 0*
36 / 2 = 18, resto 0*
18 / 2 = 9, resto 0*
9 / 2 = 4, resto 1*
4 / 2 = 2, resto 0*
2 / 2 = 1* resto 0*
Es decir 1001000 (tomamos los números de abajo a arriba).
And a nivel de bit
Otra cosa que necesitamos saber es cómo se hace una operación llamada "and" (y lógico) con una secuencia de bits.
Comenzaremos por ver cómo se hace con un bit:
X | Y | X and Y
---+---+---------
0 | 0 | 0
0 | 1 | 0
1 | 0 | 0
1 | 1 | 1
Es decir, sólo devuelve uno cuando hacemos la operación "1 and 1". Vamos a ver qué devuelve "010 and 111":
010 and
111 =
010
Devuelve el mismo número. Bien. Ya estamos listos.
La red IP
Una red IP viene identificada por dos datos: la dirección de red y la máscara. La primera determina cómo serán las direcciones IP y la segunda cuántas caben.
Para verlo más en detalle vamos con un ejemplo. Supongamos que tenemos la dirección de red 10.72.208.0 y la máscara 255.255.255.248. Para saber si una IP dada -pongamos que es la 10.72.208.1- pertenece a esa red haremos un and entre la IP y la máscara. Si nos devuelve la dirección de red, entonces pertenece.
Veamos:
IP and mascara = direccion_de_red
10.72.208.1 and
255.255.255.248 =
O lo que es lo mismo:
00001010.01001000.11010000.00000001 and
11111111.11111111.11111111.11111000 =
00001010.01001000.11010000.00000000
Que en decimal resulta:
10.72.208.1 and
255.255.255.248 =
10.72.208.0
O sea, la direccion de red. Esta IP pertenece a la red.
Probemos ahora con la dirección IP 10.72.208.72. ¿pertenecerá a la red? Veamoslo:
10.72.208.72 and
255.255.255.248 =
00001010.01001000.11010000.01001000 and
11111111.11111111.11111111.11111000 =
00001010.01001000.11010000.01001000
O sea:
10.72.208.72 and
255.255.255.248 =
10.72.208.72
Que no es la dirección de red, 10.72.208.0; por lo que ésta dirección no pertenece a la red.
Varios ejemplos mas:
10.72.208.8 and
255.255.255.248 =
10.72.208.0 (pertenece)
10.72.208.16 and
255.255.255.248 =
10.72.208.16 (no pertenece)
10.72.208.18 and
255.255.255.248 =
10.72.208.2 (no pertenece)
En realidad, el número de elementos que caben en una red viene dado por el número de bits a cero que hay en la máscara. En nuestro ejemplo, 255.255.255.248 hay tres bits a cero:
11111111.11111111.11111111.11111000
Indica que las direcciones de esta red serán las que acaben en los digitos binarios 001, 010, 011, 100, 101, 110, 111 y el resto de bits coincidentes con la ip de la red.
A medida que aumentemos los ceros, aumentarán las direcciones IP que caben en la red, y cambiara en consecuencia la máscara de red. Por ejemplo, 255.255.255.0 caben 255 direcciones.
Como puede verse, el calculo de las direcciones IP que caben en una red viene determinado por la dirección de red y por la mascara. Con operaciones binarias sencillas podemos saber si una IP pertenece a una red dada y también cuáles serán las IP's que la formen.