Fast Roaming就是为了提高roaming的效率。在802.11r前,通常是指在RSN(WPA2)的框架下,略过EAP/802.1X,使用PMKSA Cache中的PMK直接进行连接。
所以,在WPA或是WEP的情况下,无法进行Fast Roaming。
在802.11r发布之前,Fast Roaming大致分为3种情况:
- 普通的PMKSA Cache
- Preauthentication
- OKC(Opportunistic Key Caching)
无论哪种情况,在Roaming时的流程都是差不多的:STA在(re)associate request的RSN IE里带上一个PMKID List,然后AP在PMKSA Cache里找到一个PMKID匹配的Entry。
差别在于Roaming前的行为。
虽然说允许STA送上一个PMKID List,但通常STA只会送一个PMKID。
所以,是否要启动Fast Roaming,完全取决于STA的行为,Fast Roaming能否成功,则需要AP的配合。
Preauthentication
Preauthentication是802.11-2007中定义的Fast Roaming方法。是指STA通过当前连接的AP(AP1),跟它即将要连的AP(AP2)进行一次完整的802.1X认证。认证通过后,AP2中就会生成一条PMKSA Cache。
当Fast Roaming发生时,STA会把新的PMKID送给AP2,AP2在自己的Cache里找到这个PMKID后就可以略过802.1X了。
OKC(Opportunistic Key Caching)
OKC,也叫OPC(Opportunistic PMK Caching),是微软定义的一套标准,并不在802.11标准中。不过多数厂商都支持这种方式,也成为了一种事实标准。
其流程大致如下:
当STA跟AP1经过完整的EAP/802.1X建立连接后,产生一条PMKSA,里面包含一个PMKID1,然后AP1把这个PMKSA传给它的邻居,其中一个就是AP2。
Fast Roaming发生前,STA要根据AA,SPA和PMKID1计算出一个PMKID2,把这个PMKID2放在RSN IE里,送给AP2。
AP2在收到这个PMKID2后,就像平时一样,会在自己的PMKSA Cache里找,当然,这是找不到的。因为Cache没有一个的PMKID是PMKID2。然后,AP2就要对Cache中的每一个Entry计算一次新的PMKID,其必要的几个元素,AA,SPA和PMKID1都是有的。每计算一个就跟PMKID2匹配一次,匹配成功就可以直接进行4次握手。
Preauthentication虽然在Roaming期间略过了802.1X,但还是每次都要做,只不过提前罢了。
OKC的出现,就是为了解决每次都要做802.1X的问题,可以提高效率,降低网络负荷。可是,OKC的方便是建立在牺牲安全性的基础上的。这会导致每个AP上都拿到相同的PMK。
为了同时解决Preauthentication和OKC的缺陷,IEEE推出了802.11r,对Fast Roaming进行了补充。