上圖是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定時器。
這個變遷發生在因爲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定時器。
當控制和數據通道建立的時候
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會話,那麼也需要關閉,被釋放所有資源。爲這個狀態機設置的所有定時器都要被重置。