wifi·por dentro
4 · Roaming

Roaming: cambiar de punto de acceso

Tienes varios APs con el mismo nombre de red. Te mueves. ¿Cuándo se cambia tu móvil al AP más cercano? Spoiler: más tarde de lo que crees, y el que decide es él.

Quién decide: siempre el cliente

El AP no puede pasarte a otro AP. Solo el móvil o el portátil decide cuándo cambiarse. Y la mayoría son pegajosos (sticky clients): no sueltan el AP en el que están mientras "vaya bien", aunque tengan uno mucho mejor al lado.

Así decide Linux (wpa_supplicant 2.12, sacado de su código):

Escanea (bgscan) y ve otro AP ¿El AP actual va bien? SNR > 25 dB (≈ señal mejor que -64 dBm) sí NO cambia no ¿El otro se oye más fuerte por al menos…? 5 dB (señal -64…-70) · 4 (-71…-75) · 3 (-76…-80) · 2 (-81…-85) · 1 sí no CAMBIA de AP Excepción: si estima que el otro AP le da más de 5 Mbit/s más (otro ancho de canal, wifi 6…), cambia aunque el actual vaya bien. Si pierde el AP (lo apagan, le echan…), al reconectar elige el de mejor SNR.

Pruébalo: ¿cambiaría Linux?

El paseo: muévete por el pasillo

Arrastra el PC por el pasillo de 60 m (o pulsa ▶). Compara el roaming ideal (siempre en el AP que mejor se oye) con un cliente pegajoso típico de móvil (solo busca otro AP por debajo de -70 dBm y cambia si es 5 dB mejor).

Señal de cada AP a lo largo del pasillo

Velocidad real: roaming ideal frente a cliente pegajoso

En el escenario I, entre los metros 35 y 45 el pegajoso sigue en el AP1 (a -66…-70 dBm) teniendo el otro AP mucho mejor: pierde unos 30 Mbit/s. Con celdas pequeñas (E) la señal cae antes por debajo del umbral y el pegajoso cambia antes.

Cuánto se corta al cambiar

Corte típico al cambiar de AP (milisegundos)

Una llamada de voz o vídeo aguanta cortes de unos 150 ms. Con WPA2-Enterprise (usuario y contraseña, típico de empresas y universidades) hay que repetir la autenticación con el servidor: por eso existe 802.11r (Fast Transition), que deja las claves preparadas en el AP nuevo.

El AP te echa (o te empuja)

Lo que propones, "que el AP te eche según te alejas y te conectes al más cercano", existe y se llama minimum RSSI o client steering. Como el AP no puede decidir por el cliente, tiene estas herramientas, de la más suave a la más bruta:

TécnicaQué haceCorteRiesgo
802.11k (Neighbor Report)Da al móvil la lista de APs vecinos para que busque más rápido—Ninguno
802.11v (BSS Transition)"Por favor, vete a este otro AP." El móvil puede negarseComo un roaming normalBajo
Ignorar a los lejanosNo contesta a los que preguntan con poca señal—Medio
Rechazar por señalNo deja conectarse a quien llega flojo (código 34: poor channel conditions)—Medio
Echar (deauth)Desconecta al cliente; al reconectar elige el AP mejor~1 s o másAlto si no hay a dónde ir

En los equipos de verdad: Minimum RSSI en Ubiquiti, signal-range en las access-list de MikroTik, usteer o DAWN en OpenWrt.

Dónde poner cada umbral

-50-90 dBm -67diseño: mínimo en toda la zona -70 / -75el cliente empieza a buscar -75 / -80el AP echa o rechaza -85sin conexión
El peligro: si el umbral para echar es más alto que la señal que hay en el borde de la celda vecina, echas a gente que no tiene a dónde ir. En el laboratorio se ve: con el rechazo a -45 dBm en los tres APs, el PC se queda sin wifi teniendo -30 dBm de señal. Reglas: diseña bien primero, pide antes de echar (802.11v), y echa solo si hay otro AP al menos 5-10 dB mejor.

Qué hacer con un cliente pegajoso

DóndeQué se puede hacer
Linux con iwdRoamThreshold en /etc/iwd/main.conf (por defecto -70)
Linux con wpa_supplicantbgscan (NetworkManager ya pone uno). La regla del SNR > 25 no se puede cambiar
WindowsPropiedades del adaptador → "Agresividad de itinerancia"
MóvilesNada: decide el fabricante. Apagar y encender el wifi le obliga a elegir el mejor
En los APsBajar la potencia (ver Potencia), activar 802.11k/v y echar a los lejanos
El simulador solo llega a -50 dBm (SNR 39 dB), así que wpa_supplicant nunca cambia solo: el PC se queda en el AP1 todo el pasillo. Es exactamente el cliente pegajoso. El cambio se fuerza con wpa_cli roam <BSSID>, apagando el AP (hostapd_cli disable), echándolo (hostapd_cli deauthenticate) o con 802.11v (hostapd_cli bss_tm_req). Un ping -i 0.2 -O en otra terminal muestra cuánto se corta.