Chương 3 GIAO THỨC CAPWAP
3.1. Tổng quan
3.1.2.1. Các bước chuyển trạng thái của giao thức CAPWAP
Phần này sẽ mô tả chi tiết các bước chuyển trạng thái trong máy trạng thái của giao thức CAPWAP, đã được trình bày tại Hình 8. Các con số và ký tự được lấy tương ứng từ Hình 8, nhằm mục đích dễ theo dõi.
(0) Start Idle: Xảy ra khi quá trình khởi động thiết bị hoàn tất
WTP: Bước chuyển này được sử dụng để khởi động máy trạng thái CAPWAP trên WTP.
AC: Trong bước chuyển này, AC tạo ra Discovery Thread và Listener Thread, cũng như khởi động máy trạng thái.
(1) Idle Discovery: Bước chuyển này nhằm hỗ trợ quá trình tìm kiếm của CAPWAP
WTP: chuyển đi thông điệp Discovery Request đầu tiên. Đồng thời, WTP sẽ khởi tạo DiscoveryInternalTimer, dùng để xác định khoảng thời gian time-out cho các kết nối tới AC. WTP cũng khởi tạo biến DiscoveryCount về giá trị 0, biến này được dùng để đếm số lần cố gắng kết nối của WTP.
(#) Discovery Discovery: WTP xác định AC để kết nối
WTP: Nếu DiscoveryInternalTimer được khởi tạo tại bước (1) kết thúc, WTP sẽ gửi lại các Discovery Request cho các AC. Mỗi một lần gửi lại các Discovery Request này, biến DiscoveryCount sẽ được tăng thêm 1 đơn vị.
AC: Không tồn tại bước chuyển này.
(2) Discovery Idle: Xảy ra trên AC khi quá trình tìm kiếm kết thúc WTP: Không tồn tại
AC:Sau khi Discovery Thread nhận được Discovery Request và gửi phàn hổi bằng Discovery Respone, bước chuyển trạng thái này xảy ra.
(!) Discovery Sulking: Xảy ra trên WTP khi quá trình tìm kiếm AC thất bại WTP: Khi biến đếm DiscoveryCount đạt tới giá trị MaxDiscoveries, WTP sẽ thực hiện bước chuyển này. WTP phải khởi động SilentIntervalTimer. Khi ở trạng thái Sulking, tất cả các gói tin CAPWAP tới WTP đều không được xử lý.
AC: Không tồn tại bước chuyển này.
(@) Sulking Idle: Xảy ra khi WTP tái khởi động tiến trình tìm kiếm WTP: Khi SilentTimerInterval tới hạn, WTP sẽ thực hiện bước chuyển này. AC: Không tồn tại bước chuyển này.
(&) Sulking Sulking: Trạng thái Sulking được thiết kế nhằm làm giảm các cuộc tấn công từ chối dịch vụ
WTP: Không hoạt động
AC: Không tồn tại bước chuyển này.
(3) Idle DTLS Setup: Thiết lập phiên làm việc bảo mật DTLS
WTP: Gọi tới lệnh DTLSStart, đồng thời khởi động WaitDTLSTimer. Do quá trình tìm kiếm được bỏ qua, ta hiểu rằng WTP đã được cấu hình các AC từ trước.
AC: Sau khi chuyển từ trạng thái Start sang trạng thái Idle, Listener Thread sẽ tự động chuyển AC qua trạng thái DTLS Setup, và gọi lệnh DTLSListen, đồng thời khởi động WaitDTLSTimer.
WTP: Tương tự bước (3), tuy nhiên việc thực hiện bước chuyển này là kết quả của quá trình tìm kiếm.
AC: Không tồn tại bước chuyển này.
($) DTLS Setup Idle: Xảy ra khi quá trình thiết lập kết nối DTLS thất bại
WTP: WTP thực hiện bước chuyển này khi nhận được cảnh báo DTLSEstablishFail từ DTLS, và 2 biến đếm FailedDTLSSessionCount hoặc FailedDTLSAuthFailCount chưa đạt tới giá trị MaxFailedDTLSSessionRetry. WTP cũng thực hiện bước chuyển này khi WaitDTLSTimer tới hạn.
AC: Không tồn tại bước chuyển này.
(*) Sulking Sulking: Khi các nỗ lực kết nối DTLS của WTP thất bại vượt quá số lần cho phép
WTP: WTP thực hiện bước chuyển này khi 1 trong 2 biến đếm FailedDTLSSessionCount hoặc FailedDTLSAuthFailCount đạt tới giá trị MaxFailedDTLSSessionRetry. Khi bước vào trạng thái Sulking, WTP khởi động SilentIntervalTimer.
AC: Không tồn tại bước chuyển này.
(4) DTLS Setup DTLS Setup: Khi việc thiết lập phiên làm việc DTLS thất bại WTP: Không tồn tại bước chuyển này.
AC:Listener Thread thực hiện bước chuyển này khi nhận được cảnh báo DTLSEstablishFail từ DTLS. Listener Thread tăng biến đếm FailedDTLSSessionCount lên 1, và gọi tới lệnh DTLSListen.
(5) DTLS Setup Authorize: Bước chuyển này xảy ra khi một phiên làm việc DTLS được khởi tạo, và cần được xác thực.
WTP: Bước chuyển này xảy ra khi WTP nhận được thông báo DTLSPeerAuthorize. Chi tiết về quá trình xác thực sẽ được trình bày ở các mục sau.
AC: Module DTLS trên AC sẽ khởi tạo thông báo DTLSPeerAuthorize, và sau đó bước chuyển này sẽ được kiểm soát bởi Listener Thread. Listener Thread sẽ sử dụng hàm fork để tạo ra 1 bản copy của Service Thread, sau đó Service Thread mới tạo này sẽ tiến hành việc xác thực với WTP.
(6) Authorize DTLS Setup: Listener Thread sẽ thực hiện bước chuyển này để kích hoạt chức năng lắng nghe các phiên làm việc mới.
AC: Bước chuyển này xảy ra khi Listener Thread tạo ra Service Thread, sau đó gọi lệnh DTLSListen.
(a) Authorize DTLS Connect: Bước chuyển này diễn ra để thông báo cho stack DTLS rằng phiên làm việc đã được khởi tạo.
WTP: Bước chuyển này diễn ra khi WTP đã xác thực thành công AC. WTP sẽ gọi lệnh DTLSAccept để kết thúc bước chuyển.
AC: Bước chuyển này diễn ra khi AC xác thực WTP thành công. AC cũng gọi lệnh DTLSAccept để kết thúc bước chuyển.
(b) Authorize DTLS Teardown: Bước chuyển này diễn ra để thông báo cho stack DTLS biết rằng phiên làm việc đã bị hủy bỏ.
WTP: Bước chuyển này diễn ra khi WTP không thể xác thực AC. WTP sẽ gọi lệnh DTLSAbortSession. Bước chuyển này cũng có thể diễn ra khi WaitDTLSTimer tới hạn. WTP sẽ khởi động DTLSSessionDeleteTimer.
AC: Tương tự, bước chuyển này diễn ra khi AC không thể xác thực WTP, hoặc WaitDTLSTimer tới hạn. AC cũng gọi lệnh DTLSAbortSession và sau đó khởi động DTLSSessionDeleteTimer.
(c) DTLS Connect DTLS Teardown: Bước chuyển này xảy ra khi việc khởi tạo phiên làm việc DTLS thất bại.
WTP: Xảy ra khi WTP nhận được thông báo DTLSAborted hoặc DTLSAuthenticateFail, hoặc WaitDTLSTimer tới hạn. Tương ứng, WTP sẽ tăng các biến đếm FailedDTLSSessioncount hoặc FailedDTLSAuthFailCount, và khởi động DTLSSessionDeleteTimer.
AC: Xảy ra khi AC nhận được thông báo DTLSAborted hoặc DTLSAuthenticateFail, và 2 biến đếm FailedDTLSSessionCount và FailedDTLSAuthFailCount chưa đạt tới giá trị MaxFailedDTLSSessionRetry. Bước chuyển này cũng xảy ra trên AC khi WaitDTLSTimer tới hạn, và AC khởi động DTLSSessionDeleteTimer.
(d) DTLS Connect Join: Bước chuyển này xảy ra khi phiên làm việc DTLS được khởi tạo thành công.
WTP: Bước chuyển này xảy ra khi WTP nhận được thông báo DTLSEstablished. Khi đó, biến đếm FailedDTLSSessionCount được xác định giá trị về 0. WTP chuyển vào trạng thái Join bằng cách truyền đi Join Request tới AC. WTP ngừng WaitDTLSTimer.
AC: Bước chuyển này xảy ra khi AC nhận được thông báo DTLSEstablished. AC xác định lại FailedDTLSSessionCount về 0, dừng WaitDTLSTimer, và khởi động WaitJoinTimer.
(e) Join DTLS Teardown: Bước chuyển này xảy ra khi tiến trình Join thất bại. WTP: Bước chuyển này xảy ra khi WTP nhận được thông điệp Join Response với Result Code chứa lỗi, hoặc WTP nhận được một trong các thông báo: DTLSAborted, DTLSReassemblyFailure, hoặc DTLSPeerDisconnect. WTP sẽ gọi lệnh DTLSShutdown, và khởi động DTLSSessionDeleteTimer.
AC: Bước chuyển này xảy ra khi WaitJoinTimer tới hạn, hoặc AC trả về thông điệp JoinRespone với mã lỗi cho WTP. AC gọi lệnh DTLSShutdown. AC cũng thực hiện bước chuyển khi nhận được một trong các thông báo: DTLSAborted, DTLSReassemblyFailure, hoặc DTLSPeerDisconnect, và sau đó sẽ khởi động DTLSSessionDeleteTimer.
(f) Join Image Data: Bước chuyển này được sử dụng bởi WTP và AC để download firmware.
WTP: WTP bước vào trạng thái Image Data khi nó nhận được một thông điệp Join Respone với trạng thái thành công, và xác định được phiên bản của firmware trong thông điệp khác với phiên bản mà WTP đang có, cũng như trong các bộ nhớ khác mà WTP có thể truy cập. WTP khởi tạo EchoIntervaltimer, và gửi ImageDataRequest tới AC, để yêu cầu bắt đầu việc download firmware.
AC: Khi AC nhận được ImageDataRequest từ WTP thì AC sẽ thực hiện bước chuyển này. AC bắt buộc phải trả lời bằng ImageDataRespone cho WTP.
(g) Join Configure: WTP và AC sử dụng bước chuyển này để trao đổi các thông tin cấu hình.
WTP: WTP bước vào trạng thái Configure khi nó nhận được JoinRespone với mã thành công, và xác định được rằng nó không cần cập nhật firmware. WTP sẽ gửi thông điệp ConfigurationStatusRequest tới AC trong đó mô tả chi tiết cấu hình hiện tại của WTP.
AC: Bước chuyển này xảy ra khi AC nhận được ConfigurationStatusRequest từ WTP. AC ngừng WaitJoinTimer. AC sẽ gửi đi ConfigurationStatusRespone, và khởi động ChangeStatePendingTimer.
(h) Configure Reset: Bước chuyển này được sử dụng để reset kết nối giữa WTP và AC, có thể bởi vì xuất hiện lỗi trong quá trình kết nối, cũng có thể vì WTP cần khởi động lại để các cấu hình mới có hiệu lực.
WTP: WTP thực hiện bước chuyển này khi nó nhận được một ConfigurationStatusRespone thông báo lỗi, hoặc WTP cần khởi động lại để áp dụng các cấu hình mới.
AC: AC bước vào trạng thái Reset khi nó nhận được ChangeStateEvent từ WTP, hoặc ChangeStatePendingTimer tới hạn.
(i) Configure DTLS Teardown: Bước chuyển này xảy ra khi tiến trình cấu hình bị hủy bởi lỗi DTLS.
WTP: WTP bước vào trạng thái này khi nó nhận được một trong các thông báo sau của DTLS: DTLSAborted, DTLSReassemblyFailure, DTLSPeerDisconnect. WTP cũng có thể thực hiện bước chuyển này nếu nó thường xuyên nhận được thông báo DTLSDecapFailure. WTP khởi động DTLSSessionDeleteTimer.
AC: AC bước vào trạng thái này khi nó nhận được một trong các thông báo sau của DTLS: DTLSAborted, DTLSReassemblyFailure, DTLSPeerDisconnect, hoặc có thể thực hiện bước chuyển khi thường xuyên nhận được thông báo DTLSDecapFailure. AC cũng khởi động DTLSSessionDeleteTimer.
(j) Image Data Image Data: Trạng thái Image Data được sử dụng bởi WTP và AC trong suốt quá trình download firmware.
WTP: WTP bước vào trạng thái Image Data khi nó nhận được thông điệp ImageDataResponse, có nghĩa rằng AC vẫn còn dữ liệu chưa gửi. Bước chuyển này cũng xảy ra khi WTP nhận được các ImageDataRequest kế tiếp, khi đó WTP sẽ reset giá trị của ImageDataStartTimer để chắc chắn rằng ImageDataRequest tiếp theo sẽ được gửi từ AC. Bước chuyển này cũng có thể xảy ra khi EchoIntervalTimer tới hạn, trong trường hợp WTP gửi EchoRequest và reset EchoIntervalTimer. Bước chuyển này cũng có thể xảy ra khi WTP nhận EchoResponse từ AC.
AC: Bước chuyển trạng thái này xảy ra khi AC nhận được thông điệp ImageDataResponse từ WTP trong khi AC đang ở trạng thái Image Data. Bước chuyển trạng thái này cũng xảy ra khi AC nhận EchoRequest từ WTP, trong trường hợp nó trả lời bằng EchoResponse, và reset EchoIntervalTimer.
(k) Image Data Reset: Bước chuyển này được sử dụng để reset kết nối DTLS trước khi khởi động lại WTP sau khi download firmware.
WTP: Khi quá trình download hoàn tất, hoặc ImageDataStartTimer tới hạn, WTP bước vào trạng thái Reset. WTP có thể chuyển tới trạng thái này nếu nhận được thông báo lỗi qua ImageDataRequestRespone từ AC.
AC: AC bước vào trạng thái Reset khi quá trình truyền firmware tới WTP thành công, hoặc có lỗi xảy ra trong quá trình truyền firmware.
(l) Image Data DTLS Teardown: Bước chuyển này diễn ra khi quá trình download bị hủy bởi lỗi DTLS.
WTP: WTP bước vào trạng thái DTLS Teardown khi nó nhận được một trong các thông báo DTLS sau: DTLSAborted, DTLSReassemblyFailure, hoặc DTLSPeerDisconnect. WTP có thể bước vào trạng thái này nếu nó thường xuyên nhận được thông báo DTLSDecapFailure. WTP sẽ khởi động DTLSSessionDeleteTimer.
AC: AC bước vào trạng thái này nếu nó nhận được một trong các thông báo DTLS: DTLSAborted, DTLSReassemblyFailure, hoặc DTLSPeerDisconnect. AC có thể bước vào trạng thái này nếu nó thường xuyên nhận được thông báo DTLSDecapFailure. AC sẽ khởi động DTLSSessionDeleteTimer.
(m) Configure Data Check: Bước chuyển trạng thái này xảy ra khi WTP và AC xác nhận cấu hình.
WTP: WTP bước vào trạng thái Data Check khi nhận được thông báo thành công thông qua ConfigurationStatusResponse từ AC. WTP sẽ truyền đi ChangeStateEventRequest.
AC: Bước chuyển này diễn ra khi AC nhận được thông điệp ChangeStateEventRequest từ WTP. AC sẽ trả lời bằng thông điệp ChangeStateEventRespone. AC bắt buộc phải khởi động DataCheckTimer và dừng ChangeStatePendingTimer.
(n) Data Check DTLS Teardown: Bước chuyển này diễn ra khi WTP không thể hoàn thành việc trao đổi kiểm tra dữ liệu.
WTP: Bước chuyển này diễn ra nếu WTP không nhận được thông điệp ChangeStateEventRespone trong một thời gian định trước (CAPWAP Retransmission Timeout). Bước chuyển này cũng có thể diễn ra do các giao thức tầng phía dưới. WTP sẽ khởi động DTLSSessionDeleteTimer.
AC: AC bước vào trạng thái này khi DataCheckTimer tới hạn. AC sẽ khởi động DTLSSessionDeleteTimer.
(o) Data Check Run: Sau khi các kết nối cho đường điều khiển và đường dữ liệu đã được thiết lập xong, WTP và AC sẽ thực hiện bước chuyển này để bắt đầu hoạt động.
DataChannelKeepAliveTimer và bắt đầu truyền các gói tin DataChannelKeepAlive. Sau đó, WTP khởi động EchoIntervalTimer và DataChannelDeadIntervalTimer.
AC: AC thực hiện bước chuyển trạng thái này khi nó nhận được gói tin DataChannelKeepAlive, trong gói tin đó có chứa SessionID. AC kiểm tra SessionID này giống với SessionID trong gói tin Join Request trước đó. AC tắt DataCheckTimer.
(p) Run DTLS Teardown: Bước chuyển trạng thái này xảy ra khi có lỗi trong stack DTLS, khiến cho phiên làm việc DTLS phải bị hủy bỏ.
WTP: WTP thực hiện bước chuyển này khi nó nhận được một trong các thông báo DTLS là DTLSAborted, DTLSReassemblyFailure, hoặc DTLSPeerDisconnect. WTP cũng có thể bước vào trạng thái DTLS Teardown nếu WTP thường xuyên nhận được thông báo DTLSDecapFailure. WTP sẽ khởi động DTLSSessionDeleteTimer.
AC: Tương tự như WTP.
(q) Run Run: Đây là bước chuyển trong hoạt động bình thường của giao thức CAPWAP.
WTP: WTP sẽ reset EchoIntervalTimer mỗi khi nó gửi đi một Request tới AC. AC: Trái ngược với WTP, mỗi khi nhận được một Request từ WTP, AC sẽ reset EchoInterval của mình.
(r) Run Reset: Bước chuyển trạng thái này xảy ra khi WTP hoặc AC hủy kết nối. Bước chuyển này có thể là kết quả của các hoạt động bình thường, hoặc do có lỗi xảy ra.
WTP: WTP thực hiện bước chuyển này khi nó nhận được thông điệp ResetRequest từ AC.
AC: AC thực hiện bước chuyển này khi nó truyền đi ResetRequest tới WTP.
(s) Reset DTLS Teardown: Bước chuyển này được thực hiện khi quá trình reset CAPWAP đã kết thúc việc hủy phiên làm việc DTLS.
WTP: Bước chuyển trạng thái xuất hiện khi WTP gửi đi ResetResponse. WTP khởi động DTLSSessionDeleteTimer.
AC: Bước chuyển trạng thái này xảy ra khi AC nhận được ResetResponse. AC gọi lệnh DTLSShutdown, sau đó khởi động DTLSSessionDeleteTimer.
(t) DTLS Teardown Idle: Bước chuyển trạng thái này xảy ra khi phiên làm việc DTLS đã bị kết thúc.
WTP: Bước chuyển này diễn ra khi WTP đã giải phóng tất cả các tài nguyên liên quan, hoặc DTLSSessionDeleteTimer tới hạn.
AC: Không tồn tại bước chuyển này.
(u) DTLS Teardown Sulking: Bước chuyển trạng thái này diễn ra khi các nỗ lực lặp lại để thiết lập kết nối DTLS đều thất bại.
WTP: WTP thực hiện bước chuyển trạng thái này khi các biến đếm FailedDTLSessionCount hoặc FailedDTLSAuthFailCount đạt tới giá trị DTLSMaxFailedDTLSSessionRetry. Khi thực hiện bước chuyển này, WTP bắt buộc phải khởi động SilentIntervalTimer. Trong trạng thái Sulking, WTP sẽ bỏ qua tất cả các thông điệp CAPWAP và DTLS.
AC: Không tồn tại bước chuyển này.
(w) DTLS Teardown Dead: Bước chuyển này diễn ra khi phiên làm việc DTLS bị tắt.
WTP: Không tồn tại bước chuyển này.
AC: AC thực hiện bước chuyển này sau khi đã giải phóng thành công toàn bộ các tài nguyên liên quan, hoặc DTLSSessionDeleteTimer tới hạn.