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等技术来提供网络层通信的漫游支持 。这些问题都有待于将来作深入的研究 。
- 一点点红茶玛奇朵怎么喝
- 黄河颂在语言上有什么特点 黄河颂的特点是什么
- Uplay点数如何获取 快速获取方法介绍
- 田螺吃什么长大的快一点呢
- 原神9个火炬怎么点燃
- 哔哩哔哩弹幕怎么点歌 B站弹幕精确点歌方法介绍
- 2288的几个缺点
- 康佳C879之优点
- 滴塑面料是什么有什么特点
- 对V878的一点看法
