El protocolo Ethernet utiliza una serie de 12 números y letras en hexadecimal para identificar unívocamente a un dispositivo de red. Son las llamadas direcciones MAC (dirección de control de acceso al medio) y, con esos 48 bits, se intenta que dos dispositivos en el mismo dominio de colisión no coincidan. ¿Creéis que con 281 billones de direcciones habrá alguna repetida en la red y tendremos problemas?
A cada fabricante de tarjetas de red se le concedió un grupo de direcciones para que la gestionase por sí mismo. La primera parte de la MAC nos indica quién es el fabricante (OUI). Este código es muy interesante, ya que existen muchos buscadores de MACs en Internet a los cuales consultar:
Con estas búsquedas, dada una MAC, podremos hacernos una idea de qué equipo podría ser el que está ‘dando la lata’ en nuestra red. En nuestro caso, parece que algún compañero ha virtualizado un equipo…
La segunda parte de la MAC, los otros 24 bits restantes, son para que el fabricante asigne alguna de las 16 millones de MAC a los productos que fabrica (UAA).
¿Dónde graba la MAC el fabricante?
Las tarjetas de red tienen una zona de memoria de solo lectura (ROM) donde el fabricante la graba a fuego (este concepto también es conocido como ‘burned-in address’ o ‘bia’).
Una vez que el dispositivo se inicializa, el driver del sistema operativo utiliza otra zona de memoria más volátil para guardar allí la MAC que el fabricante le ha otorgado y algunas direcciones adicionales como la MAC de Broadcast o los grupos Multicast a los que el equipo va a pertenecer:
El dispositivo, una vez finalizada su puesta en marcha, estará preparado para aceptar paquetes. Se ha conformado de esta manera un filtro de direcciones MACs que la tarjeta de red va a procesar. El resto de paquetes quedarán descartados.
Este filtro es muy importante, ya que si no existiera, cada paquete existente en nuestra red llegaría a la CPU de nuestro equipo. Se consumirían así esos valiosos ciclos de reloj que tanto nos hacen falta para mantener el sistema operativo: el antivirus, el paquete ofimático, los navegadores… Aunque a día de hoy los procesadores multi-hilo son muy potentes, la base de un buen diseño de ingeniería está en los detalles y la suma de muchos detalles hace que el rendimiento sea óptimo.
Modo promiscuo
Lo comentaba mi compañero Antonio Guerrero en posts anteriores. Para utilizar algunas herramientas de análisis de red de bajo nivel como WinDump o Wireshark, las tarjetas de red han de configurarse en lo que se llama ‘modo promiscuo‘. Es un modo especial en el que todos los paquetes que hay en la red son pasados directamente a la CPU y, de ahí, a las aplicaciones para su posterior análisis.
¿Adivináis ya en qué se basa el modo promiscuo y que hace con el filtro de MACs que comentábamos antes?
Efectivamente, borra cualquier entrada de la RAM para que no exista ningún filtro. Todos los paquetes, independientemente de la MAC a la que vayan destinados, son invitados a entrar en nuestro sistema para su análisis.
Como podéis comprobar, el filtro MAC es como un mini-firewall a nivel de tarjeta de red. Incluso se puede optimizar en algunos dispositivos de red utilizando máscaras de MAC para agrupar conjuntos de direcciones MAC y que el filtro sea lo más ‘escueto’ en la memoria RAM.
Son detalles y curiosidades que nos ayudan a conocer un poquito más a fondo cómo funcionan las redes y a realizar mejores diagnósticos cuando nuestro equipo ‘no tiene Internet’…