OpenCAPWAP狀態機介紹

上圖是WTP和AC進行交互的狀態機FSM,報文的交互通過DTLS加密傳送,DTLS和CAPWAP狀態機通過API接口命令和通知完成交互。

  • Start狀態:WTP開始和AC會話的初始狀態;
  • Idle狀態:WTP初始化完成後的狀態;
  • Discovery狀態:WTP接着進入發現AC的狀態,如果WTP指定AC,這個狀態可以跳過;
  • DTLS Setup狀態:DTLS會話建立;
  • Authorize狀態:DTLS會話證書認證;
  • DTLS Connect狀態:認證通過後進行連接狀態;
  • Join狀態:會話連接建立完成;
  • Image Date狀態:WTP從AC下載一個可執行的版本文件,WTP可以進行版本升級,升級完會重啓設備,DTLS會話因此會斷開;
  • Configure狀態:WTP從AC獲取配置;
  • Data Check狀態:WTP和AC進行消息交換,確認配置;
  • Run狀態:進入正常的運行狀態;
  • Reset狀態:重啓設備;
  • Sulking狀態:WTP不能和AC進行通信切換到該狀態,可以進入Discovery狀態重新發現AC;
  • DTLS Teardown狀態:關閉DTLS會話;
  • Dead狀態:完全清除狀態。
各個狀態切換條件:

1 Start to Idle

這個狀態變遷發生在設備初始化完成。

WTP: 開啓CAPWAP狀態機。    

AC:  開啓CAPWAP狀態機。

2 Idle to Discovery

這個狀態變遷發生是爲了支持CAPWAP發現進程。    

WTP:WTP進入發現狀態是爲了優先去傳輸第一個Discovery Request message。在進入這個狀態之前,WTP設置發現DiscoveryInterval timer,將DiscoveryCount counter爲0.同時清理以前的發現過程中可能會從AC收到的所有信息。    

AC:由發現線程執行,且發生在收到一個發現請求報文的時候。此時,AC需要給這個報文響應一個Discovery Response message。

3 Discovery to Idle

當發現過程完畢的時候,AC的發現線程將會觸發這個變遷。

WTP: 對於WTP來說,這個狀態變遷是無效的。

AC: 這個狀態變遷由AC發現線程執行,當發現線程傳輸了一個給Discovery Request回送了一個Discovery Response的時候,就會觸發這個過程。

4 Discovery to Sulking

當WTP發現AC失敗的時候會觸發這個狀態變遷。

WTP:發生在DiscoveryInterval timer超時的時候。 且此時DiscoveryCount變量等於MaxDiscoveries 。在進入這個狀態之前,WTP必須開啓SilentInterval timer 。當在Sulking狀態的時候,所有收到的CAPWAP協議報文都會被忽略。    

AC:對於AC來說,這個狀態變遷是無效的。

5 Sulking to Idle

這個狀態變遷發生在WTP需要重新啓動發現過程的時候。

WTP:當SilentInterval timer觸發,WTP進入到這個狀態。FailedDTLSSessionCount, DiscoveryCount和FailedDTLSAuthFailCount計數器被清零。     

AC:  對於AC來說,這是一個無效的狀態變遷。

6 Idle to DTLS Setup

這個狀態變遷發生在跟對端建立安全的DTLS會話的時候。

WTP: WTP通過調用DTLSStart命令來初始化這個狀態變遷,開始與選定AC進行DTLS會話,且開啓WaitDTLS timer。此時,忽略了發現過程,假設WTP有本地配置的AC。

AC:從start狀態進入Idle狀態,監聽線程自動變遷至DTLS Setup狀態,調用DTLSListen命令,並且開啓WaitDTLS timer。

7 Discovery to DTLS Setup

WTP: WTP調用DTLSStart命令來初始化這個變遷,開始與指定AC建立DTLS會話。     

AC:對於AC來說,這是一個無效的狀態變遷。

8 DTLS Setup to Idle

當DTLS連接失敗的時候發生這個狀態變遷。這個狀態變遷也會發生在WaitDTLS timer超時的情況下。

WTP: 此時WTP接收到DTLSEstablishFail通知,並且FailedDTLSSessionCount或者FailedDTLSAuthFailCount counter 沒有達到MaxFailedDTLSSessionRetry值。這個錯誤通知終止了DTLS會話的建立。當接收到這個通知,FailedDTLSSessionCount計時器會遞增。

AC:對於AC來說,這是一個無效的狀態變遷。

9 DTLS Setup to Sulking

當重複嘗試建立DTLS連接失敗的時候,會發生此狀態變遷。

WTP: 當FailedDTLSSessionCount或者FailedDTLSAuthFailCount到達最大值MaxFailedDTLSSessionRetry的時候,WTP進入此狀態變遷。進入這個狀態,WTP必須開啓SilentInterval定時器,且所有接收到的CAPWAP和DTLS協議報文將會被忽略。     

AC:對於AC來說,這是一個無效的狀態變遷。

10 DTLS Setup to Authorize

這個狀態變遷發生在當一個正在建立DTLS會話需要認證才能繼續進行的時候。           

WTP: 當WTP接收到DTLSPeerAuthorize通告的時候,開始這個狀態變遷。在進入這個狀態之前,WTP對AC的證書執行一個認證檢查。    

AC: 當DTLS模塊初始化DTLSPeerAuthorize通告的時候,AC監聽線程處理這個狀態變遷。監聽線程fork一個服務線程和一個狀態機內容的拷貝,然後,服務線程會對WTP證書執行認證。

11 Authorize to DTLS Setup

當監聽線程對新進入的會話開始監聽的時候,發生這個狀態變遷。     

WTP:對於WTP來說,這是個無效的狀態變遷

AC:當AC監聽線程創建WTP內容空間和服務線程後,發生這個狀態變遷。監聽線程然後調用DTLSListen命令 。

12 Authorize to DTLS Connect

當通知DTLS棧會話將要建立的時候發生這個狀態變遷。     

WTP:當AC證書被WTP認證成功的時候,會發生這個狀態變遷。調用DTLSAccept命令來完成。    

AC:當WTP證書成功通過AC認證的時候發生這個狀態變遷。調用DTLSAccept來完成。

13 DTLS Connect to DTLS Teardown

當DTLS會話建立失敗的時候發生。

WTP:當WTP接收到一個DTLSAborted或者DTLSAuthenticateFail通告,告知這個DTLS會話建立不成功的時候,發生這個狀態變遷。當因爲DTLSAuthenticateFail通告發生的狀態變遷,FailedDTLSAuthFailCount會增加,否則,FailedDTLSSessionCount計數器增加。這個狀態變遷也在WaitDTLS 定時器超時的時候發生,此時WTP開啓DTLSSessionDelete定時器。

AC:當WTP接收到一個DTLSAborted或者DTLSAuthenticateFail通告,告知這個DTLS會話建立不成功,此時FailedDTLSAuthFailCount和FailedDTLSSessionCount 不等於MaxFailedDTLSSessionRetry的時候,發生這個狀態變遷。 這個狀態變遷也在WaitDTLS定時器超時的時候發生。

14 DTLS Connect to Join

當會話成功建立的時候發生。

WTP: 當WTP接收到一個DTLSEstablished通告,表明這個DTLS會話成功建立的時候,發生這個狀態變遷。當接收到這個通告FailedDTLSSessionCount計時器被設置爲0.WTP進入join狀態,傳輸Join Request給AC。WTP停止WaitDTLS定時器。     

AC:當AC接收到DTLSEstablished通告,表明這個DTLS會話成功建立的時候,發生這個狀態變遷。當接收到這個通告,FailedDTLSSessionCount計時器被設置爲0.AC停止WaitDTLS定時器,開啓WaitJoin定時器。

15 Join to DTLS Teardown

當Join過程失敗的時候發生。

WTP:當WTP接收到一個帶有錯誤代碼消息單元的Join響應消息,或者在Join響應中由AC提供的Image與WTP現在運行的版本不一樣,且WTP的non-volatile memory中有這個請求的版本號.這個導致WTP初始化DTLSShutdown命令。當WTP接收到下面任何一個通告的時候,也會發生這個過程:DTLSAborted, DTLSReassemblyFailure, or DTLSPeerDisconnect.WTP開啓DTLSSessionDelete 定時器。

AC:發生在WaitJoin超時或者AC傳送了一個帶有錯誤碼的Join Response的時候。AC初始化DTLSShutdown命令。當AC收到下面任何一個DTLS通告的時候,也會發生這個過程:DTLSAborted, DTLSReassemblyFailure,  DTLSPeerDisconnect。            此時,AC開啓DTLSSessionDelete定時器。        

16 Join to Image Data

WTP和AC下載可執行的firmware時使用這個狀態變遷。

WTP:當WTP收到了一個成功的Join Response message,告知它當前運行的版本與要求的不一樣的時候,發生這個狀態變遷。且此時,WTP的non-volatile storage中也沒有要求的image版本。WTP初始化EchoInterval計時器。

AC:當AC發送一個Join Response給WTP之後,從WTP接受到一個Image Data Request報文,發生這個狀態變遷。AC停止WaitJoin定時器,發送一個Image Data Response message給WTP。

16 Join to Configure

WTP和AC使用這個狀態變遷來交換配置信息。

WTP:當WTP收到了一個successful Join Response message,且此時當前運行的版本與要求的一致。WTP發送一個Configuration Status Request message給AC,消息中包含了當前配置信息。

AC:當從WTP接收到Configuration Status Request message,且消息中包含指定消息元素需要覆蓋WTP的配置。AC停止WaitJoin定時器,發送Configuration Status Response message,並且開啓ChangeStatePendingTimer定時器。

17 Configure to Reset

這個狀態變遷被用來重啓連接。這個可能被配置階段發生的錯誤導致,或者是WTP決定它有需要來重啓讓新的配置生效。CAPWAP Reset命令用來告訴對端它將會初始化一個DTLSteardown。

WTP:WTP接收到Configuration Status Response message告訴它有錯誤發生或者覺得有需要重新讓新配置生效的時候,WTP進入reset 狀態。

AC:AC接收到一個來自WTP的Change State Event message,當這個消息包含了因爲AC的策略而不允許WTP提供服務的錯誤的時候,AC變遷到reset狀態。這個狀態變遷也會在ChangeStatePendingTimer定時器超時的時候發生。

18 Authorize to DTLS Teardown

這個狀態變遷爲了通知DTLS會話將要終止。     

WTP:當WTP認證失敗的時候,發生這個狀態變遷。WTP然後調用DTLSAbortSession命令終止這個DTLS會話。這個狀態變遷也會發生在WaitDTLS定時器超時的情況下。WTP開啓DTLSSessionDelete定時器。     

AC:這個狀態變遷發生在AC認證失敗的時候。AC調用DTLSAbortSession命令終止DTLS會話。這個狀態變遷也會發生在WaitDTLS定時器超時的時候。AC開啓DTLSSessionDelete定時器。

19 Configure to DTLS Teardown

這個變遷發生在因爲DTLS錯誤導致的配置過程終止的時候。

WTP:當接收到下列任一DTLS通告:DTLSAborted,DTLSReassemblyFailure, 或者 DTLSPeerDisconnect,WTP進入這個狀態。如果它接收到頻繁的DTLSDecapFailure通告,WTP也有可能會終止DTLS會話。此時,WTP開啓DTLSSessionDelete定時器。

AC:當接收到下列任一DTLS通告:DTLSAborted,DTLSReassemblyFailure,或者DTLSPeerDisconnect,AC進入這個狀態。如果它接收到頻繁的DTLSDecapFailure通告,WTP也有可能會終止DTLS會話。AC開啓DTLSSessionDelete定時器。

20 Image Data to Reset

WTP下載image後重啓,重新設置DTLS連接

WTP:當image的下載完成,或者ImageDataStartTimer定時器超時,WTP進入reset狀態;接收到一個來自AC的Image Data Response message消息的時候轉入這個狀態。

AC:當image傳輸成功完成,或者在傳輸過程中發生了一個錯誤的時候,AC進入reset狀態。

21 Image Data to DTLS Teardown

當firmware下載過程由於DTLS錯誤而終止時發生

WTP:接收到下面任一DTLS通告:DTLSAborted,DTLSReassemblyFailure,或者DTLSPeerDisconnect的時候收到頻繁的DTLSDecapFailure通告的時候關閉DTLS會話。此時WTP開啓DTLSSessionDelete計時器。

AC:當AC接收到下面任一DTLS通告:DTLSAborted,DTLSReassemblyFailure,或者DTLSPeerDisconnect的時候收到頻繁的DTLSDecapFailure通告的時候關閉DTLS會話。此時AC開啓DTLSSessionDelete計時器。            

22 Configure to Data Check

當WTP與AC確認配置信息的時候

WTP: 從AC接收到一個成功的Configuration Status Response message的時候,WTP轉入Data Check狀態。此時WTP發送一個Change State Event Request message。

AC:當AC接收到來自WTP的Change State Event Request message時發生。然後,AC迴應一個Change State Event Response message。此時, AC必須開啓DataCheckTimer定時器,關閉ChangeStatePendingTimer定時器。

23 Data Check to DTLS Teardown

當WTP沒有完成Data Check 交互的時候。

WTP:當CAPWAP重傳定時器超時,WTP仍沒有接收到Change State Event Response message;當RetransmitCount達到MaxRetransmit的時候。 此時,WTP開啓DTLSSessionDelete定時器。

AC:當DataCheckTimer定時器超時的時候進入這個狀態。此時,AC開啓DTLSSessionDelete定時器。

24 Data Check to Run

當控制和數據通道建立的時候

WTP:

條件:當接收到來自AC的成功Change State Event Response message。

動作:WTP初始化一個數據通道,這個數據通道可選擇是否由DTLS加密。開啓DataChannelKeepAlive定時器,發送一個Data Channel Keep-Alive報文。然後,WTP開啓EchoInterval定時器和DataChannelDeadInterval定時器。

AC:

條件:當AC接收到Data Channel Keep-Alive報文,報文中的session Id與WTP在Join Request中設定的一致。           

動作:AC關閉DataCheckTimer定時器。注意,如果AC要求數據通道要加密,那麼將會建立一個數據通道的DTLS會話。在接收到Data Channel Keep-Alive報文之前,AC就會發送一個自己的Data Channel Keep-Alive報文。

25 Run to DTLS Teardown

當DTLS發生錯誤的時候

WTP:

條件:接收到下面任何一個DTLS通告:DTLSAborted,DTLSReassemblyFailure, 或者DTLSPeerDisconnect;接收到頻繁的DTLSDecapFailure通告;RetransmitCount達到MaxRetransmit值。           

動作:開啓DTLSSessionDelete定時器。

AC:

條件:接收到下面任何一個DTLS通告:DTLSAborted,DTLSReassemblyFailure, 或者DTLSPeerDisconnect。 接收到頻繁的DTLSDecapFailure通告。   RetransmitCount達到MaxRetransmit值。 EchoInterval定時器觸發。           

動作:開啓DTLSSessionDelete定時器。

26 Run to Reset

當AC或者WTP關閉連接的時候發生。可以有正常操作導致,也可能由錯誤導致。

WTP:WTP接收到來自AC的Reset Request

AC:AC發送一個Reset Request給WTP。

27 Reset to DTLS Teardown

CAPWAP reset關閉DTLS會話。

WTP:

條件:WTP發送Reset Response。           

動作:WTP不調用DTLSShutdown命令,開啓DTLSSessionDelete定時器。

AC:

條件:當AC接收到Reset Response。           

動作:初始化DTLSShutdown命令,開啓DTLSSessionDelete定時器。

28 DTLS Teardown to Idle

DTLS會話關閉

WTP:WTP成功清理控制層DTLS會話所關聯的所有資源,或者DTLSSessionDelete定時器超時。如果存在數據層DTLS會話,那麼也需要關閉,被釋放所有資源。爲這個狀態機設置的所有定時器都要被重置。

AC:對AC來說是無效狀態。

29 DTLS Teardown to Sulking

重複嘗試建立DTLS連接失敗

WTP:

條件:當FailedDTLSSessionCount或者FailedDTLSAuthFailCount計時器達到MaxFailedDTLSSessionRetry值           

動作:開啓SilentInterval定時器,在Sulking狀態,所有接收到的CAPWAP和DTLS協議報文都必須忽略

AC:對AC來說是無效狀態。

30 DTLS Teardown to Dead

DTLS會話被關閉

WTP:對WTP來說是無效狀態

AC:AC成功清理控制層DTLS會話所關聯的所有資源,或者DTLSSessionDelete定時器超時。如果存在數據層DTLS會話,那麼也需要關閉,被釋放所有資源。爲這個狀態機設置的所有定時器都要被重置。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章