4.3.1 Cấu trúc chung
Mỗi khung MAC gồm các thành phần cơ bản như sau: - Phần tiêu đề khung (MAC header)
- Phần thân khung (MAC frame body)
Hình 4.2: Cấu trúc tiêu đề và thân khung MAC
- Trường Frame control
Gồm 2 byte và có cấu trúc như sau:
Hình 4.3: Cấu trúc trƣờng điều khiển khung
- Trường con Protocol Version là trường có kích thước không đổi trường này mô tả phiên bản giao thức đang sử dụng. Trong chuẩn 802.15.3, trường này có giá trị là 0b000.
- Trường con Frame type: Mô tả kiểu khung sẽ được gửi. Bảng dưới đây miêu tả giá trị của trường này:
- Trường con SEC: Có độ dài là 1 bit. Trường này sẽ được đặt là 1 nếu thân khung được bảo vệ bằng một khóa riêng là security ID (SECID). Trong các trường hợp ngược lại nó có gá trị là 0.
- Trường con ACK Policy có độ dài là 2 bit, trường này được sử dụng để thông báo kiểu thủ tục báo nhận, giá trị của nó như sau:
- bit Retry: sẽ được đặt là 1 nếu khung là khung dữ liệu hoặc khung lệnh được phát lại.
- Bít More Data sẽ được đặt là 0 nếu DEV không sử dụng phần còn lại của thời gian kênh trong CTA. Bít này cũng được đặt là 0 trong khung cuối cùng của khung Beacon mở rộng.
- Trường Piconet ID (PNID)
Trường này chứa định danh của piconet, nó sẽ được đặt là định danh của piconet hiện tại và nó được sử dụng để định danh các khung từ các thiết bị trong piconet.
- Trường SrcID and DestID
Hai trường này là hai trường thông báo định danh của thiết bị nguồn và thiết bị đích. Định danh của thiết bị được định nghĩa bởi PNC trong quá trình kết nạp thiết bị và giá trị đó là duy nhất.
- Giá trị 0x000 sẽ được đặt trước cho PNC
- Giá trị từ 0xED đến 0xF6 để dành sử dụng trong tương lai.
- 0xF7, 0xF8, 0xF9, 0xFA, 0xFB hoặc 0xFC sẽ được sử dụng cho piconet hàng xóm.
- Giá trị 0xFD sẽ đặt trước cho các khung multicast.
- Giá trị 0xFE sẽ được đặt cho các thiết bị chưa kết nạp cho đến khi PNC chỉ định giá trị mới.
- Giá trị 0xFF sẽ được đặt cho các khung broadcast.
- Trường Fragmentation Control
Trường này có độ dài là 3 byte. Được sử dụng để điều khiển phân mảnh khung dữ liệu. Cấu trúc của trường này như sau:
Hình 4.4: Cấu trúc trƣờng điều khiển phân mảnh
- Trường MSDU number: Được sử dụng để thông báo số MSDU hiện tại hoặc khung lệnh hiện tại. Khi mỗi thiết bị khởi tạo giá trị này sẽ được đặt là 0. Đối với khung dữ liệu thì giá trị truờng này sẽ được duy trì theo bộ đếm Modulo 512 cho mỗi luồng dữ liệu đồng bộ.
- Trường Fragment Number: Được sử dụng để thông báo thứ tự của mảnh hiện tại của MSDU. Trường này có giá trị là 0 trong tất cả các khung không phân mảnh.
- Trường Last Fragment Number: Cho biết tổng số phân mảnh của MSDU, giá trị trường này sẽ giống nhau trong tất cả các phân mảnh và được đặt lại giá trị 0 đối với các khung không phân mảnh.
- Trường Stream index
Trường này dùng để định danh các luồng dữ liệu dùng cho DEV. Một số giá trị đặt trước của trường này:
— 0x00: Sử dụng cho dữ liệu không đồng bộ. — 0xFD: Sử dụng cho luồng MCTA.
— 0xFE: Sử dụng cho các luồng chưa đăng ký.
- Cấu trúc thân khung MAC + Tải của khung
Tải của khung là trường chứa các thông tin được truyền đến một DEV hoặc một nhóm DEV trong piconet. Chiều dài của trường này có thể thay đổi.
Trường FCS là trường kiểm tra khung MAC, trường này chứa mã dư vòng 32 bit, trường này chỉ tính cho phần tải của thân khung, sử dụng hàm chuẩn bậc 32:
4.3.2 Cấu trúc khung Beacon
4.3.2.1 Khung Beacon không bảo mật
Khung này có cấu trúc như sau:
Hình 4.5: Cấu trúc khung beacon
a) Cấu trúc của mỗi IE ( Information Element) như sau:
Hình 4.7: Cấu trúc của Information Element
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.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