According to the standard, stations are supposed to repeatedly listen or probe for a better AP, but interval, triggers, and thresholds all vendor-defined. When the station decides to roam, it disassociates with the old AP and (re)associates with the new AP. Typically you will see this happen during loss of signal scenarios, but you're also likely to experience it when signal strength drops because you're moving from one coverage area to another, or something happens to your existing AP (like it gets rebooted). Sometimes a "sticky" card seems to take forever to decide to roam, but that's probably intentional - after all, you don't want the card to flop back and forth continuously between similar APs. If necessary, you can force a "roam" by disabling and re-enabling the card when conditions have changed.
Many wireless cards are supplied with a client utility that's optional for WinXP but required for other operating systems, like Win2K. Some client utilities have an access control list that identifies preferred APs by MAC address. For example, Cisco's Aironet Client Utility can define "profiles" with up to 4 preferred APs listed per profile. This can be used to stop roaming in a situation where there's too much overlap between AP footprints and roaming becomes unproductive. It can also be used as a (weak) security measure, or to statically distribute workload across multiple APs in the same heavy-use location. AP lists can be found in 3rd-party client utilities for both home and business products, but these lists are rarely used except when trying to solve a problem. Depending on the product, your station may associate with other APs if your preferred AP(s) are unavailable, or your station may associate only with mandatory AP(s) and ignore any other available APs.
This was first published in May 2004