jueves, 22 de febrero de 2007

Conjugando el inexistente verbo "subnetear"

[Actualización, 12 de febrero de 2008: He publicado un ejemplo del procedimiento mostrado a continuación, ligeramente más detallado, pero para una red Clase B en esta entrada. Espero que sea de utilidad.]

Debido a numerosas preguntas que he recibido acerca de cómo dividir una red TCP/IP en sub-redes (¿tan mal maestro soy?), he decidido poner un ejemplo paso a paso para hacerlo con una red de clase C. Les advierto que lo que van a leer a continuación (si es que deciden continuar leyendo) requiere un conocimiento previo de conceptos como red, máscara de sub-red, dirección IP, VLSM y CIDR, etc. y no es apto para cardíacos... :-D

Supongamos que tenemos la red 192.16.3.0/24. El /24 es notación CIDR y representa a una máscara de 24 bits ( 255.255.255.0 ). En esta red nos quedan 8 bits en la parte de hosts, así que tenemos (28)-2 posibles combinaciones, es decir, 256-2 = 254 hosts. Esto puede ser un gran desperdicio de direcciones, por esta razón se nos pide dividirla.

La máscara /24 en binario, es tan fácil como 24 bits "1" consecutivos, y el resto "0"s:

255.255.255.0
11111111.11111111.11111111.00000000
<--------------------- red*host--->

Supongamos que, para no desperdiciar la red, nos piden obtener sub-redes con capacidad para 50 hosts cada una. Para dividir la red, necesitamos pedir "prestados" (aunque en realidad son "regalados", porque nunca los devolvemos ;)) los bits necesarios para obtener las sub-redes que tengan capacidad para los 50 hosts que necesitamos por cada sub-red. Así tenemos:

El número de hosts por sub-red debe ser mayor o igual que 50:
2n-2 >= 50
Al buscar 'n', "sabemos" que (26)-2=64-2=62, por lo tanto 6 bits de hosts nos cubren muy bien los 50 que necesitamos. Si n fuera 5, 25=32, y 32 no nos alcanzan para los 50. ¿de acuerdo? (Hay un procedimiento para obtener 'n' usando logaritmos, pero como son ingenieros sé que ya se lo saben, así que ya no lo pongo).

Bueno, como ahora sabemos que necesitamos 6 bits de hosts para cubrir los 50 y en la máscara original (/24) nos sobraban 8 bits, eso quiere decir que para las nuevas sub-redes tendremos sólo 2 bits, de esta manera:

255.255.255.192
11111111.11111111.11111111.11000000
<------------------------red*host->

(la máscara es ahora de 26 bits, o sea, /26 en CIDR, porque a los 24 originales le sumamos los 2 que nos regalaron).

(el número binario 11000000 es el 192 decimal).
¿Notas que al principio del último octeto puse los 2 bits "1" que dijimos?

Hasta este punto hemos determinado la cantidad de bits que vamos a usar para crear nuevas sub-redes con hasta 62 hosts cada una (recuerda que nos pidieron 50).

Ahora viene lo bueno: necesitamos saber las direcciones de red de las nuevas sub-redes. Para esto voy a concentrarme únicamente en los 2 bits que me regalaron del último octeto, para sacar las posibles combinaciones:

.00000000 (este es el 0 decimal)
.01000000 (este es el 64 decimal)
.10000000 (este es el 128 decimal)
.11000000 (este es el 192 decimal)
^^

Por lo tanto, las nuevas direcciones de red serán:

192.16.3.0/26
192.16.3.64/26
192.16.3.128/26
192.16.3.192/26

Fácil, ¿no? Ahora sólo nos resta conocer, para cada nueva sub-red, las direcciones de hosts válidas.

Ahora prepárense para la siguiente definición: La primera dirección obtenida de una sub-red es la propia dirección de la sub-red (ya sé, se oyó muy cantinflesco, pero así es), y son justamente las que acabamos de obtener. Ahora bien, la última dirección de una sub-red es la dirección de broadcast, y corresponde a poner todos los bits de host en "1":

.00111111 (este es el 63 decimal)
.01111111 (este es el 127 decimal)
.10111111 (este es el 191 decimal)
.11111111 (este es el 255 decimal)
^^


Aquí hay que ser muy observadores: fíjate que los primeros 2 bits están exactamente igual que en las combinaciones que usamos para sacar las direcciones de red. Lo único que cambié fueron los últimos 6 bits "0" por "1", y ya tenemos las direcciones de broadcast para cada sub-red.

Por lo tanto, lo que necesitamos ahora es obtener las direcciones que nos quedan para hosts en cada una de las sub-redes obtenidas:

sub-red 1
192.16.3.0/26 (dirección de red)
192.16.3.63/26 (dirección de broadcast)
192.16.3.1/26 hasta 192.16.3.62/26 (rango de direcciones para host: son 62)

sub-red 2
192.16.3.64/26
192.16.3.127/26 (dirección de broadcast)
192.16.3.65/26 hasta 192.16.3.126/26 (rango de direcciones para host: son 62)

sub-red 3
192.16.3.128/26
192.16.3.191/26 (dirección de broadcast)
192.16.3.129/26 hasta 192.16.3.190/26 (rango de direcciones para host: son 62)

sub-red 4
192.16.3.192/26
192.16.3.255/26 (dirección de broadcast)
192.16.3.193/26 hasta 192.16.3.254/26 (rango de direcciones para host: son 62)

Y eso es todo. Hay que poner mucha atención en las máscaras usadas para no confundirse y recuerden: el verbo "subnetear" no existe. ;-)

:wq!

Actualización, 12 de febrero de 2008: He publicado un ejemplo del procedimiento ligeramente más detallado, pero para una red Clase B en esta entrada. Espero que sea de utilidad.

jueves, 1 de febrero de 2007

¿IDE o no IDE?

En el más reciente curso de Java que tuve el privilegio de impartir (en serio, no es broma) y que concluye precisamente este próximo sábado 3 de enero, me preguntaron: "¿tú qué IDE usas regularmente?". Posiblemente decepcioné a más de dos cuando respondí: "no uso ninguno en particular... uso EditPlus".

Llámenme anticuado si quieren, pero en cuestiones de programación tengo unos gustos poco comunes. En primer lugar por lo regular no uso IDEs. Para ponerlos un poco en contexto, un IDE (Integrated Development Environment) es un ambiente de desarrollo que integra muchas herramientas con el propósito de facilitar la vida a los desarrolladores de software. Estoy de acuerdo. Sin embargo, no los uso por una sencilla razón: mi entorno de programación hace 20 años era muy simple: un editor de textos, un intérprete o compilador (según el caso), un prompt de sistema operativo y ¡listo!, programa hecho. Las ayudas eran casi nulas, y dependíamos de nuestra memoria o de un buen libro de referencia para seguir la sintaxis y usar las instrucciones propias del lenguaje. Tal vez por esta razón me acostumbré a esa simplicidad del editor (sí, aunque lo duden, el edlin de DOS y el vi de UNIX son sencillos de usar), que cuando aparecieron los IDEs permanecí renuente a utilizarlos. Pensándolo bien, no debí usar el tiempo pretérito; quise decir que desde que aparecieron los IDEs me he rehusado a utilizarlos (hasta donde el proyecto me lo permite, ni modo, la anarquía no se me da). Prefiero mi editor de textos y teclear de memoria las instrucciones.

Puedo parecer un poco incongruente por lo que voy a decir a continuación, pero confío en su criterio. Yo sí recomiendo a mis alumnos que utilicen un IDE, pero que no dejen de conocer el lenguaje; muchos se confían porque su herramienta les completa automáticamente los nombres de clases o de métodos, les indica con otro color las líneas con errores de sintaxis y les sugiere la corrección (¡incluso algunos IDEs corrigen por sí solos!, ¡increíble!). Sólo por reforzar mi punto, he sido testigo, muchas veces, de casos en los que el programador lleva horas sentado frente a un error en su programa sin poder acertar a decir cuál es, esperando que el IDE, de alguna manera milagrosa, lo resuelva. Que quede claro: el hecho de que yo no use un IDE no implica que no los recomiende, por el contrario, los animo a usarlos, pero con la debida precaución.

Si comienzas a programar en Java, recomiendo usar BlueJ. BlueJ es ideal para comprender mejor los conceptos de orientación a objetos, con la ventaja de un IDE que escribe código automático a partir de un diagrama UML. Para los más agresivos, están NetBeans, Java Studio Creator (de Sun), JDeveloper (de Oracle), Eclipse o JBuilder (de Borland). Yo he usado todos ellos y puedo decir muchas cosas (buenas y malas) de cada uno. Sin embargo, creo que la decisión es tuya. Busca un IDE que sea fácil de usar, no uno donde te tardes más en configurar tu ambiente que en escribir tu programa.

¡Ah!, ¡casi lo olvidaba! Al principio dije que usaba EditPlus. Es una herramienta muy útil, no es un IDE pero se cree uno de ellos. Es un editor de textos como muchos, pero bastante eficiente (quiero decir rápido), resalta sintaxis con colores, puedes configurar programas para que se ejecuten desde su menú, hacer búsquedas de textos usando expresiones regulares (ER) en varios directorios, y muchas cosas más. Tal vez tú conozcas alguno mejor, pero este me ha convencido y me ha hecho recordar muchas veces que las mejores cosas de la vida son las más sencillas... y que quizá debería tener un IDE instalado en esos momentos en que olvido los métodos de la clase String. ;)

:wq!