13/3/08

Las funciones básicas de un switch

El artículo más leído de este blog, es el de Vale la pena un switch administrable? Algunos lectores están interesados en saber las diferencias entre un switch administrable y otro que no lo es, las diferencias de precio son importantes y por eso surge la curiosidad, que ventajas tiene uno sobre el otro? Otros lectores ya cuentan con un switch administrable, pero no saben que hacer con él, como aprovechar esas características que costaron muchos dólares de más.

No es posible describir en un solo post todo lo que es posible hacer con un switch administrable, por lo que en el futuro espero dedicar al menos un post al mes para describir con más detalle algunas características de los switches, con ejemplos prácticos de implementación, por lo pronto quiero empezar con los fundamentos, en realidad como funciona un switch?, Esto nos ayudará a sentar las bases para más adelante discutir prestaciones más avanzadas de los switches.

Un Switch es un dispositivo de red que funciona en la capa 2 del modelo OSI, para los lectores que no están familiarizados con el modelo OSI, los invito a leer la definición de la wikipedia, para los propósitos de este post lo importante es saber que la capa 2 tiene que ver con la dirección física de la tarjeta de red, esto es la dirección MAC, que es un número único asignado por el fabricante a la tarjeta de red, cada fabricante tiene su propio rango de direcciones MAC, lo que asegura que no se repitan, en la práctica es posible modificarlo mediante software, pero en lo que respecta al proceso de fabricación, si es un número único asignado a cada tarjeta de red.

De paso también menciono que hay switches de capa 3 e incluso de capa 4, pero aun estos switches más avanzados, deben cumplir con las funciones de un switch capa 2, que es las que explicaremos en este post.

Un switch debe realizar tres tareas básicas, las cuales se describen a continuación.

1. Aprender direcciones (address learning)

Todo switch tiene una tabla de direcciones MAC con el puerto asociado, cuando el switch se enciende por primera vez, esta tabla esta vacía, ahora con relación a la figura 1, supongamos que A, desea comunicarse con B, para esto, A tiene preparado un frame, en el que entre otras cosas, esta expresadas los direcciones de origen y destino. El siwtch recibe este paquete y toma nota de la dirección de origen y la anota en la tabla de direcciones MAC, esto es la línea 1 de la tabla MAC ilustrada en la figura 1. Inicialmente el switch no conoce donde esta ubicado B, por lo que reenvia el frame a través de todos los puertos excepto en el puerto donde lo recibió, de esta manera B recibe el frame y lo responde nuevamente con un paquete que tiene como origen la dirección MAC de B, por lo que de esta manera, el switch ahora puede determinar donde esta ubicado B y agrega la segunda línea de la pequeña tabla MAC ilustrada en la figura 1. Para la siguiente comunicación entre A y B, el switch conoce la ubicación exacta de ambos y reenvia los frames directamente entre A y B.




2. Reenviar y Filtrar

Cuando el switch recibe un frame, examina el destino y busca en la tabla el puerto de salida y lo envía únicamente a través de este puerto, esta es la función de filtro, limita el envió del frame al puerto específico en el que se encuentra el destino. Por otra parte, como ya vimos al inicio, si la tabla MAC aun no tiene la información el paquete es reenviado a todos los puertos excepto al puerto en el que se recibió el paquete originalmente, lo mismo pasa cuando ocurre un broadcast (en breves palabras, un broadcast es un frame cuya dirección de destino es todos los del segmento) es decir, cuando una PC envía un frame de broadcast, este es recibido por todas las PCs en el mismo segmento de red, en el caso de los broadcast, el switch los reenvia por todos los puertos, excepto en el puerto que lo recibió originalmente.

3. Evitar Loops

Una tercera función básica e importante de un switch es evitar loops (uso el ingles, porque me parece más apropiado que bucle, o lazo). Para entender que es un loop, y lo dañino que es para cualquier red, observemos la situación ilustrada en la figura 2. Supongamos que por conveniencia alguien decide que desea tener dos enlaces a un mismo switch, de tal forma que si uno falla el otro funcione, o supongamos que alguien inadvertidamente ve un cable colgando y con la mejor de las intenciones decide conectarlo al switch sin percatarse que ese mismo cable ya estaba conectado en otro puerto del mismo switch, lo que ocurre a continuación es desastroso.


Imaginemos que la PC envía un broadcast, este es recibido por el switch 01 y reenviado a todos los puertos excepto el puerto F0/3 (porque por ahí fue recibido originalmente), el switch 02 recibe uno de los broadcast en el puerto F0/1 y lo reenvia a todos los demás puertos excepto por supuesto el puerto F0/1, el problema es que el broadcast también llego por el puerto F0/2 y reenviado a todos los puertos, así que el resultado es que tanto en F0/1 como en F0/2 del switch 02, tendremos nuevamente un paquete de broadcast enviado al switch 01 que nuevamente repite la acción y de esta forma tenemos un loop infinito, en la práctica lo que ocurre es que esto deja inutilizada la red, ya que los recursos en el switch están totalmente consumidos enviando y recibiendo broadcast. He vivido experiencias de estas y créanme que no es nada agradable.

Por lo anterior, un switch debe proveer de mecanismos que eviten la formación de estos loops, y la solución es el Spanning Tree Protocol o STP, este protocolo evita la formación de loops en los switches

De las tres características antes mencionadas, las primeras dos están presentes en cualquier switch sea o no administrable, sin embargo, la tercera, la posibilidad de evitar loops únicamente esta disponible en switches administrables, no solo eso, usualmente requieren poca o ninguna configuración, por lo que a mi entender, este simple hecho es una buena razón para utilizar switches administrables.

Una de las preguntas que me han hecho algunos lectores es la siguiente, acabo de comprar un switch administrable, que debo configurarle para que mi red funcione? en principio nada, el switch tan pronto se conecte a la energía eléctrica y tenga PCs conectadas en sus puertos intentando comunicarse unas con otras, empezara a construir su tabla de direcciones, reenviara y filtrara frames y también evitara loops, por supuesto en el caso de los switches administrables.

También una palabra de advertencia, el hecho de tener algunos switches administrables no evitara la formación de loops en los switches no administrables, he visto redes de miles de dólares venirse abajo porque alguien conecta en algún punto de la red, un switch no administrable e inadvertidamente forma un loop. Por supuesto, la presencia de switches administrables permitirá diagnosticar y resolver el problema de manera más rápida.

Ahora, supongo que no invertiste miles de dólares, para que tu switch aprenda direcciones, reenvie/filtre frames y evite loops, por supuesto que deseas hacer muchas cosas más con tu switch, te invito a dejar un comentario con tus inquietudes, experiencias y espero más adelante estar publicando otros artículos para que puedas desquitar cada dólar de tu inversión.

7/3/08

El comando netstat en Windows

Netstat es una herramienta disponible desde la línea de comando de la mayoría de sistemas operativos importantes (Windows, Linux, Unix, etc), es otra de esas herramientas disponibles gratuitamente, pero a mi parecer bastante subutilizada. Entre otras cosas, esta herramienta permite dar un vistazo a las conexiones que tiene establecida la PC, también permite ver algunas estadísticas de red y la tabla de ruteo (esto ultimo también esta disponible con el comando route print)

En este post me voy a concentrar en la versión para Windows, particularmente en XP, puedo suponer que las mismas opciones también aplicarían a Windows Vista, pero de momento no tengo como comprobarlo. Ahora, sin más preámbulos, veamos algunos usos prácticos de este comando.

Para utilizar esta herramienta, únicamente tienes que abrir una línea de comando y escribir netstat al presionar enter, se desplegara un listado de conexiones activas en tu PC, como puede verse en la siguiente figura, la primera columna muestra el protocolo (puede ser tcp o udp), la siguiente muestra la dirección local junto con el puerto local, a continuación esta la dirección y puerto remoto y finalmente se muestra el estado de la conexión, en la figura puede verse que hay conexiones establecidas y otras en estado TIME_WAIT, esto indica que son conexiones tcp que ya se están cerrando. Esta información se captura en un instante de tiempo (constante se están creando y cerrando conexiones, así que aquí viene el primer tip, si deseas que la lista se este refrescando cada x tiempo, puedes agregar el numero de segundos de intervalo al final del comando, por ejm. netstat 10 refrescara la estadística cada 10 segundos.


Si el uso anterior fuera el único de este comando, sería interesante, pero quedaría en deuda, la clave esta en usar las opciones, si deseas verlas basta con escribir el comando netstat help, hay varias opciones y te animo a experimentarlas, se pueden utilizar solas o combinadas, en lo particular me resultan útiles algunas opciones especificas que describo a continuación.

Utilizando el comando con las opciones a (que despliega todas las conexiones y puertos que están abiertos, es decir esperando conexiones o en listening state) y o que despliega el PID del proceso que esta utilizando la conexión, el comando sería netstat -ao y el resultado puede verse en la siguiente figura.


Saber que puertos están abiertos es importante ya que permite detectar algunos procesos que no deberían estar en este estado, esto puede ayudar a descubrir spywares en tu PC, o protocolos que están corriendo y no deberían, por ejemplo en la figura anterior observo que el puerto 1025 en mi PC esta en estado LISTENING, la pregunta obvia es que programa o servicio esta abriendo el puerto 1025?, aquí es donde entra la opción o del comando, ya que muestra el PID (process ID),que en este caso en particular es esl 120, sabiendo este número, podemos utilizar el comando tasklist, que muestra el servicio o programa que esta abriendo este puerto, en la siguiente figura puede verse el resultado del comando tasklist, ahí observo que el programa asociado al proceso 120 es alg.exe nunca he oído hablar de alg.exe así que esto me genera curiosidad después de investigar un poco en internet, me doy cuenta que es un proceso normal de Windows utilizado por Internet Connection Sharing, uff, menos mal, sin embargo, utilizando esta misma lógica, se pueden encontrar programas maliciosos en tu PC (en mi caso, el siguiente paso sería abrir Wireshark y capturar tráfico para tener aun más detalles de lo que esta pasando).


La otra opción que puede resultar muy útil de este comando, es la opción de ver estadísticas de la conexión, el comando sería netstat -es que desglosa las estadísticas por protocolo, un análisis de estas estadísticas puede revelar problemas de cableado, o con la interface (por ejemplo si se observa un número alto de errores), o también ayudar a aislar mejor la causa del problema, te animo a experimentar con esta opción y ver que estadísticas te pueden resultar útiles.

Finalmente un consejo, es una buen práctica utilizar regularmente este comando en tu PC, si lo haces cuando todo esta funcionando bien, puedes identificar que procesos son normales, que puertos están abiertos, etc, esto te puede servir de base, en el futuro, si tu PC empieza a dar problemas, un rápido vistazo con netstat -ao puede ayudarte a identificar la raíz del problema, no digo que es un método infalible pero vale la pena considerarlo.