zoukankan      html  css  js  c++  java
  • capwap学习笔记——初识capwap(二)

    2.5.1 AC发现机制

    WTP使用AC发现机制来得知哪些AC是可用的,决定最佳的AC来建立CAPWAP连接。

    WTP的发现过程是可选的。如果在WTP上静态配置了AC,那么WTP并不需要完成AC的发现过程。

    WTP首先发送一个 Discovery Request message给受限的广播地址,或者CAPWAP的多播地址(224.0.1.140),或者是预配置的AC的单播地址。在IPV6网络中,由于广播并不存在,因此使用"All ACs multicast address" (FF0X:0:0:0:0: 0:0:18C)来代替。

    当接收到Discovery Request message消息,AC发送一个单播Discovery Response message给WTP。

    WTP可以通过Discovery Response message中所带的AC优先级,支持的CAPWAP binding来选择与哪个AC建立会话。

    除了上面的发现机制,WTP还可以使用DNS或者DHCP来发现AC。

    2.5.2 DTLS握手

    WTP首先发送一个ClientHello消息来发起握手,说明它支持的密码算法列表、压缩方法及最高协议版本和其他一些需要的消息。

    AC回复一个HelloVerifyReuqest 消息,client必须重传添加了cookie的ClientHello。server然后验证cookie,如果有效的话才开始进行握手。

    AC回应一个ServerHello消息,包含服务器选择的连接参数,源自客户端初期所提供的ClientHello,确定了这次通信所需要的算法,然后发过去自己的证书(里面包含了身份和自己的公钥)。

    Client在收到这个消息后会生成一个秘密消息,用SSL服务器的公钥加密后传过去,SSL服务器端用自己的私钥解密后,会话密钥协商成功,双方可以用同一份会话密钥来通信了。

    2.5.3 DTLS认证和授权

        DTLS支持终端认证方式为:证书(certificate)和预共享密钥(pre-shared key)。

        CAPWAP认证中使用证书支持的算法是

    ¢   TLS_RSA_WITH_AES_128_CBC_SHA [RFC5246](MUST SUPPORT)

    ¢   TLS_DHE_RSA_WITH_AES_128_CBC_SHA [RFC5246](SHOULD SUPPORT)

    ¢   TLS_RSA_WITH_AES_256_CBC_SHA [RFC5246](MAY SUPPORT)

    ¢   TLS_DHE_RSA_WITH_AES_256_CBC_SHA [RFC5246] ](MAY SUPPORT)

    在RFC4279中定义了多种预共享密钥的认证方式,CAPWAP中主要关心下面两种:

    ¢  Pre-Shared Key (PSK) key exchange algorithm

    ¢  DHE_PSK key exchange algorithm

    同样,CAPWAP定义了预共享密钥支持的算法

    ¢  TLS_PSK_WITH_AES_128_CBC_SHA [RFC5246] (MUST SUPPORT)

    ¢  TLS_DHE_PSK_WITH_AES_128_CBC_SHA [RFC5246] (MUST SUPPORT)

    ¢  TLS_PSK_WITH_AES_256_CBC_SHA [RFC5246] ](MAY SUPPORT)

    ¢  TLS_DHE_PSK_WITH_AES_256_CBC_SHA [RFC5246] ](MAY SUPPORT)

    2.5.4 CAPWAP状态机

    CAPWAP状态机,是被AC和WTP同时使用的。对于每个定义的状态,只有特定的消息才被允许收发。

    因为WTP只会和单个AC通讯,因此只会有一个CAPWAP的状态机。而AC与WTP有很大差别,因为AC同时和许多WTP通讯。

    DTLS和CAPWAP的状态机由命令和通告的API接口联系起来。

    DTLS状态机的变迁由CAPWAP状态机的命令触发。

    CAPWAP状态机的变迁由DTLS状态机的通告触发

    CAPWAP状态机:

    2.5.4.1 CAPWAP to DTLS Commands

    ¢  DTLSStart

    开启DTLS会话的建立

    ¢  DTLSListen

    监听DTLS会话请求

    ¢  DTLSAccept

    允许DTLS会话建立

    ¢  DTLSAbortSession

    导致正在进行中的DTLS会话的中断

    ¢  DTLSShutdown

    关闭DTLS会话

    ¢  DTLSMtuUpdate

    改变DTLS模块的MTU设定大小。默认大小为1468字节

    2.5.4.2 DTLS to CAPWAP Notifications

    ¢  DTLSPeerAuthorize

    DTLS会话建立过程中,通知CAPWAP模块来认证会话。

    ¢  DTLSEstablished

    通知CAPWAP模块DTLS会话已经成功建立

    ¢  DTLSEstablishFail

    DTLS会话建立失败

    ¢  DTLSAuthenticateFail

    DTLS会话建立过程由于认证失败而终止。

    ¢  DTLSAborted

    通知CAPWAP模块它要求的DTLS会话建立过程已经终

    ¢  DTLSReassemblyFailure

    通知CAPWAP模块DTLS分片组装失败

    ¢  DTLSDecapFailure

    通知CAPWAP模块发生了一个解码错误

    ¢  DTLSPeerDisconnect

    通知CAPWAP模块DTLS会话已经关闭

    2.5.5 AC线程

    AC使用了三个“线程”(thread)的概念。

    ¢  监听线程:

    通过DTLSlisten命令,AC监听线程处理DTLS会话建立请求。创建的时候,监听线程开启DTLS Setup状态。当状态机进入Authorize状态,且DTLS会话生效之后,监听线程创建一个指定的WTP指定会话服务线程和状态空间。

    ¢  发现线程:

    AC的发现线程负责接收和响应发现请求消息。

    ¢  服务线程

    AC的服务进程处理每个WTP的状态和每个WTP连接的线程。这个线程在认证后被监听线程创建。一旦创建,服务线程会继承监听线程的一份状态机空间的拷贝。当与WTP之间的通讯完成后,服务线程关闭,所有的资源都会被释放。

    注意,在这里使用了线程这个术语,但是并不代表实现者就必须使用线程。这只是一个实现AC状态机的可用的方法。

  • 相关阅读:
    g2o中setparameterid(0,0)方法
    SLAM细碎内容积累_来自各种技术交流群_持续更新
    进程与线程
    写程序要注意的
    SSE优化指令集编译错误: inlining failed in call to always_inline 'xxx': target specific option mismatch xxx
    为一个vector<cv::KeyPoint*> 类型的变量做初始化
    prototype for '类名::函数名'does not match any in class'类名'
    error: field has incomplete type
    error: invalid use of incomplete type
    父类和子类可以相互转化吗?
  • 原文地址:https://www.cnblogs.com/xmphoenix/p/3806842.html
Copyright © 2011-2022 走看看