Trong WFQ (hình 2.8), các gói tin tới hàng đợi đƣợc phân thành các luồng theo từng mức ƣu tiên, mỗi luồng đƣợc xếp vào một hàng đợi đợi riêng và sẽ nhận đƣợc một dịch vụ khác nhau. Cũng nhƣ cơ chế Round Robin, bộ lập lịch của server cũng phục vụ các lớp theo vòng, từ lớp 1, lớp 2, rồi lớp 3, v.v.. Tuy nhiên, WFQ khác RR ở chỗ, một lớp sẽ nhận đƣợc một lƣợng dịch vụ khác nhau trong mỗi lần phục vụ, tuỳ theo trọng số của lớp đó. Cụ thể, giả sử mỗi luồng i, đƣợc gán cho một
n i j i w w 1 ) ( /
trọng số wi. Trong mỗi khoảng thời gian phục vụ, lớp i sẽ nhận đƣợc một lƣợng dịch vụ bằng tổng dung lƣợng đƣờng truyền, với n là tổng số luồng có gói tin đang chờ. Gọi C là dung lƣợng kênh truyền ra, khi đó mỗi luồng i sẽ đƣợc ít nhất
C* băng thông trong mỗi lần phục vụ [18].
Có nhiều cách xác định trọng số cho mỗi luồng trong cơ chế WFQ. Sau đây chúng tôi xin trình bày cách một cách, cách này đã đƣợc áp dụng trong các router của Cisco [13]. Trong đó, việc tính trọng số của một luồng dựa trên giá trị các bit ƣu tiên (IP precedence bits) của trƣờng ToS (Type of Service) trong cấu trúc gói tin IPv4 của các gói tin trong luồng (hình 2.9). Đó là ba bit bên trái nhất của trƣờng ToS. Các bit này đƣợc tổ hợp để cung cấp các mức ƣu tiên từ 0 đến 5 (các mức 6 và 7 đƣợc dành riêng và không đƣợc phép sử dụng), nhƣ vậy ta có thể phân đƣợc 6 luồng khác nhau. Hình 2.9: IP Precedence bits Hình 2.8: Cơ chế WFQ n i j i w w 1 ) ( /
Vì mỗi luồng là một tập hợp các gói tin có cùng mức ƣu tiên, nên có thể gán trọng số của mỗi luồng bằng giá trị mức ƣu tiên này. Luồng có mức ƣu tiên cao hơn thì đƣợc cấp phát băng thông nhiều hơn, chúng sẽ đƣợc phục vụ nhiều hơn, thời gian đáp ứng nhanh hơn khi có tắc nghẽn xảy ra. Để rõ hơn chúng ta xét ví dụ sau: Giả sử có 6 mức ƣu tiên (IP precedence = 0 5) và mỗi luồng một mức ƣu tiên, mỗi luồng sẽ chiếm một phần băng thông bằng (IP precedence + 1) / (tổng dung lƣợng của cả đƣờng truyền). Tổng dung lƣợng đƣờng truyền là:
1 + 2 + 3 + 4 + 5 + 6 = 21
Các luồng sẽ lần lƣợt nhận đƣợc 1/21, 2/21, 3/21, 4/21, 5/21, 6/21 tổng dung lƣợng đƣờng truyền.
Nếu ở mức ƣu tiên 2 ta có 8 luồng, các luồng còn lại nhƣ trên, khi đó, tổng dung lƣợng đƣờng truyền là:
1 + 2 + 8*3 + 4 + 5 + 6 = 21 + 24 – 3 = 42
các luồng lần lƣợt nhận đƣợc 1/42, 2/42, 3/42, 4/42, 5/42, 6/42 dung lƣợng đƣờng truyền, trong đó mỗi một trong số 8 luồng có mức ƣu tiên 2 sẽ nhận đƣợc xấp xỉ 3/42 dung lƣợng đƣờng truyền.
Nhƣ vậy chúng ta có thể thấy WFQ thực hiện việc phân phối dải thông một cách công bằng cho các luồng lƣu lƣợng theo mức độ ƣu tiên của chúng. Ta nói rằng WFQ đảm bảo chất lƣợng dịch vụ có phân loại (hay là QoS mềm nhƣ đã đề cập trong phần 1.3.2). Trên thực tế, WFQ đƣợc dùng cho những trƣờng hợp yêu cầu thời gian đáp ứng nhất quán cho mạng khi tải nhẹ cũng nhƣ khi tải nặng mà không cần bổ sung băng thông. WFQ đảm bảo cho các hàng đợi không bị “đói” (starve) băng thông, tức là nó bao giờ cũng cung cấp một lƣợng băng thông nhất định cho các gói tin đến chờ, và dịch vụ cung cấp cho mỗi luồng là có thể dự đoán trƣớc đƣợc.
Mặt khác, WFQ hiệu quả trong việc tận dụng dải thông để cung cấp cho các luồng lƣu lƣợng tốc độ thấp khi các luồng tốc độ cao đã đƣợc phục vụ xong. Đây là một ƣu điểm của WFQ so với các hệ thống dồn kênh phân chia thời gian TDM
(Time Division Multiplexing) - chỉ đơn giản chia nhỏ băng thông và cấp cho các luồng, và mỗi phần băng thông đó sẽ không đƣợc sử dụng nếu không có lƣu lƣợng đi qua. WFQ cũng có thể đƣợc kết hợp với giao thức đặt trƣớc tài nguyên (RSVP - Resource Reservation Protocol) [13], để cung cấp QoS đảm bảo chất lƣợng (hay QoS cứng, xem phần 1.3.2).