CAPWAP是Control And Provisioning of Wireless Access Points Protocol Specification的缩写,意为无线接入点的控制和配置协议,是无线局域网内最重要的技术之一。很多朋友经常会把CAPWAP协议和IEEE 802.11协议混淆在一起,从全局角度来看,IEEE 802.11协议用来解决STA和AP之间的通信,而CAPWAP协议用来解决AP与AC之间的通信。
本次无线CAPWAP隧道技术的介绍分为理论篇和实践篇,本期理论篇详细介绍了CAPWAP协议报文、状态机、隧道建立过程三部分,帮助大家深入理解CAPWAP协议技术原理。下一期实践篇,将梳理项目中最常遇到的CAPWAP隧道无法建立的可能原因和解决思路。希望本文能够帮助各位读者把CAPWAP协议技术学透彻、用熟练。
在瘦AP场景下,AP不能单独工作,需要与AC配合使用,因此AP和AC之间需要一个通信协议可以让它们进行互联。CAPWAP协议用于AC对其所关联的AP的集中管理和控制,为AP和AC之间的互通性提供了一个通用封装和传输机制。
CAPWAP协议有两种类型的报文:CAPWAP控制报文和数据报文。控制报文主要携带的是信息要素,用于AC对于AP工作参数的配置和CAPWAP隧道的维护;数据报文主要携带终端发送的数据报文,用于传输终端的上层数据。控制报文和数据报文分别传输在不同的UDP端口,控制报文使用端口5246,数据报文使用端口5247。
不受DTLS保护的CAPWAP控制报文由CAPWAP前导、CAPWAP首部、控制首部、信息要素组成;受DTLS保护的CAPWAP控制报文由CAPWAP前导、DTLS首部、CAPWAP首部、控制首部、信息要素、DTLS尾部组成。是否受DTLS保护是CAPWAP的可选项, DTLS用于对CAPWAP报文进行加密和验证,提高CAPWAP报文的安全性。锐捷无线设备CAPWAP控制报文DTLS保护默认开启,可在ac-controller模式下通过命令no capwap dtls enable关闭用于故障排查(锐捷设备命令行)。
CAPWAP前导中只包含Version和Type两个字段,Version始终为0,Type有两个可选参数0(CAPWAP Header)和1(CAPWAP DTLS Header)。CAPWAP前导的作用是通告其后面跟着的载荷类型是CAPWAP首部还是DTLS首部,即通告该CAPWAP报文是否加密。
CAPWAP首部,Header Length指出CAPWAP首部大小;Radio ID用于指出此消息与哪个物理无线电设备关联;Wireless Binding ID用于指出与此无线电设备关联的无线分组的类型;Header Flags标志位目前有六位在用,每一位代表不同含义具体可参考《RFC 5415》;Fragment ID和Fragment Offset用于CAPWAP报文分片时使用。
控制首部,Message Type用于表示CAPWAP控制报文的类型,目前有26种类型控制报文,每种类型控制报文的作用不同且携带的信息元素也不同,具体请查看本文最后的附录1《CAPWAP协议控制报文类型汇总解析》;Sequence Number序列号,用于匹配Request报文和Response报文,Response报文中序列号与其要回复的Request报文中的序列号相同;Message Element Length指出其后携带的信息要素的大小;Flags始终为0。
信息要素载荷是由多个独立的信息要素组成,其中包含的信息要素的类型和数量与CAPWAP控制报文类型有关,每个信息要素由Type、Length、Value及其他字段组成。其中Type指出信息要素的类型,其中1-1023是CAPWAP协议信息要素,1024-2047是IEEE 802.11信息要素,具体请查看本文最后的附录2《CAPWAP协议控制报文消息要素类型汇总解析》。
不受DTLS保护的CAPWAP数据报文由CAPWAP前导、CAPWAP首部、数据报文组成;受DTLS保护的CAPWAP数据报文由CAPWAP前导、DTLS首部、CAPWAP首部、数据报文、DTLS尾部组成。是否受DTLS保护是CAPWAP的可选项, DTLS用于对CAPWAP报文进行加密和验证,提高CAPWAP报文的安全性。锐捷无线设备CAPWAP数据报文DTLS保护默认关闭,可通过命令开启。
由于CAPWAP协议使用DTLS,CAPWAP状态机的某些指令会触发DTLS状态机中的状态转换,而DTLS状态机中的某些通知会触发CAPWAP状态机中的状态转换。所以如下图所示CAPWAP状态转换情况较多,本文下一小节为各位读者介绍CAPWAP隧道成功建立过程中AC和AP的CAPWAP状态机的变化情况,想了解更多状态机转换条件介绍的读者可以阅读《RFC 5415》。
AP启动后状态机处于Idle状态,AP通过多种途径(IPv4单播、IPv4广播、IPv4组播、IPv6组播)明文发送Discovery Request报文,用于发现网络中可用的AC,并提供自己的基本信息给AC。AC收到Discovery Request报文后,使用Discovery Response报文回应,将自己支持的服务告诉给请求AP。因为此时DTLS隧道还未建立,所以Discovery Request报文和Discovery Response报文是使用明文交互的。
DTLS隧道建立后,AP发出Join Request报文用于申请加入AC。AC收到Join Request报文并回应Join Response报文答复AP是否同意AP加入。
Join Response报文中包括Image Identifier消息要素,指出AC要求AP运行的软件版本。AP收到Join Response报文后,对比当前使用版本和AC要求的版本是否一致,若版本一致状态机进入Configure状态。若版本不一致状态机进入Image Data状态,AP与AC交互Image Data Request报文和Image Data Response报文进行版本传输并升级,升级后AP进行重启,重新与AC进行CAPWAP隧道建立。
AP状态机变为Configure状态后,AP发出Config Status Request报文,用于向AC请求配置文件下发,AC收到Config Status Request报文后回应Config Status Response报文,通知AP按要求进行配置。
AC发送Config Status Response报文下发配置后还需要确认配置是否在AP上执行成功,AP收到Config Status Response后,状态机进入Data Check状态, 并发送Change State Event Request报文报告配置执行情况,AC收到Change State Event Request报文后回应Change State Event Response报文,状态机变为Run状态,至此AP与AC的CAPWAP隧道建立成功。
相信读完以上内容,大家对CAPWAP协议的基础理论知识和CAPWAP隧道建立的过程,有了一定的了解。后续的实践篇,作者将从运维的角度,分析在日常工作中最常遇到的CAPWAP隧道无法建立问题的解决思路,敬请期待。
CAPWAP控制报文类型 | | |
| | AP发送,用于发现网络中可用的AC,并提供自己的基本信息给AC |
| | |
| | |
| | |
Configuration Status Request | | |
Configuration Status Response | | |
Configuration Update Request | | |
Configuration Update Response | | |
| | AP用来发送信息给AC,WTP Event Request可能是阶段性发送或者是作为一个AP同步事件的响应 |
| | |
Change State Event Request | | 当AP收到来自AC的Configuration Status Response,AP使用Change State Event Request来提供Radio的当前状态,确认AC提供的配置已经成功应用;在Run状态下,AP发送Change State Event Request来告诉AC,AP的Radio发生了意料之外的改变 |
Change State Event Response | | AC发送,响应Change State Event Request |
| | AP和AC之间发送,在控制报文没有发送的时候,用于CAPWAP隧道的维系 |
| | AP和AC之间响应,在控制报文没有发送的时候,用于CAPWAP隧道的维系 |
| | |
| | |
| | |
| | |
Primary Discovery Request | | AP发送,判断他首选(或配置的)AC是否可用或者执行一个Path MTU Discovery |
Primary Discovery Response | | |
| | |
| | AC对Data Transfer Request消息的响应 |
Clear Configuration Request | | AC发送,用于告诉AP将自己的配置恢复至出厂默认值 |
Clear Configuration Response | | |
Station Configuration Request | | AC用于创建、修改、删除AP上的Station会话状态 |
Station Configuration Response | | 响应Station Configuration Request |
CAPWAP控制报文信息要素类型 | | |
| | |
| | AC IPv4列表消息要素用于为AP配置可供AP加入的最新AC列表 |
| | AC IPv6列表消息要素用于为AP配置可供AP加入的最新AC列表 |
| | AC名称消息要素包含以UTF-8格式表示的AC身份 |
| | 带优先权的AC名称消息要素的AC Name由AC发送给AP,以便配置优先的AC |
| | |
Add MAC Access Control List (ACL) Entry | | 添加MAC ACL条目消息要素由AC用于在AP上添加MAC ACL列表条目,确保AP不再为该消息中给出的MAC地址提供服务 |
| | 添加终端消息要素由AC用于通知AP它应当转发终端的流量 |
CAPWAP Control IPv4 Address | | CAPWAP控制IPv4地址消息要素由AC在Discovery处理期间发送给AP,以及由AC用于提供该AC上的可用接口和提供目前连接的AP数量 |
CAPWAP Control IPv6 Address | | CAPWAP控制IPv6地址消息要素由AC在Discovery处理期间发送给AP,以及由AC用于提供该AC上的可用接口和提供目前连接的AP数量 |
| | CAPWAP计时器消息要素由AC用于配置AP上的CAPWAP计时器 |
| | 数据传输数据消息要素由AP用于提供信息给AC用于调试 |
| | 数据传输模式消息要素由AP用于指出它正在发送到AC用于调试的数据传输信息类型 |
| | 解密错误报告消息要素的值由AP用于通知解密出错的AC,这些错误是自上次报告以来发生的 |
Decryption Error Report Period | | 解密错误报告周期消息要素值由AC用于通知AP,它应当多长时间发送一次解密错误报告消息 |
| | 删除MAC ACL条目消息要素由AC用于在AP上删除MAC ACL条目,确保AP向在该消息中给出的MAC地址提供服务 |
| | 删除终端消息要素由AC用于通知AP,它不应当再对特定终端提供服务。 |
| | 发现类型消息要素由AP用于简要说明,它是如何最终知道存在一个AC,它正在向该AC发送Discovery Request消息 |
| | 重复的IPv4地址消息要素由AP用于通知AC,该AP已经检测到另一台设备,该设备使用的IP地址与此AP目前正在使用的相同 |
| | 重复的IPv6地址消息要素由AP用于通知AC,该AP已经检测到另一台设备,该设备使用的IP地址与此AP目前正在使用的相同 |
| | 空闲超时消息要素由AC发送给AP,向其提供Idle Timeout值,AP在它所有激活的站中应当强制执行此值 |
| | 映像数据消息要素出现在AC发送的Image Data Request消息中 |
| | 映像标识符消息要素由AC发送给AP,指出预期将在AP上运行的激活软件版本 |
| | 映像信息消息要素出现在由AC发送给AP的Image Data Response 消息中 |
| | 启动下载消息要素由AP用于通知AC,AC应当发起固件更新 |
| | 位置数据消息要素是字节长度可变UTF-8编码串,包含用户定义的位置信息 |
| | 最大消息长度消息要素由AP包括在Join Request消息中,用于告诉AC该AP支持的最大CAPWAP消息长度 |
CAPWAP Local IPv4 Address | | CAPWAP本地IPv4地址消息要素由AP在Join Request中发送,或者由AC在Join Response中发送 |
Radio Administrative State | | 无线电设备管理状态消息要素用于传递特定无线电设备的状态 |
| | 无线电设备运行状态消息要素由AP发送给AC,传递无线电设备的运行状态 |
| | 结果代码消息要素是32位整数值,包括Request消息结果,该 Request消息对应Response消息中含有的序列号 |
| | 返回的消息要素由AP在Change State Event Request消息中发送,用于通知AC它不能在本地使用Configuration Status Response中的哪些消息要素 |
| | 会话ID消息要素值包含随机产生的无符号128位整数 |
| | 统计量计时器消息要素值由AC用于告诉AP,AP将以此频次收到的它盼望的最新统计数据 |
| | 特定供应商净荷消息要素用于在AP和AC间传递特定供应商信息 |
| | AP主板数据消息要素由AP发送给AC,包括目前硬件信息 |
| | AP描述符消息要素由AP用于传递它目前的硬件和软件(固件)配置 |
| | AP回退消息要素由AC发送给AP,用于AP检测到它的首选AC时,开启或关闭自动CAPWAP回退 |
| | AP帧隧道模式消息要素使AP能够告诉AC,它支持的隧道化运行模式 |
| | AP MAC类型消息要素使AP能够将它的运行模式告诉AC |
| | |
| | AP无线电设备统计量消息要素由AP发送给AC,传递关于无线电设备行为的统计数据,以及重新设置AP无线电设备的原因 |
| | AP重启统计量消息要素由AP发送给AC,传递AP发生重新启动的原因 |
WTP Static IP Address Information | | AP静态IP地址信息消息要素由AC用于在AP上配置或删除先前配置的静态IP地址 |
CAPWAP Local IPv6 Address | | CAPWAP本地IPv6地址消息要素由AP在Join Request中发送,或者由AC在Join Response中发送 |
CAPWAP Transport Protocol | | CAPWAP传输协议消息要素如果CAPWAP在IPv6上运行,可以使用UDP-Lite或UDP传输 |
| | MTU发现填充消息要素用作填充,执行MTU发现,必须包含值为0xFF,长度任意的八位位组 |
| | ECN支持消息要素由AP和AC发送,指出它们支持Explicit Congestion Notification (ECN)位 |
| | 由AC发往AP,由AC用来在AP上定义一个新的WLAN |
| | 由AP向AC通信来提供天线可用信息,同时AC可以使用该消息元素来重新配置AP的天线 |
IEEE 802.11 Assigned WTP BSSID | | 是AP在IEEE 802.11 WLAN Configuration Request报文中含有IEEE 802.11 Add WLAN消息元素时进行包含 |
| | |
IEEE 802.11 Direct Sequence Control | | 是一个双向的消息元素,当由AP发送时,包含现在的状态;由AC发送时,AP必须保证AC所提供的值 |
IEEE 802.11 Information Element | | 用于传送任何802.11协议中定义的IE。数据字段中里面包含将会存在于IEEE 802.11 MAC管理消息中的原始IE |
IEEE 802.11 MAC Operation | | 由AC发送来设置AP上IEEE 802.11MAC的参数 |
IEEE 802.11 MIC Countermeasures | | |
IEEE 802.11 Multi-Domain Capability | | 被AC用来告诉AP调整的极限,AC会在每一个频段里发送一个消息元素来表明在该域里面进行调整的范围约束 |
| | 是一个双向的消息元素,当由AP发送时,包含当前的状态。当由AC发送时,AP必须支持所接受到的值 |
| | |
IEEE 802.11 RSNA Error Report From Station | | 被AP用来向AC发送RSN错误报告,如果没有错误,AP不需要任何报告 |
| | 伴随着Add Station消息元素,用来从AC向AP发送IEEE 802.11 STA策略,最新的IEEE 802.11消息元素会覆盖之前接受到的任何消息元素 |
IEEE 802.11 Station QoS Profile | | 含STA可能用到的最大的IEEE 802.11e优先级标识符 |
IEEE 802.11 Station Session Key | | |
| | |
IEEE 802.11 Supported Rates | | |
| | 当由AP发送时,是Radio的当前功率;当由AC发送时,包含AP必须要支持的功率 |
IEEE 802.11 Tx Power Level | | |
IEEE 802.11 Update Station QoS | | |
| | |
IEEE 802.11 WTP Quality of Service | | |
IEEE 802.11 WTP Radio Configuration | | 由AC用来在AP上配置一个Radio;或者AP用来发送其Radio配置信息给AC |
IEEE 802.11 WTP Radio Fail Alarm Indication | | |
IEEE 802.11 WTP Radio Information | | |