a) Phân mảnh
Việc xử lý để chia các MSDU hoặc MMPDU thành các khung nhỏ hơn được gọi là phân mảnh. Phân mảnh sẽ tạo ra những khung MPDU nhỏ hơn MSDU chính hay MMPDU, điều này sẽ tăng tính tin cậy và tăng xác suất truyền thành công MSDU hoặc MMPDU. Việc phân mảnh sẽ được thực hiện tại bên truyền. Quá trình kết hợp các MSDU đơn hay MMPDU đơn được gọi là hợp nhất các mảnh, công việc này sẽ được thực hiện tại bên nhận. Chỉ có các MPDU có địa chỉ bên nhận là unicast sẽ được phân mảnh, còn các khung Broadcast/Multicast sẽ không được phân mảnh thậm chí độ dài của nó vượt giá trị ngưỡng aFragmentationThreshold của một mảnh. Khi một MSDU được nhận trực tiếp từ tầng LLC hoặc MMPDU được nhận trực tiếp từ thực thể quản lý tầng MAC (MLME) có chiều dài lớn hơn ngưỡng aFragmentationThreshold của một mảnh thì nó sẽ được phân mảnh. MSDU, MMPDU sẽ được chia thành các MPDU, mỗi mảnh sẽ không lớn hơn giá trị ngưỡng.
Hình 2.16: Các phân mảnh
Mỗi mảnh sẽ được truyền đi một cách độc lập, tương ứng sẽ có một báo nhận. Độ dài của mỗi mảnh sẽ được tính bằng octet (byte) ngoại trừ mảnh cuối cùng, nó là một số chẵn byte và không bao giờ lớn hơn giá trị ngưỡng aFragmentationThreshold. Khi dữ liệu được truyền, số lượng byte trong phân mảnh sẽ được quyết định bởi aFragmentationThreshold và số lượng các byte trong MPDU sẽ được khai báo trong phân mảnh tại lúc mảnh được xây dựng lần đầu. Khi phân mảnh được truyền lần đầu tiên, nội dung thân khung và chiều dài sẽ cố định cho đến khi nó được phát thành công đến trạm đang trực tiếp nhận. Các trạm có thể nhận các phân mảnh với kích thước tùy ý. Nếu một mảnh được yêu cầu truyền lại nội dung thân khung thì kích thước còn lại được sửa trong khoảng thời gian sống của MSDU hoặc MMPDU tại trạm đó. Sau khi phân mảnh được truyền đi, nội dung và kích thước phân mảnh không được phép thay đổi để điều chỉnh giới hạn cận thời gian. Mỗi phân mảnh sẽ chứa trường Sequence Control, đây là trường gồm dãy số định danh phân mảnh và số phân mảnh. Khi một trạm đang truyền một MSDU hay MMPDU, dãy số định danh của các phân mảnh của MSDU hoặc MMPDU đó sẽ giống nhau.
Các mảnh sẽ được gửi đi theo thứ tự từ số phân mảnh nhỏ nhất đến số phân mảnh lớn nhất. Giá trị của số phân mảnh sẽ bắt đầu từ 0 và tăng thêm 1 cho mỗi phân mảnh gửi thành công. Trường Frame Control cũng chứa một bit, đó là bit More Fragments được đặt là 0 để thông báo rằng đây là phân mảnh cuối cùng của MSDU hoặc của MMPDU. Trạm nguồn sẽ duy trì đồng hồ truyền MSDU cho mỗi MSDU đang truyền. Thuộc tính aMaxTransmitMSDULifetime sẽ cho biết thời gian tối đa cho phép truyền một MSDU. Đồng hồ sẽ đếm bắt đầu từ lúc thử truyền phân mảnh đầu tiên của MSDU. Nếu đồng hồ đạt đến aMaxTransmit- MSDULifetime thì các phân mảnh còn lại sẽ bị loại bỏ và trạm nguồn sẽ không có gắng để hoàn thành việc truyền MSDU.
b) Hợp nhất các mảnh
Mỗi phân mảnh chứa những thông tin cho phép hoàn thành việc hợp nhất các mảnh tạo thành MSDU hoặc MMPDU. Trong phần đầu của mỗi phân mảnh chứa những thông tin sau được sử dụng để hợp nhất các mảnh:
- Kiểu khung
- Địa chỉ bên gửi, lấy được từ trường Address2. - Địa chỉ đích.
- Trường Sequence Control: Trường này cho biết các phân mảnh thuộc
cùng một mảnh. Số của phân mảnh cho biết thứ tự của các phân mảnh. - Bít More Fragments.
Tất cả các trạm sẽ hỗ trợ việc nhận đồng thời ít nhất là 3 phân mảnh của cùng một MSDU hoặc của cùng một MMPDU. Trạm đích sẽ duy trì một đồng hồ nhận cho mỗi MSDU hay MMPDU nhận được. Một thuộc tính cho biết thời gian tối đa để nhận một MSDU đó là aMaxReceiveLifetime. Khi đồng hồ vượt quá giá trị thuộc tính này, tất cả các phân mảnh sẽ bị từ chối nhận. Hơn nữa, các phân mảnh của MSDU hay MMPDU trực tiếp được nhận sau khi thời gian đã vượt qua ngưỡng sẽ được báo nhận và từ chối. Để hợp nhất các mảnh đúng, trạm đích sẽ từ chối các phân mảnh bị lặp. Tuy nhiên đối với các phân mảnh lặp của MSDU trực tiếp sẽ được báo nhận để thông báo rằng các phân mảnh đã bị lặp.