本文作者:田小杨
锐捷网络技术服务部互联网服务中心
前言
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隧道无法建立的可能原因和解决思路。希望本文能够帮助各位读者把CAPWAP协议技术学透彻、用熟练。
CAPWAP协议简介
在瘦AP场景下,AP不能单独工作,需要与AC配合使用,因此AP和AC之间需要一个通信协议可以让它们进行互联。CAPWAP协议用于AC对其所关联的AP的集中管理和控制,为AP和AC之间的互通性提供了一个通用封装和传输机制。
CAPWAP协议主要具备以下几个功能:
AP对AC的自动发现;
AP和AC的状态机运行和维护;
AC对AP进行管理、业务配置下发;
STA数据封装CAPWAP隧道进行转发。
CAPWAP协议报文介绍
CAPWAP协议有两种类型的报文:CAPWAP控制报文和数据报文。控制报文主要携带的是信息要素,用于AC对于AP工作参数的配置和CAPWAP隧道的维护;数据报文主要携带终端发送的数据报文,用于传输终端的上层数据。控制报文和数据报文分别传输在不同的UDP端口,控制报文使用端口5246,数据报文使用端口5247。
CAPWAP控制报文
不受DTLS保护的CAPWAP控制报文由CAPWAP前导、CAPWAP首部、控制首部、信息要素组成;受DTLS保护的CAPWAP控制报文由CAPWAP前导、DTLS首部、CAPWAP首部、控制首部、信息要素、DTLS尾部组成。是否受DTLS保护是CAPWAP的可选项, DTLS用于对CAPWAP报文进行加密和验证,提高CAPWAP报文的安全性。锐捷无线设备CAPWAP控制报文DTLS保护默认开启,可在ac-controller模式下通过命令no capwap dtls enable关闭用于故障排查(锐捷设备命令行)。
不受DTLS保护的CAPWAP控制报文格式
受DTLS保护的CAPWAP控制报文格式
CAPWAP前导中只包含Version和Type两个字段,Version始终为0,Type有两个可选参数0(CAPWAP Header)和1(CAPWAP DTLS Header)。CAPWAP前导的作用是通告其后面跟着的载荷类型是CAPWAP首部还是DTLS首部,即通告该CAPWAP报文是否加密。
CAPWAP控制报文中的CAPWAP前导
CAPWAP首部,Header Length指出CAPWAP首部大小;Radio ID用于指出此消息与哪个物理无线电设备关联;Wireless Binding ID用于指出与此无线电设备关联的无线分组的类型;Header Flags标志位目前有六位在用,每一位代表不同含义具体可参考《RFC 5415》;Fragment ID和Fragment Offset用于CAPWAP报文分片时使用。
CAPWAP控制报文中的CAPWAP首部
控制首部,Message Type用于表示CAPWAP控制报文的类型,目前有26种类型控制报文,每种类型控制报文的作用不同且携带的信息元素也不同,具体请查看本文最后的附录1《CAPWAP协议控制报文类型汇总解析》;Sequence Number序列号,用于匹配Request报文和Response报文,Response报文中序列号与其要回复的Request报文中的序列号相同;Message Element Length指出其后携带的信息要素的大小;Flags始终为0。
CAPWAP控制报文中的控制首部
信息要素载荷是由多个独立的信息要素组成,其中包含的信息要素的类型和数量与CAPWAP控制报文类型有关,每个信息要素由Type、Length、Value及其他字段组成。其中Type指出信息要素的类型,其中1-1023是CAPWAP协议信息要素,1024-2047是IEEE 802.11信息要素,具体请查看本文最后的附录2《CAPWAP协议控制报文消息要素类型汇总解析》。
CAPWAP控制报文中的信息要素
CAPWAP数据报文
不受DTLS保护的CAPWAP数据报文由CAPWAP前导、CAPWAP首部、数据报文组成;受DTLS保护的CAPWAP数据报文由CAPWAP前导、DTLS首部、CAPWAP首部、数据报文、DTLS尾部组成。是否受DTLS保护是CAPWAP的可选项, DTLS用于对CAPWAP报文进行加密和验证,提高CAPWAP报文的安全性。锐捷无线设备CAPWAP数据报文DTLS保护默认关闭,可通过命令开启。
不受DTLS保护的CAPWAP数据报文格式
受DTLS保护的CAPWAP数据报文格式
CAPWAP前导和CAPWAP首部在CAPWAP控制报文中和数据报文中格式封装相同此处不在赘述。
CAPWAP数据报文格式
CAPWAP协议状态机介绍
CAPWAP协议状态机由AC和AP使用,运行CAPWAP协议的AC和AP一共存在以下15种状态机,其中AC或AP在每一种状态下仅允许发送和接收特定的信息报文。
CAPWAP状态机 |
状态含义 |
Start状态 |
AP开始和AC会话的初始状态 |
Idle状态 |
AP初始化完成后的状态 |
Discovery状态 |
AP进入发现AC的状态,如果AP指定AC,这个状态可以跳过 |
DTLS Setup状态 |
DTLS会话建立 |
Authorize状态 |
DTLS会话证书认证 |
DTLS Connect状态 |
认证通过后进行连接状态 |
Join状态 |
会话连接建立完成 |
Image Date状态 |
AP从AC下载一个可执行的版本文件,AP可以进行版本升级,升级完会重启,DTLS会话因此断开 |
Configure状态 |
AP从AC获取配置 |
Data Check状态 |
AP和AC进行消息交换,确认配置 |
Run状态 |
进入正常的运行状态 |
Reset状态 |
重启设备 |
Sulking状态 |
AP不能和AC进行通信切换到该状态,可以进入Discovery状态重新发现AC |
DTLS Teardown状态 |
关闭DTLS会话 |
Dead状态 |
完全清除状态 |
CAPWAP协议AC和AP的状态机
由于CAPWAP协议使用DTLS,CAPWAP状态机的某些指令会触发DTLS状态机中的状态转换,而DTLS状态机中的某些通知会触发CAPWAP状态机中的状态转换。所以如下图所示CAPWAP状态转换情况较多,本文下一小节为各位读者介绍CAPWAP隧道成功建立过程中AC和AP的CAPWAP状态机的变化情况,想了解更多状态机转换条件介绍的读者可以阅读《RFC 5415》。
CAPWAP完整状态机转换图
CAPWAP隧道建立过程介绍
本小节结合报文交互和状态机变化介绍CAPWAP隧道建立过程,读者在阅读时可结合上两小节CAPWAP协议报文介绍和CAPWAP协议状态机介绍共同理解。
CAPWAP隧道建立过程中报文交互和状态机变化
AP启动后状态机处于Idle状态,AP通过多种途径(IPv4单播、IPv4广播、IPv4组播、IPv6组播)明文发送Discovery Request报文,用于发现网络中可用的AC,并提供自己的基本信息给AC。AC收到Discovery Request报文后,使用Discovery Response报文回应,将自己支持的服务告诉给请求AP。因为此时DTLS隧道还未建立,所以Discovery Request报文和Discovery Response报文是使用明文交互的。
随后AP和AC进行DTLS验证建立DTLS加密隧道,隧道建立成功后,之后交互的CAPWAP控制报文全部通过DTLS隧道加密保护,是否受DTLS保护是可选的。
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隧道建立成功。
不受DTLS保护的CAPWAP隧道建立过程报文交互
总结
相信读完以上内容,大家对CAPWAP协议的基础理论知识和CAPWAP隧道建立的过程,有了一定的了解。后续的实践篇,作者将从运维的角度,分析在日常工作中最常遇到的CAPWAP隧道无法建立问题的解决思路,敬请期待。
附录1:CAPWAP协议控制报文类型汇总解析
CAPWAP控制报文类型 |
Message Type |
作用 |
Discovery Request |
1 |
AP发送,用于发现网络中可用的AC,并提供自己的基本信息给AC |
Discovery Response |
2 |
AC发送,将自己支持的服务告诉给前来请求的AP |
Join Request |
3 |
AP发送,用于申请加入AC |
Join Response |
4 |
AC发送,用于对AP加入申请的响应 |
Configuration Status Request |
5 |
AP发送,用于向AC请求配置文件下发 |
Configuration Status Response |
6 |
AC发送,用于将自己的配置数据同步给AP |
Configuration Update Request |
7 |
AC发送,用于同步AP配置更新 |
Configuration Update Response |
8 |
AP发送,用于告诉AC更新配置文件的执行情况 |
WTP Event Request |
9 |
AP用来发送信息给AC,WTP Event Request可能是阶段性发送或者是作为一个AP同步事件的响应 |
WTP Event Response |
10 |
响应WTP Event Request |
Change State Event Request |
11 |
当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 |
12 |
AC发送,响应Change State Event Request |
Echo Request |
13 |
AP和AC之间发送,在控制报文没有发送的时候,用于CAPWAP隧道的维系 |
Echo Response |
14 |
AP和AC之间响应,在控制报文没有发送的时候,用于CAPWAP隧道的维系 |
Image Data Request |
15 |
AP发送,用于镜像文件的申请 |
Image Data Response |
16 |
AC发送,用于对AP镜像文件申请的响应 |
Reset Request |
17 |
AP重启请求 |
Reset Response |
18 |
AC对AP重启请求的响应 |
Primary Discovery Request |
19 |
AP发送,判断他首选(或配置的)AC是否可用或者执行一个Path MTU Discovery |
Primary Discovery Response |
20 |
AC发送,告诉AP自己当前可用与支持的服务 |
Data Transfer Request |
21 |
AP将自己的调试信息发送给AC |
Data Transfer Response |
22 |
AC对Data Transfer Request消息的响应 |
Clear Configuration Request |
23 |
AC发送,用于告诉AP将自己的配置恢复至出厂默认值 |
Clear Configuration Response |
24 |
AP发送,恢复出厂默认配置之后,发送给AC确认 |
Station Configuration Request |
25 |
AC用于创建、修改、删除AP上的Station会话状态 |
Station Configuration Response |
26 |
响应Station Configuration Request |
附录2:CAPWAP协议控制报文消息要素类型汇总解析
CAPWAP控制报文信息要素类型 |
Type |
作用 |
AC Descriptor |
1 |
AC描述符消息要素由AC用于通知它目前的状态 |
AC IPv4 List |
2 |
AC IPv4列表消息要素用于为AP配置可供AP加入的最新AC列表 |
AC IPv6 List |
3 |
AC IPv6列表消息要素用于为AP配置可供AP加入的最新AC列表 |
AC Name |
4 |
AC名称消息要素包含以UTF-8格式表示的AC身份 |
AC Name with Priority |
5 |
带优先权的AC名称消息要素的AC Name由AC发送给AP,以便配置优先的AC |
AC Timestamp |
6 |
AC时间戳消息要素由AC发送,用于同步AP时钟 |
Add MAC Access Control List (ACL) Entry |
7 |
添加MAC ACL条目消息要素由AC用于在AP上添加MAC ACL列表条目,确保AP不再为该消息中给出的MAC地址提供服务 |
Add Station |
8 |
添加终端消息要素由AC用于通知AP它应当转发终端的流量 |
CAPWAP Control IPv4 Address |
10 |
CAPWAP控制IPv4地址消息要素由AC在Discovery处理期间发送给AP,以及由AC用于提供该AC上的可用接口和提供目前连接的AP数量 |
CAPWAP Control IPv6 Address |
11 |
CAPWAP控制IPv6地址消息要素由AC在Discovery处理期间发送给AP,以及由AC用于提供该AC上的可用接口和提供目前连接的AP数量 |
CAPWAP Timers |
12 |
CAPWAP计时器消息要素由AC用于配置AP上的CAPWAP计时器 |
Data Transfer Data |
13 |
数据传输数据消息要素由AP用于提供信息给AC用于调试 |
Data Transfer Mode |
14 |
数据传输模式消息要素由AP用于指出它正在发送到AC用于调试的数据传输信息类型 |
Decryption Error Report |
15 |
解密错误报告消息要素的值由AP用于通知解密出错的AC,这些错误是自上次报告以来发生的 |
Decryption Error Report Period |
16 |
解密错误报告周期消息要素值由AC用于通知AP,它应当多长时间发送一次解密错误报告消息 |
Delete MAC ACL Entry |
17 |
删除MAC ACL条目消息要素由AC用于在AP上删除MAC ACL条目,确保AP向在该消息中给出的MAC地址提供服务 |
Delete Station |
18 |
删除终端消息要素由AC用于通知AP,它不应当再对特定终端提供服务。 |
Discovery Type |
20 |
发现类型消息要素由AP用于简要说明,它是如何最终知道存在一个AC,它正在向该AC发送Discovery Request消息 |
Duplicate IPv4 Address |
21 |
重复的IPv4地址消息要素由AP用于通知AC,该AP已经检测到另一台设备,该设备使用的IP地址与此AP目前正在使用的相同 |
Duplicate IPv6 Address |
22 |
重复的IPv6地址消息要素由AP用于通知AC,该AP已经检测到另一台设备,该设备使用的IP地址与此AP目前正在使用的相同 |
Idle Timeout |
23 |
空闲超时消息要素由AC发送给AP,向其提供Idle Timeout值,AP在它所有激活的站中应当强制执行此值 |
Image Data |
24 |
映像数据消息要素出现在AC发送的Image Data Request消息中 |
Image Identifier |
25 |
映像标识符消息要素由AC发送给AP,指出预期将在AP上运行的激活软件版本 |
Image Information |
26 |
映像信息消息要素出现在由AC发送给AP的Image Data Response 消息中 |
Initiate Download |
27 |
启动下载消息要素由AP用于通知AC,AC应当发起固件更新 |
Location Data |
28 |
位置数据消息要素是字节长度可变UTF-8编码串,包含用户定义的位置信息 |
Maximum Message Length |
29 |
最大消息长度消息要素由AP包括在Join Request消息中,用于告诉AC该AP支持的最大CAPWAP消息长度 |
CAPWAP Local IPv4 Address |
30 |
CAPWAP本地IPv4地址消息要素由AP在Join Request中发送,或者由AC在Join Response中发送 |
Radio Administrative State |
31 |
无线电设备管理状态消息要素用于传递特定无线电设备的状态 |
Radio Operational State |
32 |
无线电设备运行状态消息要素由AP发送给AC,传递无线电设备的运行状态 |
Result Code |
33 |
结果代码消息要素是32位整数值,包括Request消息结果,该 Request消息对应Response消息中含有的序列号 |
Returned Message Element |
34 |
返回的消息要素由AP在Change State Event Request消息中发送,用于通知AC它不能在本地使用Configuration Status Response中的哪些消息要素 |
Session ID |
35 |
会话ID消息要素值包含随机产生的无符号128位整数 |
Statistics Timer |
36 |
统计量计时器消息要素值由AC用于告诉AP,AP将以此频次收到的它盼望的最新统计数据 |
Vendor Specific Payload |
37 |
特定供应商净荷消息要素用于在AP和AC间传递特定供应商信息 |
WTP Board Data |
38 |
AP主板数据消息要素由AP发送给AC,包括目前硬件信息 |
WTP Descriptor |
39 |
AP描述符消息要素由AP用于传递它目前的硬件和软件(固件)配置 |
WTP Fallback |
40 |
AP回退消息要素由AC发送给AP,用于AP检测到它的首选AC时,开启或关闭自动CAPWAP回退 |
WTP Frame Tunnel Mode |
41 |
AP帧隧道模式消息要素使AP能够告诉AC,它支持的隧道化运行模式 |
WTP MAC Type |
44 |
AP MAC类型消息要素使AP能够将它的运行模式告诉AC |
WTP Name |
45 |
AP名称消息要素是可变长度UTF-8编码字节串 |
WTP Radio Statistics |
47 |
AP无线电设备统计量消息要素由AP发送给AC,传递关于无线电设备行为的统计数据,以及重新设置AP无线电设备的原因 |
WTP Reboot Statistics |
48 |
AP重启统计量消息要素由AP发送给AC,传递AP发生重新启动的原因 |
WTP Static IP Address Information |
49 |
AP静态IP地址信息消息要素由AC用于在AP上配置或删除先前配置的静态IP地址 |
CAPWAP Local IPv6 Address |
50 |
CAPWAP本地IPv6地址消息要素由AP在Join Request中发送,或者由AC在Join Response中发送 |
CAPWAP Transport Protocol |
51 |
CAPWAP传输协议消息要素如果CAPWAP在IPv6上运行,可以使用UDP-Lite或UDP传输 |
MTU Discovery Padding |
52 |
MTU发现填充消息要素用作填充,执行MTU发现,必须包含值为0xFF,长度任意的八位位组 |
ECN Support |
53 |
ECN支持消息要素由AP和AC发送,指出它们支持Explicit Congestion Notification (ECN)位 |
IEEE 802.11 Add WLAN |
1024 |
由AC发往AP,由AC用来在AP上定义一个新的WLAN |
IEEE 802.11 Antenna |
1025 |
由AP向AC通信来提供天线可用信息,同时AC可以使用该消息元素来重新配置AP的天线 |
IEEE 802.11 Assigned WTP BSSID |
1026 |
是AP在IEEE 802.11 WLAN Configuration Request报文中含有IEEE 802.11 Add WLAN消息元素时进行包含 |
IEEE 802.11 Delete WLAN |
1027 |
用来告知AP以前建立的一个WLAN被删除 |
IEEE 802.11 Direct Sequence Control |
1028 |
是一个双向的消息元素,当由AP发送时,包含现在的状态;由AC发送时,AP必须保证AC所提供的值 |
IEEE 802.11 Information Element |
1029 |
用于传送任何802.11协议中定义的IE。数据字段中里面包含将会存在于IEEE 802.11 MAC管理消息中的原始IE |
IEEE 802.11 MAC Operation |
1030 |
由AC发送来设置AP上IEEE 802.11MAC的参数 |
IEEE 802.11 MIC Countermeasures |
1031 |
由AP发送给AC表明一个MIC失败发生 |
IEEE 802.11 Multi-Domain Capability |
1032 |
被AC用来告诉AP调整的极限,AC会在每一个频段里发送一个消息元素来表明在该域里面进行调整的范围约束 |
IEEE 802.11 OFDM Control |
1033 |
是一个双向的消息元素,当由AP发送时,包含当前的状态。当由AC发送时,AP必须支持所接受到的值 |
IEEE 802.11 Rate Set |
1034 |
由AC发送,包含了所支持的速率 |
IEEE 802.11 RSNA Error Report From Station |
1035 |
被AP用来向AC发送RSN错误报告,如果没有错误,AP不需要任何报告 |
IEEE 802.11 Station |
1036 |
伴随着Add Station消息元素,用来从AC向AP发送IEEE 802.11 STA策略,最新的IEEE 802.11消息元素会覆盖之前接受到的任何消息元素 |
IEEE 802.11 Station QoS Profile |
1037 |
含STA可能用到的最大的IEEE 802.11e优先级标识符 |
IEEE 802.11 Station Session Key |
1038 |
用于AC决定STA加密必须在AP上执行 |
IEEE 802.11 Statistics |
1039 |
由AP发送,用来传输自己当前的统计信息 |
IEEE 802.11 Supported Rates |
1040 |
由AP发送,来表示他支持的速率 |
IEEE 802.11 Tx Power |
1041 |
当由AP发送时,是Radio的当前功率;当由AC发送时,包含AP必须要支持的功率 |
IEEE 802.11 Tx Power Level |
1042 |
由AP发送,包含所有支持的不同的功率 |
IEEE 802.11 Update Station QoS |
1043 |
用来在AP上改变一个指定STA的服务质量策略 |
IEEE 802.11 Update WLAN |
1044 |
由AC来使用在AP上来定义一个无线局域网 |
IEEE 802.11 WTP Quality of Service |
1045 |
由AC发向AP,用于通信QOS的配置信息 |
IEEE 802.11 WTP Radio Configuration |
1046 |
由AC用来在AP上配置一个Radio;或者AP用来发送其Radio配置信息给AC |
IEEE 802.11 WTP Radio Fail Alarm Indication |
1047 |
是由AP在检测到一个Radio错误发送给AC |
IEEE 802.11 WTP Radio Information |
1048 |
用来为AP里的每个Radio传递Radio信息 |
往期精彩回顾
【第四十九期】技术盛宴 | 聊聊新基建之数据中心的网络运维技术
【第四十八期】技术盛宴 | 站点间IPSec VPN网络技术深度解析
【第四十七期】技术盛宴 | 从实战浅析运营商云资源池—解析流量模型
【第四十六期】技术盛宴 | 从实战浅析运营商云资源池网络—技术的抉择
【第四十五期】技术盛宴丨锐捷云桌面EST协议之RUTP传输技术
【第四十四期】技术盛宴丨VPN技术浅谈之如何部署远程办公网络
【第四十三期】技术盛宴 | 新一代IP承载核心技术SRv6的转发原理
【第四十二期】技术盛宴 | 聚焦标准化生产场景的云桌面探索实践