searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

CAPWAP协议及源码分析

2023-05-24 01:55:58
376
0

一、CAPWAP协议背景介绍

    在802.11 WLAN解决方案中,瘦AP模式下AP是无法单独工作的,AP需要和AC通信,要和AC配合使用,因此,需要有一套AP+AC之间的互联通信协议,保证他们可以相互之间的互联。为此,Cisco最早制定了首个AP-AC之间的隧道通信协议—轻型接入点协议LWAPP。接着,IEFE(互联网工程任务组)为了解决各厂商AP-AC间隧道协议的不兼容问题,在2005年成立了无线接入点与配置协议(CAPWAP),也就是我们下面会详细解析的协议内容。

图1 CAPWAP参考协议集合

二、CAPWAP协议解析

1、整个协议分为如下几大块内容:

  • AP对AC的自动发现及AP&AC的状态机运行、维护。
  • AC对AP进行管理,业务配置下发。
  • STA数据封装CAPWAP隧道进行转发。

2、其隧道建立流程如下图所示:

图2 CAPWAP协议交互整体流程

    1)DHCP/Discovery阶段

    在初始建立连接过程中,根据AP发送的报文类型,分为DHCP或Discovery两种AC/AP发现机制类型:

  •     DHCP广播

    AP发送discover广播报文,请求DHCP server响应,DHCP server 侦听到discover报文后,会响应一个offer报文,该报文会携带TCP/IP的信息以及租约期限的信息。

    AP收到DHCP server的offer报文后,多个offer报文使用最先到达的,然后会向网络中发送DHCP request广播报文,告诉所有的offer,并重新发送DHCP,DHCP server将制定从哪一台服务提供的IP地址。同时AP还会发送一个免费ARP去验证地址有没有被使用过。

    DHCP server收到request报文后,会向AP回复DHCP ACK报文,该报文包含了AP的IP地址,租约,网管,DNS等。

  • Discovery单播

    如果AP以单播方式发送“发送请求”报文试图关联AP,AC收到请求后,会发送一个单播discover response给AP,AP通过discover response中所带的AC优先级等信息,确定与哪个AC进行建立会话。

    2)DTLS加密握手(非必须)

    与AC建立连接后,AP根据此IP地址与AC 协商,AP接收到响应消息后开始与AC建立CAPWAP隧道,这个阶段可以选择CAPWAP隧道是否采用DTLS加密传输UDP报文。

    3)Join阶段

    完成DTLS握手后,开始建立控制隧道,在建立控制的交互过程中,AC回应的join response报文中会协议用户配置的升级版本号,握手报文间隔/超时时间,控制报文优先级等信息。AC会检查版本,如果版本不匹配,会自动升级,如果匹配,会进入configuration状态。

 

    4) Image Data阶段

    AP根据协商参数判断当前版本是否是最新版本,如果不是最新版本则AP将在CAPWAP隧道上开始更新软件。AP更新后会强制重启,重启后重新进入DHCP/Discovery流程。

    5) Configure阶段

    进入Configure状态后是为了做AP的现有配置和AC设定配置的匹配检查,AP发送configuration request到 AC,该信息中包含了现有AP的配置,当AP的当前配置与AC要求不符合时,AC会通过configuration response通知AP。

    6) Data Check阶段

    AP发送change state event reques报文,其中包含了radio,result,code等信息。当AC收到后开始回应。Data check完成后,隧道建立已经完成,进入run状态。

    7) Run阶段

  • Keepalive报文

AP发送keepalive报文到AC,AC收到keepalive后表示数据隧道建立,AC回应keepalive报文,AP进入normal开始正常工作。

  • echo心跳报文

AP进入Run状态后,同时发送echo request 报文给AC,宣布建立好CAPWAP管理隧道并启动echo发送定时器和隧道检测超时定时器以检测管理隧道时的异常。当AC收到echo request报文后,同样进入Run状态,并回应echo response报文给AP,启动隧道超时定时器;到AP收到echo response报文后,会重设检验隧道超时的定时器。

三、CAPWAP报文格式

    CAPWAP使用UDP端口的应用层协议报文格式,可承载两类数据消息,分别为数据消息和控制消息。其数据报文端口为UDP端口5247,控制报文端口为UDP端口5246。

    控制消息报文中除discover request及discover response是明文传输外,其他强制使用DTLS保护;数据消息报文可选择是否使用 DTLS,具体两种报文格式如图所示。

四、CAPWAP部分代码片段分析

    OPEN CAPWAP代码库中,AP部分核心部分代码如下,DHCP交互前置流程在脚本中已实现,此处不再详细描述。

1、Discovery阶段WTPDiscoveryState.c

    CWStateTransition CWWTPEnterDiscovery() 函数管理Discovery全流程状态,其中gCWACList结构体重置AP中已存放的AC列表,第二个for循环遍历向AC发送Request报文;

    如果未发现AC,则状态机重置为Discovery阶段,否则状态机切换至Join阶段,进入下一流程。

2、Join阶段WTPJoinState.c

    CWWTPEnterJoin.c函数负责Join阶段的核心流程,并且通过判断DTLS会话选择数据面是否封装加密报文格式。

3、Configure阶段WTPConfigureState.c

    此流程各向函数较为简单,其核心CWBool CWAssembleConfigureRequest函数负责封装AP的各项配置参数至报文中,通过隧道发送给AC进行交互。

4、run阶段WTPRunState.c

    此阶段的核心目标为心跳报文的发送接收、超时定时器及状态机切换操作,通过CWBool CWStartHeartbeatTimer()函数,控制定时器回调函数CWWTPKeepAliveDataTimerExpiredHandler完成各项状态机切换,实现AP与AC之间的不间断通信。

 

0条评论
作者已关闭评论
liuxd7
3文章数
0粉丝数
liuxd7
3 文章 | 0 粉丝
liuxd7
3文章数
0粉丝数
liuxd7
3 文章 | 0 粉丝
原创

CAPWAP协议及源码分析

2023-05-24 01:55:58
376
0

一、CAPWAP协议背景介绍

    在802.11 WLAN解决方案中,瘦AP模式下AP是无法单独工作的,AP需要和AC通信,要和AC配合使用,因此,需要有一套AP+AC之间的互联通信协议,保证他们可以相互之间的互联。为此,Cisco最早制定了首个AP-AC之间的隧道通信协议—轻型接入点协议LWAPP。接着,IEFE(互联网工程任务组)为了解决各厂商AP-AC间隧道协议的不兼容问题,在2005年成立了无线接入点与配置协议(CAPWAP),也就是我们下面会详细解析的协议内容。

图1 CAPWAP参考协议集合

二、CAPWAP协议解析

1、整个协议分为如下几大块内容:

  • AP对AC的自动发现及AP&AC的状态机运行、维护。
  • AC对AP进行管理,业务配置下发。
  • STA数据封装CAPWAP隧道进行转发。

2、其隧道建立流程如下图所示:

图2 CAPWAP协议交互整体流程

    1)DHCP/Discovery阶段

    在初始建立连接过程中,根据AP发送的报文类型,分为DHCP或Discovery两种AC/AP发现机制类型:

  •     DHCP广播

    AP发送discover广播报文,请求DHCP server响应,DHCP server 侦听到discover报文后,会响应一个offer报文,该报文会携带TCP/IP的信息以及租约期限的信息。

    AP收到DHCP server的offer报文后,多个offer报文使用最先到达的,然后会向网络中发送DHCP request广播报文,告诉所有的offer,并重新发送DHCP,DHCP server将制定从哪一台服务提供的IP地址。同时AP还会发送一个免费ARP去验证地址有没有被使用过。

    DHCP server收到request报文后,会向AP回复DHCP ACK报文,该报文包含了AP的IP地址,租约,网管,DNS等。

  • Discovery单播

    如果AP以单播方式发送“发送请求”报文试图关联AP,AC收到请求后,会发送一个单播discover response给AP,AP通过discover response中所带的AC优先级等信息,确定与哪个AC进行建立会话。

    2)DTLS加密握手(非必须)

    与AC建立连接后,AP根据此IP地址与AC 协商,AP接收到响应消息后开始与AC建立CAPWAP隧道,这个阶段可以选择CAPWAP隧道是否采用DTLS加密传输UDP报文。

    3)Join阶段

    完成DTLS握手后,开始建立控制隧道,在建立控制的交互过程中,AC回应的join response报文中会协议用户配置的升级版本号,握手报文间隔/超时时间,控制报文优先级等信息。AC会检查版本,如果版本不匹配,会自动升级,如果匹配,会进入configuration状态。

 

    4) Image Data阶段

    AP根据协商参数判断当前版本是否是最新版本,如果不是最新版本则AP将在CAPWAP隧道上开始更新软件。AP更新后会强制重启,重启后重新进入DHCP/Discovery流程。

    5) Configure阶段

    进入Configure状态后是为了做AP的现有配置和AC设定配置的匹配检查,AP发送configuration request到 AC,该信息中包含了现有AP的配置,当AP的当前配置与AC要求不符合时,AC会通过configuration response通知AP。

    6) Data Check阶段

    AP发送change state event reques报文,其中包含了radio,result,code等信息。当AC收到后开始回应。Data check完成后,隧道建立已经完成,进入run状态。

    7) Run阶段

  • Keepalive报文

AP发送keepalive报文到AC,AC收到keepalive后表示数据隧道建立,AC回应keepalive报文,AP进入normal开始正常工作。

  • echo心跳报文

AP进入Run状态后,同时发送echo request 报文给AC,宣布建立好CAPWAP管理隧道并启动echo发送定时器和隧道检测超时定时器以检测管理隧道时的异常。当AC收到echo request报文后,同样进入Run状态,并回应echo response报文给AP,启动隧道超时定时器;到AP收到echo response报文后,会重设检验隧道超时的定时器。

三、CAPWAP报文格式

    CAPWAP使用UDP端口的应用层协议报文格式,可承载两类数据消息,分别为数据消息和控制消息。其数据报文端口为UDP端口5247,控制报文端口为UDP端口5246。

    控制消息报文中除discover request及discover response是明文传输外,其他强制使用DTLS保护;数据消息报文可选择是否使用 DTLS,具体两种报文格式如图所示。

四、CAPWAP部分代码片段分析

    OPEN CAPWAP代码库中,AP部分核心部分代码如下,DHCP交互前置流程在脚本中已实现,此处不再详细描述。

1、Discovery阶段WTPDiscoveryState.c

    CWStateTransition CWWTPEnterDiscovery() 函数管理Discovery全流程状态,其中gCWACList结构体重置AP中已存放的AC列表,第二个for循环遍历向AC发送Request报文;

    如果未发现AC,则状态机重置为Discovery阶段,否则状态机切换至Join阶段,进入下一流程。

2、Join阶段WTPJoinState.c

    CWWTPEnterJoin.c函数负责Join阶段的核心流程,并且通过判断DTLS会话选择数据面是否封装加密报文格式。

3、Configure阶段WTPConfigureState.c

    此流程各向函数较为简单,其核心CWBool CWAssembleConfigureRequest函数负责封装AP的各项配置参数至报文中,通过隧道发送给AC进行交互。

4、run阶段WTPRunState.c

    此阶段的核心目标为心跳报文的发送接收、超时定时器及状态机切换操作,通过CWBool CWStartHeartbeatTimer()函数,控制定时器回调函数CWWTPKeepAliveDataTimerExpiredHandler完成各项状态机切换,实现AP与AC之间的不间断通信。

 

文章来自个人专栏
WLAN
1 文章 | 1 订阅
0条评论
作者已关闭评论
作者已关闭评论
0
0