技术盛宴|无线CAPWAP隧道技术——理论篇

资讯文章 264


本文作者:田小杨 

锐捷网络技术服务部互联网服务中心


前言


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信息


往期精彩回顾