Trường đầu tiên (từ phải qua trái) có độ dài là 1 byte truờng này miêu tả định danh của từng phần tử. Trường tiếp theo có độ dài 1 byte sẽ cho biết chiều dài của tải IE. Trường còn lại là trường nội dung của tải
b) Trường các biến đồng bộ piconet (Piconet SynchronizationParameters )
Hình 4.8: Cấu trúc của trƣờng con “các biến đồng bộ piconet”
- Thẻ thời gian (Time token): chứa bộ đếm quay vòng 48 bit, giá trị trường này sẽ tăng trong mỗi Beacon.
- Trường Superframe Duration là trường cho biết thời gian siêu khung hiện tại, nó có thể chứa một giá trị nằm trong khoảng [0, 65535]. Tuy nhiên giá trị đúng của nó phải nằm trong khoảng [mMinSuperframe- Duration, mMaxSuperframeDuration].
- Trường CAP End Time: Trường này cho biết thời gian kết thúc của khoảng CAP cho siêu khung hiện tại. Trường này có thể chứa một giá trị nằm trong khoảng [0, 65535], CAP bắt đầu sau khi kết thúc Beacon và một khoảng SIFS.
- Trường Max TX Power Level cho biết mức năng lượng truyền tối đa được phép trong siêu khung hiện tại.
- Trường Piconet Mode cho biết các đặc tính chi tiết về piconet và siêu khung. Cấu trúc của trường này như sau:
Hình 4.9: Cấu trúc của trƣờng con Piconet Mode
Nếu bit CAP Data, CAP Commands hay CAP Association được đặt là 1 thì kiểu khung dữ liệu hay khung lệnh sẽ được gửi đi trong CAP của siêu khung hiện tại, bit CAP Commands sẽ được đặt trong tất cả các
khung lệnh ngoại trừ lệnh yêu cầu liên kết. Trong lệnh này bít CAP Association được đặt bằng 1. Bít MCTA Used được đặt bằng 1 nếu như PNC sử dụng MCTA trong siêu khung. Bít SEC Mode cho biết việc thiết lập chế độ bảo mật hiện tại trong piconet, nếu nó được đặt là 1 thì piconet có thiết lập chế độ bảo mật.
- Trường PNC Response có cấu trúc như sau:
Trường này miêu tả tần số mà PNC xác định số các MCTA mở hoặc MCTA hướng liên kết các cho mỗi DEV. Giả sử nếu trường này được đặt một giá trị tương ứng với giá trị là 8 thì PNC sẽ được thông báo rằng nó sẽ phải cung cấp MCTA mở hoặc MCTA hướng liên kết cho mỗi DEV trong piconet một lần ít nhất 8 trong mỗi siêu khung.
- Trường PNC Address chứa địa chỉ DEV của PNC.
4.3.2.2 Cấu trúc Beacon có bảo mật
Hình 4.10: Cấu trúc khung Beacon có bảo mật
Ngoài các trường giống như ở khung Beacon không bảo mật khung Beacon có bảo mật còn có 2 trường:
- SFC: Trường này có 2 chiều dài là 2 byte, là bộ đếm các khung bảo mật được gửi thành công
- SECID: Trường này có chiều dài là 2 byte cho biết định danh của khóa được sử dụng để bảo vệ khung
4.3.3 Cấu trúc các khung báo nhận 4.3.3.1 Khung báo nhận tức thời 4.3.3.1 Khung báo nhận tức thời
Cấu trúc của khung này bao gồm 10 byte là tiêu đề MAC của khung
4.4.3.2 Khung báo nhận tích lũy
Khung báo nhận tích lũy bao gồm một chuỗi các khối định danh MPDU để cho các DEV đích báo nhận. Khung này chỉ được sử dụng cho các luồng dữ liệu có trường ACK Policy được đặt là ―yêu cầu báo nhận tích lũy‖. Các khối
định danh MPDU sẽ được gửi theo thứ tự giống như các khung dữ liệu nhận được. Khung báo nhận tích lũy có cấu trúc như sau:
Hình 4.11: Cấu trúc khung báo nhận tích lũy
- Trường Max Burst cho biết số khung có thể được gửi theo một dãy. Dãy này là tập hợp các khung đang chờ báo nhận thông qua khung báo nhận tích lũy (Dly-ACK frame).
- Trường Max Frames cho biết số lượng khung tối đa (không quan tâm đến kích thước) có thể được gửi trước khi yêu cầu Dly-ACK từ DEV đang nhận khung.
- Trường MPDUs ACKed chứa số các MPDU mà được báo nhận với khung này. Trường này sẽ có giá trị lớn hơn hoặc bằng 1
- Trường khối định danh MPDU (MPDU ID block) có cấu trúc như sau:
MSDU number: cho biết số các MSDU
Fragment number: cho biết số các phân mảnh.
4.3.4 Cấu trúc khung Lệnh
4.3.4.1 Cấu trúc khung lệnh không bảo mật:
Hình 4.12: Cấu trúc khung lệnh không bảo mật
- Trường Command block có cấu trúc như sau:
Trường Command type cho biết kiểu cua khung lệnh giá trị của nó được liệt kê như sau:
Trường Length cho biết độ dài của tải trong khung lệnh Trường Command payload là tải của khung lệnh.
4.3.4.2 Cấu trúc khung lệnh bảo mật
Hình 4.13: Cấu trúc khung lệnh bảo mật
Trường Integrity Code: là trường mã được mã hóa để bảo vệ tính toàn vẹn của tiêu đề MAC và tải của khung.
4.3.5 Cấu trúc khung dữ liệu
4.3.5.1 Cấu trúc khung dữ liệu không bảo mật
Hình 4.14: Cấu trúc khung dữ liệu không bảo mật
Độ dài của tải dữ liệu được giới hạn bởi kích thước tối đa cho phép đối với thân khung MAC.
4.3.5.2 Cấu trúc khung dữ liệu bảo mật
Hình 4.15: Cấu trúc khung dữ liệu có bảo mật 4.4 Điều khiển truy cập môi trƣờng truyền 4.4 Điều khiển truy cập môi trƣờng truyền
4.4.1. Cấu trúc siêu khung
- Beacon: Sử dụng để đặt vị trí thời gian và các thông tin quản trị giao tiếp của piconet
- CAP (Contention access period): Chu kỳ truy cập cạnh tranh, sử dụng để trao đổi các lệnh, hoặc dữ liệu không đồng bộ nếu nó có mặt trong siêu khung.
- Chu kỳ xác định thời gian kênh CTAP (The channel time allocation period) gồm các khoảng CTA (Channel Time Allocation) và các MCTA là các CTA quản trị. Các CTA được sử dụng cho các lệnh, các luồng thời gian thực và các kết nối dữ liệu không đồng bộ.
Hình 4.16: Cấu trúc siêu khung
Chiều dài của CAP được quyết định bởi PNC và được trao đổi với các DEV trong piconet thông qua Beacon. MCTA là một kiểu CTA được sử dụng để giao tiếp giữa các DEV và PNC. CAP sử dụng CSMA/CA để truy câp môi trường truyền.
4.4.2 Interframe space (IFS)
Có 4 khoảng IFS được định nghĩa:
The Minimum Interframe Space (MIFS) The Short Interframe Space (SIFS) The Backoff Interframe Space (BIFS)
The Retransmission Interframe Space (RIFS)
Các khung báo nhận tức thời hoặc báo nhận tích lũy sẽ bắt đầu được truyền sau khoảng SIFS kể từ khi kết thúc việc truyền khung trước đó và khung này phải yêu cầu có báo nhận. Khoảng MIFS sẽ được sử dụng giữa các khung
trong CTA khi chính sách báo nhận được đặt là không báo nhận hoặc báo nhận tích lũy. Trong CTAP, các thiết bị sẽ sử dụng RIFS để thực hiện truyền lại.
4.4.3. Truy cập kênh truyền
Thời gian kênh được chia thành các siêu khung, mỗi siêu khung bắt đầu bằng Beacon và nó có 3 phần chính như sau: Beacon, CAP và CTAP. CTAP được sử dụng cho các luồng dữ liệu đồng bộ và không đồng bộ cũng như các lệnh điều khiển, còn CAP sử dụng cho các lệnh và các luồng không chứa dữ liệu. Trong CAP các thiết bị truy cập kênh truyền sử dụng CSMA/CA và thủ tục backoff. Trong CTAP, PNC sẽ điều khiển truy nhập kênh truyền bằng cách khai báo các CTA cho DEV riêng hay cho một nhóm các thiết bị, mỗi CTA sẽ có một thời điểm bắt đầu và một khoảng thời gian cố định.
4.4.3.1 Truy cập kênh truyền trong CAP
Kỹ thuật truy cập môi trường truyền trong CAP đó là CSMA/CA.
Để giảm đụng độ, DEV muốn truyền sẽ cảm nhận môi trường truyền trong khoảng thời gian ngẫu nhiên. Tầng MAC sẽ sử dụng những khả năng của CCA ở tầng vật lý để phát hiện xem kênh là bận hay rỗi. Nếu môi trường rỗi sau thời gian này thì DEV sẽ bắt đầu truyền. Quá trình xử lý trước khi truyền được gọi là ―backoff‖. Thủ tục này không áp dụng cho các Beacon đầu của siêu khung và Beacon của PNC.
Trong CAP, DEV được phép truyền một khung tại một thời điểm có áp dụng thủ tục backoff trong CAP, ngoại trừ khung báo nhận tức thời. PNC có thể gửi một lệnh sau một khoảng SIFS kể từ khi gửi báo nhận cho một khung hoặc kể từ khi nhận được một khung mà trường chính sách báo nhận của nó được đặt là không cần báo nhận trong CAP. Trong trường hợp này PNC không cần yêu cầu thực hiện thủ tục backoff trước khi gửi khung của nó.
Thuật toán backoff sử dụng những thông tin sau:
- retry_count: Một số nguyên có giá trị từ 0 đến 3
- backoff_window(retry_count): Một bảng có giá trị [7, 15, 31, 63]
- pBackoffSlot: Biến này phụ thuộc vào lớp vật lý, giá trị biến này dựa trên lượng thời gian cảm nhận kênh truyền.
- bw_random(retry_count): Là một số nguyên ngẫu nhiên nằm trong khoảng từ [0,backoff_window(retry_count)].
Đầu tiên, DEV sẽ đợi trong khoảng BIFS kể từ khi môi trường truyền được cảm nhận là rỗi. Tại thời điểm bắt đầu CAP, DEV sẽ thực hiện thủ tục backoff sau khoảng SIFS và sau khi trao đổi xong Beacon. DEV sẽ chọn backoff_count là một số ngẫu nhiên trong [0, (7, 15, 31, 63)] và sẽ duy trì biến đếm này. Giá trị của biến này sẽ giảm khi môi trường là rỗi trong toàn bộ
khoảng thời gian pBackoffSlot. Giá trị retry_count sẽ được đặt là 0 cho lần truyền đầu tiên. Khi kênh truyền bận biến đếm sẽ giữ nguyên giá trị và khi môi trường rỗi trở lại, giá trị biến đếm sẽ giảm sau một khoảng thời gian SIFS. Khi biến đếm đạt giá trị 0, DEV có thể truyền khung của nó sau khoảng BIFS. Biến đếm vẫn có thể được giữ nguyên giá trị ngoài CAP. Giá trị của nó vẫn được duy trì từ siêu khung này sang siêu khung khác và nó không khởi tạo lại với mỗi Beacon.
Trong trường hợp DEV được truyền nhưng không đủ thời gian trong CAP để truyền khung thì biến đếm vẫn được giữ nguyên và sẽ được truyền lại sau khi kênh rỗi một khoảng BIFS. Nếu tổng thời gian thiết lập khi khung được đưa vào hàng đợi để truyền không đủ thì biến đếm sẽ được khởi tạo lại và việc truyền khung sẽ bị hủy. Khi một khung đã được truyền nhưng không nhận đúng báo nhận thì retry_count sẽ tăng nhưng sẽ không tăng quá giá trị 3 và giá trị biến đếm sẽ được đặt lại giá trị ngẫu nhiên trong [0, (7, 15, 31, 63)]. Nếu quá số lần thử lại cho phép đối với một khung thì thủ tục backoff sẽ được thực hiện lại từ đầu.
4.4.3.2 Truy cập kênh truyền trong CTAP
Kỹ thuật truy cập kênh truyền trong 802.15.3 là TDMA
PNC chia CTAP thành các CTA. Nếu một DEV được PNC dành cho một CTA riêng thì các DEV khác sẽ không được sử dụng CTA này nữa. DEV có CTA có thể có hoặc không sử dụng hết khoảng thời gian trong CTA. Việc lựa chọn luồng, các lệnh hay dữ liệu không đồng bộ để truyền trong CTA được quyết định cục bộ bởi DEV và phụ thuộc vào các khung đang chờ. Có 2 kiểu CTA:
- CTA động.
- CTA tựa tĩnh (pseudo-static CTA).
Kiểu của CTA được thông báo trong lệnh yêu cầu thời gian kênh. PNC có thể di chuyển các CTA động có trong siêu khung vào siêu khung khác bằng cách đơn giản là thay đổi biến CTA trong Beacon. CTA động có thể sử dụng cho cả luồng không đồng bộ và luồng đồng bộ.
Các CTA tựa tĩnh sẽ được chỉ định cho các luồng có thời gian truy cập bằng nhau. Nếu PNC cần thay đổi vị trí và khoảng cách của CTA tựa tĩnh thì nó sẽ thay đổi cả khối CTA tương ứng trong Beacon. PNC sẽ không tạo ra bất kỳ một CTA mới nào cho các luồng khác chồng lên khoảng thời gian cũ của CTA tựa tĩnh trong siêu khung.
CTA riêng là CTA mà các DEV giống nhau cả nguồn và đích. CTA riêng không sử dụng cho truyền thông trong piconet. Nó sử dụng để đặt trước thời gian kênh
cho các piconet khác sử dụng.Chẳng hạn, nó được sử dụng cho một piconet phụ thuộc. CTA riêng là một CTA tựa tĩnh. Một DEV muốn sử dụng CTA riêng nó sẽ sử dụng DEVID của chính nó cũng như SrcID và TrgtID trong lệnh yêu cầu thời gian kênh.
a) Sử dụng thời gian kênh trong CTA
Các DEV là thành viên của piconet sẽ sử dụng lệnh yêu cầu thời gian kênh khi chúng muốn thay đổi CTA của chúng. Khi nhận được lệnh này từ DEV, PNC sẽ ghi nhớ yêu cầu này cho đến khi nhận được lệnh yêu cầu thời gian kênh khác của DEV này. Các CTA trong CTAP sẽ dựa vào các yêu cầu đang chờ và thời gian kênh đang sẵn có trong CTAP.
Khi DEV nguồn có một khung để gửi cho một DEV đích, DEV sẽ gửi đi trong bất kỳ CTA nào dành cho DEV nguồn và DEV đích hoặc sử dụng CAP để truyền khung.
Nếu DEV không nhận được Beacon, nó sẽ truyền trong CAP hoặc trong bất kỳ MCTA nào hoặc trong CTA động. Các DEV có CTA tựa tĩnh sẽ được phép truyền khi số lượng Beacon bị mất liên tiếp nhỏ hơn hoặc bằng mMaxLostBeacons. Nếu DEV đích của CTA tựa tĩnh mất Beacon nó sẽ lắng nghe toàn bộ siêu khung.
Nếu một thiết bị muốn truyền từ lúc bắt đầu CTA đến lúc kết thúc CTA thì nó sẽ kiểm tra xem có đủ thời gian để truyền khung và một khoảng SIFS hay không. Nếu không đủ thời gian nó sẽ hủy truyền và không sử dụng CTA này nữa. Khi nhận được yêu cầu thời gian kênh của DEV, PNC sẽ phản hồi yêu cầu bằng lệnh phản hồi thời gian kênh.
4.5 Một số chức năng của tầng MAC
4.5.1 Quét kênh
Tất cả các thiết bị sẽ sử dụng kỹ thuật quét kênh bị động để phát hiện ra piconet đang hoạt động. Có nghĩa là, các thiết bị sẽ ở trong chế độ nhận đối với một chu kỳ thời gian trong một kênh. Ngoài việc quét kênh thông qua việc đối chiếu PNID và BSID có trong lệnh yêu câu quét kênh, các thiết bị còn sử dụng phương thức quét kênh mở, có nghĩa là các thiết bị sẽ quét kênh nhờ vào Beacon nhận được. Nếu quét mở được chỉ định trong MLME-SCAN.request thì DEV sẽ tìm bất cứ thông tin trong khung Beacon mà nó có để phục vụ cho việc quét kênh của nó. Nếu không được chỉ định, các thiết bị sẽ bỏ qua tất cả các khung nhận được mà không đúng giá trị PNID và BSID có trong yêu cầu. Hơn nữa, DEV đang tìm sẽ tập hợp thống kê trên mỗi một kênh được quét và lưu các thông tin tìm được vào một danh sách. Các thiết bị tìm các piconet bằng cách duyệt qua các kênh đã được đánh chỉ số và thông báo trong
MLMESCAN.request. Một thiết bị có thể tìm kênh theo thứ tự bất kỳ miễn sao trong mẫu tìm kiếm có kênh hợp lệ. Kết quả của việc tìm kiếm sẽ là các thông tin của piconet cha, piconet con, piconet hàng xóm bất kỳ và các piconet đã được phát hiện. Nó sẽ đưa ra một bảng tóm tắt đầy đủ cho mỗi kênh.
Trong quá trình tìm kênh, nếu thiết bị nhận được khung bất kỳ thì nó sẽ không rời khỏi kênh trong khoảng mMinChannelScan kể từ khi bắt đầu nhận khung đầu tiên đến khi chờ nhận Beacon từ PNC. Nếu DEV chỉ tìm được các khung nhưng không có Beacon thì nó sẽ thông báo ở trong MLME- SCAN.confirm. DEV đó sẽ quét tất cả các kênh được thông báo để tìm piconet trước khi trả lại thông tin quét kênh qua MLME-SCAN.confirm
Hình 4.17: Quá trình quét kênh
4.5.2 Khởi tạo Piconet
Để khởi tạo một piconet, một thiết bị có khả năng hoạt động như là PNC sẽ quét các kênh có sẵn để tìm một kênh chưa sử dụng. Khi nó tìm thấy một kênh rỗi, nó sẽ khởi tạo piconet bằng cách đơn giản là gửi Beacon sau khi đảm bảo chắc rằng kênh đó còn chỗ trống cho chu kỳ thời gian riêng. Nếu kênh không có sẵn, DEV sẽ chọn việc cố gắng trở thành piconet độc lập. Một DEV được chỉ thị để bắt đầu piconet thông qua MLME-START.request. Nó sẽ chỉ thử khởi tạo một piconet cho chính nó và sẽ không liên kết với piconet đã tồn tại. DME sẽ phải thực hiện thành công thủ tục quét kênh và chọn một kênh để bắt đầu khởi tại một piconet. DME sẽ chọn kênh có số lượng nhiễu ít nhất để bắt đầu một piconet dựa vào kết quả của ChannelRatingList trong MLME-