电脑技术学习

接入点内部协议及其在接入点上的实现

dn001

  1 引言
  IEEE 802.11协议制定了无线局域网MAC层和物理层的规范及其基本结构,但并没有对无线局域网的构建做出规定。这给接入点AP和由其组成的分布式系统在功能设计留出了很大的自由空间,但同时也给无线站点STA的移动带来了问题,使STA不能自由地在不同厂商生产的AP间移动。为了解决这个问题,IEEE工作组制定了802.11f协议,具体阐述了接入点内部协议IAPP(Inter-Access Point Protocol),IAPP协议旨在向用户提供AP间的移动功能,以满足用户对移动性日益增长的需求。
  
  IAPP协议只是解决了用户移动而带来的链路层通信的问题,要想保证移动用户IP层通信的畅通,需要使用移动IP或DHCP技术。将 IAPP协议功能和这些技术结合起来,可以向用户提供一个完整的移动性解决方案。
  
  2 IEEE 802.11f协议简介
  在无线局域网中,站点STA的移动行为可能会产生如下几个问题:
  
  1) 旧AP(STA上次接入的AP)会认为自己与STA还有连接,当接收到STA的报文时,它仍会在本地BSS内发送该报文。这会导致无线资源的浪费和AP资源的占用。因此新的AP(接收 STA重连接请求报文的AP)需要将STA的切换情况通知旧AP,让它释放掉与STA的单边连接。
  2) STA在旧AP上进行MAC层认证或其他认证(比如 802.1x认证)时,将会在旧AP上留下相应的用户信息,当 STA切换到新AP时,假如还要进行耗时的认证过程,将导致切换效率不高。因此,当STA发生AP切换时,新AP需要从旧AP上获得STA的用户信息,然后重建STA的工作环境,以对STA进行正确的治理。
  3) 由于STA在切换时只是向新AP提供旧AP的MAC地址(即旧BSSID),要与旧AP通信,新AP还需要知道旧AP 的IP地址等信息,所以要求新AP能够根据旧AP的BSSID查询到它的IP地址。
  4) 在与AP连接的有线网络中可能存在诸如网桥、交换机等二层转发设备。当STA从网桥的一个端口连接的子网段移动到另一个端口的子网段时,假如网桥的转发表不能得到更新,将导致其他网络节点发送给STA的报文不能被正确送达STA现在所处的位置,造成STA的报文丢失。因此需要新AP在处理STA的重连接请求时通知这些二层设备更新转发表。
  
  为了解决上述问题,需要使用IEEE 802.11f协议中推荐的接入点内部协议IAPP。IAPP协议是IEEE 802.11工作组制订的用于AP间互通的协议.它的主要功能是便于扩展服务集ESS的创建和维护,支持802.11移动站点在AP间的移动,保证每个移动站点在确定时刻与AP间只有一个连接关系。包含有IAPP的AP协议结构如下图所示:
  
 

  
图1 包含IAPP的AP协议结构

  在上图中,阴影部分表示模块间没有连接关系。APME(AP management entity)是AP中的治理实体,它负责治理和协调AP中的各个协议功能模块和与AP连接的802.11站点治理实体SME(Station management entity),并通过服务访问点IAPP SAP调用IAPP服务。IAPP是AP上支持STA移动的主要协议模块,同时它又支持了一个RADIUS客户端。当AP初始化加入一个ESS,或AP的802.11 MAC层向APME指示有 STA切换到本AP时,APME使用IAPP服务原语,调用IAPP协议模块发送RADIUS报文与RADIUS服务器交互,或广播基于TCP/IP或UDP/IP的IAPP报文来与DS域中的其它AP通信完成IAPP操作。
  
  RADIUS协议是IAPP模块进行安全正确操作所必需的。非凡是当给定了其它AP的BSSID后,IAPP应能够通过查询RADIUS服务器,找出ESS中的其它AP的IP地址,并获得相关安全信息以保护特定IAPP数据包的内容。网络中的设备除了802.11 AP可能用到IAPP协议操作外,二层网络设备如网桥和交换机等,也会受到IAPP协议操作的影响。
  
  3 IAPP协议的操作流程
  在AP上使用IAPP协议就可以支持STA在子网内的移动,下面分STA向AP发起连接和重连接请求两种情况对IAPP协议的操作流程进行分析。
  
  1) STA发起连接请求时的IAPP操作流程
  
 

  
图2 STA发起连接请求时的IAPP操作流程

  当本地AP的APME接收到BSS中的STA向AP发起802.11 MAC层连接请求后,假如同意连接,并在STA返回ASSOCIATE.indication后,向本地IAPP发起ADD.request请求。本地IAPP在接收到APME的ADD.request请求后,启动确认定时器,并向本地子网广播源MAC地址为STA MAC地址的XID帧和包含STA MAC地址和连接序号的IAPP ADD-notify报文。当对端AP的IAPP收到ADD-notify报文后,提取STA的MAC地址和连接序号,封装在IAPP ADD.indication原语中发给自身的APME,APME收到后会对自己的连接列表进行检查,假如还保留有与该STA的连接关系,而且连接序号比ADD.indication原语所包含序号还旧的话则将之释放,但是假如连接序号比ADD.indication原语所包含序号新的话则对端AP将重复前述过程,重新向本地子网广播源MAC地址为STA MAC地址的XID帧和包含STA MAC地址的IAPP ADD-notify报文,同时通知原来的AP中断与STA的连接。
  
  XID帧是链路层标识交换更新响应帧,当子网上的二层设备,如网桥、交换机等接收到该帧后,根据该帧的源MAC地址来更新自己的转发表。假如在定时器超时前,IAPP收到子网上的二层设备和其它AP的应答后,则调用ADD.confirm原语通知本地APME与STA的连接成功。否则表示连接失败,APME将中断与STA的连接。
  
  2) STA发起重连接请求时的IAPP操作流程
  
 

  
图3 STA发起重连接请求时的IAPP操作流程

  当AP的802.11 MAC层接收到来自STA的重连接请求后,它将调用MLME原语REASSOCIATE.indication通知本地APME。本地APME提取请求报文中旧AP的BSSID、STA的MAC地址和连接序号等,封装在IAPP原语MOVE.request向IAPP发起连接通知请求。IAPP收到MOVE.request请求后,发送RADIUS ACCESS-REQUEST报文与RADIUS服务器交互,或在本地,通过查询预先配置于AP中的ESS中AP MAC地址和IP地址的对应关系,将旧AP的BSSID解析为IP地址。新AP接收到旧AP的IP地址后,向STA原先连接的旧AP以TCP会话方式发送IAPP MOVE-Notify报文,在报文中包含了STA的MAC地址。旧AP响应后,将自己保存的有关STA的上下文信息用MOVE-response报文发送给新AP,并且释放掉自己与STA的连接。新AP接收到旧AP的响应报文后,重建STA的用户环境,然后在本地子网广播源MAC地址为STA的XID帧,子网上的二层设备接收到XID帧后,将根据该帧的源MAC地址更新转发表中的相应记录。IAPP向网络广播通知报文后,调用MOVE.confirm原语通知APME。
  
  假如要对IAPP MOVE-Response报文进行加密,RADIUS服务器在对新AP回复中,除了包括旧AP的IP地址外,还包括有安全域。这些安全域不仅包含了新旧AP通信的共享密钥,而且还用RADIUS注册表中的AP的口令进行了加密。新AP接收到RADIUS服务器的回复后,把安全域作为Send-Security-Block报文发送给旧AP,这也是AP间IAPP TCP交换的第一个信息。旧AP返回ACK-Security-Block报文,这样新旧AP都有了共享密钥,可以对AP间会话所有报文进行加密。
  
  4 RADIUS协议支持
  IAPP可以为ESS提供三种不同级别的支持:第一级不提供治理或安全支持;第二级支持BSSID到IP地址的动态映射;第三级提供IAPP消息的加密和认证。第一级支持仅适用于小规模的ESS。对于大多数ESS而言,需要IAPP提供第二或第三级支持,这要求在ESS中至少设置一个RADIUS服务器来提供地址映射和认证、加密等服务。
  
  ESS中的每一个AP都可以作为RADIUS客户端,它与RADIUS服务器之间拥有一个不同于其它AP的共享密码。此外,RADIUS服务器还为每一个BSSID保留了如下信息:
  a) 基本服务组标识BSSID;
  b) 至少为160位RADIUS BSSID密码;
  c) BSSID的DSM IP地址或DNS域名;
  d) 用于IAPP通信加密的AP所支持的加密套件。
  
  IAPP操作中用到的RADIUS服务可以分为两大类:ESS治理和地址动态映射。而ESS又可以分为AP注册和认证、IAPP密钥治理和分发以及STA的接入治理。
  
  1. AP注册和认证
  
 

  
图4 AP的RADIUS注册接入过程

  AP为了加入一个ESS,首先由自身的IAPP向ESS中的RADIUS服务器发送携带AP IP地址、IAPP注册服务类型和加入ESS的SSID的RADIUS注册接入请求报文,该报文以AP的BSSID作为用户名,以AP的BSSID密码作为用户口令,还包含了AP所支持的封装安全负荷协议ESP和认证头协议AH的模式列表。RADIUS服务器在接收到该报文后,将对AP的身份进行鉴别,同时对报文中的ESP列表进行检查,假如AP支持ESP加密和ESP认证算法,并证实AP身份有效,RADIUS服务器将AP的BSSID注册成为ESS中的一部分,同时向AP返回RADIUS注册接入许可报文。在该报文中不仅确认了AP成为ESS的有效成员,而且还向AP提供了多项安全域,用于构建一条安全的IAPP组播信道。
  
  假如RADIUS服务器对ESP列表检查后,判定AP不支持ESP加密和ESP认证算法,或者AP身份无效,则向AP发送RADIUS注册接入拒绝报文,拒绝AP加入本ESS。当AP要脱离ESS时,需要向RADIUS服务器发送注销报文,注销AP的ESS成员身份。
  
  2. STA的接入治理
  当AP的802.11 MAC向APME指示有STA切换到本AP,并且接收到由STA发出的IAPP MOVE-Request请求后,该AP会向所在ESS中的RADIUS服务器发送包含STA先前连接AP的 BSSID(旧BSSID)的RADIUS接入请求报文。RADIUS服务器收到新AP接入请求报文后,将会检查旧BSSID是否是当前ESS中的有效成员。假如RAIDUS服务器判定新AP和旧AP可以用IAPP互通,则向新AP返回一个RADIUS接入许可报文。该报文不仅确认了旧BSSID是当前ESS中一个有效成员,而且还包含了新、旧BSSID的安全域用于新旧AP之间安全信道的构建。
  
  假如RAIDUS服务器对旧BSSID检查后,认为新AP和旧AP不能通过IAPP互通,则向新AP返回RADIUS接入拒绝报文,新AP接收到RADIUS服务器的接入拒绝响应后,向申请连接的STA发送MLME REASSOCIATE.confirm原语,并指示连接失败。
  
  3. IAPP密钥的治理和分发
  在答应一个AP加入ESS后,RADIUS服务器会保存该AP的BSSID密码,并向该AP回复RADIUS注册接入许可报文。在该报文中包含了一些可选属性,指定了AP的ESP加/解密密钥和认证密钥、ESP加/解密算法号和认证算法号等。利用这些密钥和算法,AP可以对发送和接收的ADD-Notify报文进行加密和解密操作,从而构建一条安全的IAPP组播信道。
  
  RADIUS服务器还为新旧AP之间的通信提供安全支持。在RADIUS接入许可报文的可选属性中,New-BSSID-Security-Block包含了RADIUS服务器为新AP指定的用于ESP加密和认证的一系列安全信息,并用新AP的BSSID密码进行加密;Old-BSSID-Security-Block包含了RADIUS服务器为旧AP指定的用于ESP加密和认证的一系列安全信息,用旧AP的BSSID密码进行了加密;新旧AP的IAPP利用这些属性,就可以建立一条安全连接进行通信。
  
  4. 地址动态映射
  每一个AP在加入ESS时,都会向ESS中的RADIUS服务器发送RADIUS注册接入请求报文,在该报文中包含了AP的BSSID和AP的IP地址等信息。RADIUS在接收到AP的RADIUS注册接入请求报文后,会对其进行检查。假如通过检查,RADIUS服务器将AP的BSSID注册成为ESS中的一部分,同时还保留了AP的的BSSID和IP地址等信息。这样,ESS中的每一个AP都可以通过RADIUS服务器来查询其它AP的IP地址了。
  
  假如没有在RADIUS服务器进行注册,AP将不能使用RADIUS服务器的地址解析功能将AP的BSSID解析为DSM的IP地址。
  
  5 IAPP协议在AP上的实现分析
  为了在AP上实现IAPP协议的功能,需要在AP中设置专门的IAPP模块来执行IAPP操作和RADIUS服务。IAPP模块在AP中完成的主要功能是:
  (1) 初始化功能
  主要是完成IAPP协议和RADIUS客户端的初始化,同时打开用于IAPP操作的TCP/UDP端口;
  
  (2) 声明功能
  a) 当有STA向本AP发起连接请求时,IAPP模块将向DS广播IAPP ADD-notify报文,使得至少在本地子网内的其它AP都不会再有与该STA的连接关系。
  b) 当有STA向本AP发起连接或重连接请求时向有线网络广播XID帧,更新本地子网中二层设备的转发表,使得它们可以正确转发目的地址为STA的数据包。
  
  (3) 移交功能
  当有STA向AP发起重连接请求时,IAPP模块向旧AP发送IAPP MOVE-notify报文,通知旧AP以前与其连接的STA切换到了新AP。旧AP的IAPP模块将用IAPP MOVE-response报文将该STA的有关信息返回给新AP,同时清除与该STA的连接关系。新AP根据收到的报文获得用户信息重建STA的工作环境。
  
  (4) 支持ESS治理和AP的IP地址查询功能。
  当ESS中配有RADIUS服务器时,IAPP还需要实现RADIUS客户端功能才保证IAPP的正确操作,为此,IAPP模块还需要实现:
  a) IAPP初始化时,用RADIUS Registration Access-Request报文向RADIUS服务器注册。
  b) 当有STA切换到本AP时,向RADIUS服务器发送RADIUS Access-Request报文,查询STA原属AP的IP地址。
  c) 当AP要脱离ESS时,向RADIUS服务器发送注销报文,同时关闭IAPP端口。
  
  为了实现上述IAPP功能,IAPP模块要分成三个子模块:IAPP主模块、RADIUS通信模块和接口模块。IAPP主模块负责侦听和处理IAPP端口通信,指定给IAPP的端口号是3517。RADIUS通信模块支持与RADIUS服务器的交互和AP的IP地址查询,侦听和处理RADIUS端口通信。接口模块向MAC层协议模块的连接和重连接操作提供调用接口。除此之外,MAC层模块、桥接模块和802.1x控制模块还将向IAPP模块提供功能接口,支持IAPP读取、配置和治理该模块内的用户信息。
  
 

  
图5 IAPP功能模块图

  IAPP主模块的执行流程如下图所示:
  

  
图6 IAPP主模块的执行流程

  6 存在的问题
  IAPP协议能较好地支持STA在子网内AP间的散步,但是发生AP切换时,STA的QoS并不能得到可靠地保证。另外,当STA跨子网漫游时,IAPP还必须结合移动IP和DHCP等技术来提供网络层通信的漫游支持。这些问题都有待于将来作深入的研究。