CHƯƠNG 3: THIẾT KẾ HỆ THỐNG
3.3 Thiết kế lớp MAC
Mạng xe cộ hỗ trợ giao tiếp giữa xe với xe (V2V) và xe với cơ sở hạ tầng (V2I) nói chung. Việc triển khai lớp MAC sẽ có thể đáp ứng được tất cả các chế độ liên lạc. Ví
dụ: sau khi nhận được khung từ các nút khác, lớp MAC sẽ tìm hiểu xem khung đó có đến từ một phương tiện hoặc cơ sở hạ tầng ngang hàng khác hay không. Ngoài ra, lớp MAC cũng nên kiểm tra loại khung nhận được, tức là phát sóng, phát đa hướng hoặc
đơn hướng và chuẩn bị cho ACK sang các khung loại đơn hướng trong truyền dữ liệu đáng tin cậy (RDT)
Một điểm khác biệt cơ bản của IEEE 802.11p khi so sánh với các loại mạng IEEE
802.11 khác là việc sử dụng EDCA cho mục đích Chất lượng dịch vụ (QoS). Các khung khác nhau được cấp với mức độ ưu tiên khác nhau. Tám mức độ ưu tiên được xác định và có thể được đặt trong bốn Danh mục truy cập (AC) có thể có: AC0, AC1, AC2 AC3.
Mỗi khung hình được ứng dụng đã tạo thông báo gán một trong các mô tả AC tùy thuộc vào tầm quan trọng và mức độ khẩn cấp của nội dung. Cụ thể, AC0 biểu thị quyền truy
cập thường xuyên, AC1 dành cho lưu lượng truy cập nền không trước đó, trong khi AC2 và AC3 dành cho các thông báo được ưu tiên, ví dụ: các thông báo an toàn quan trọng.
Các kênh IEEE 802.11 đều dựa trên sự cạnh tranh, trong đó tất cả các nút cần cạnh tranh với nhau để truy cập kênh. Trong quá trình tranh chấp, dữ liệu phải đợi trong một khoảng thời gian ngẫu nhiên trước khi truyền, được gọi là trì hoãn truy cập. Quy trình truy cập trì hoãn bao gồm Khoảng cách giữa các khung trọng tài (AIFS), thay thế cho Khoảng cách giữa các khung của chức năng phối hợp phân tán (DCF) (DIFS) và khoảng
thời gian chờ, được tính toán dựa trên giá trị cửa sổ tranh chấp (CW). Sau khi cảm nhận được môi trường bận, nút sẽ đợi một khoảng thời gian AIFS trước khi cảm nhận lại kênh. Nếu kênh không hoạt động, nút sẽ bắt đầu lùi lại, nếu không nút đó phải đợi một
khoảng thời gian AIFS khác. Trong thời gian chờ, nút tiếp tục theo dõi trạng thái kênh.
Trong trường hợp phát hiện thấy kênh bận, nút sẽ ngay lập tức tạm dừng quá trình chờ
và khởi động lại bước cảm biến kênh AIFS. Nói tóm lại, cả AIFS và backoff đều xác định khoảng thời gian chờ cho một nút trước khi truy cập kênh.
Trong EDCA, các AC quyết định các cặp (AIFS, backoff) khác nhau. Do đó, các khung có mức độ ưu tiên khác nhau sẽ có thời gian truy cập trì hoãn khác nhau. Nói chung, mức độ ưu tiên càng cao thì thời gian trì hoãn càng ngắn và ngược lại. Mục đích thiết kế của EDCA là cho phép các khung có mức độ ưu tiên cao hơn có thể truy cập kênh thường xuyên hơn.
Hình 3.3 Lớp MAC gửi đến: Luồng dữ liệu từ PHY đến lớp APP. Bỏ thực thể khung bị hỏng hoặc trích xuất tải trọng từ khung nguyên vẹn và gửi đến lớp APP.
Đối với luồng vào như trong Hình 3.3, dạng sóng được nhận từ kênh không dây của lớp PHY. Bộ thu (Rx) của lớp PHY được tích hợp trong lớp MAC DES. Khi nhận được dạng sóng, Rx sẽ thực hiện một loạt kiểm tra theo thứ tự.
1. CRC: kiểm tra xem dạng sóng nhận được có bị hỏng hay không. Nếu nó bị hỏng, dạng sóng sẽ bị hủy bởi obj.eventDestroy. Nếu dạng sóng còn nguyên vẹn, hãy bắt đầu kiểm tra tiếp theo.
2. Kiểm tra nguồn và đích: Trong giao tiếp V2X, nút mạng có thể là phương tiện hoặc cơ sở hạ tầng. Khi một nút mạng nhận được dạng sóng, nó sẽ kiểm tra xem dạng sóng đó có được gửi đến nút phương tiện hoặc nút cơ sở hạ tầng hay không. Sau đó, nó sẽ kiểm tra xem dạng sóng có phải là từ cơ sở hạ tầng hoặc phương tiện hay không. Hành vi này được thực hiện bằng cách kiểm tra các trường fromDS/toDS trong tiêu đề dạng sóng.
Giao tiếp không dây là một chương trình phát sóng vật lý, tức là một phương tiện có thể nhận được nhiều dạng sóng được chỉ định cho cơ sở hạ tầng. Tương tự, cơ sở hạ tầng có thể nhận được nhiều dạng sóng được chỉ định cho một nút phương tiện. Hơn nữa, trong môi trường giao tiếp V2X nhiều bước nhảy, dạng sóng có thể truyền qua một số
nút (phương tiện hoặc cơ sở hạ tầng) trước khi đến nút đích. FromDS/toDS chỉ mất 1 bit (2 bit cho cả hai) trong trường trình nghe dạng sóng. Kiểm tra FromDS/toDS là rào cản đầu tiên để lọc lượng lớn dạng sóng không liên quan. Tất cả các dạng sóng không liên quan này sẽ bị hủy ngay lập tức mà không cần xem xét thêm các thông tin khác với chi phí tài nguyên máy tính nhỏ.
3. Kiểm tra địa chỉ: Rx sẽ phát hiện xem dạng sóng nhận được có đến nút bên phải hay không bằng cách kiểm tra địa chỉ đích (dstAddress). DstAddress cho biết dạng sóng này là dạng sóng phát sóng, multicast hay unicast. Nếu đó là dạng sóng unicast thì địa chỉ
nguồn (srcAddress) được sử dụng để chuẩn bị cho ACK. IEEE 802.11 xác định 4 trường địa chỉ trong tiêu đề, nhưng ba trong số đó thực sự được sử dụng trong các mạng xe cộ.
Sự kết hợp giữa ToDS/FromDS và các trường địa chỉ có thể đảm bảo dạng sóng cuối
cùng có thể được gửi đến đúng mục tiêu với chi phí tài nguyên tối thiểu. Các trường ToDS/FromDS và địa chỉ được hiển thị trong Bảng 3.1, trong đó DA đề cập đến địa chỉ đích và SA đề cập đến địa chỉ nguồn. BSSID đề cập đến ID bộ dịch vụ cơ bản và có thể được sử dụng để xác định các WBSS khác nhau. Vì mạng phương tiện có thể hoạt động ở chế độ 'bên ngoài bối cảnh của BSS (OCB)' nên BSSID không bắt buộc.
4. Kiểm tra loại dữ liệu: Loại dạng sóng có thể là dữ liệu hoặc ACK. Nếu đó là ACK, lớp MAC cần đảm bảo rằng đó có phải là ACK hợp lệ hay không vì có thể nhận được nhiều ACK cho cùng một dữ liệu do tắc nghẽn kênh. Nếu đó là dạng sóng kiểu dữ liệu, lớp MAC sẽ trích xuất tải trọng và gửi đến lớp APP. Nếu đó là dạng sóng RDT, tức là cần có ACK, lớp MAC sẽ tạo ACK tương ứng và gửi đến lớp PHY.
Mã một phần của các hành vi Rx được đề cập ở trên được liệt kê bên dưới:
[status,outframe,typeField,subtype]=waveform2psdu(waveform.Body);
if status==1 %Received correctly if (ToDS==0 && FromDS==0 && ismember(obj.txAddr,rcvAddress))... %
→ V2V unicast packet
|| (ToDS==0 && FromDS==0 && Address1==0 && Address2~=obj.txAddr)...
→ % V2V broadcast packet
|| (ToDS==0 && FromDS==1 && Address1==0 && Address2==obj.
→ infraAddress && Address3~=obj.txAddr)... %V2I broadcast
|| (ToDS==0 && FromDS==1 && Address1==obj.txAddr && Address2==obj.
→ infraAddress && Address3~=obj.txAddr) %V2I unicast packet
switch typeField case 1 % Rcv ACK: type -> 1 subtype -> 13
...
case 2 % Rcv data: type -> 2 ...
end else % Invalid ToDS/FromDS/Address events=obj.eventDestroy();
end elseif status==0 % Corrupted events=obj.eventDestroy();
end