WFQ là kĩ thuật hàng đợi mặc định trong router Cisco, nó khác với các hàng đợi PQ và FIFO ở các điểm sau:
- Nó không cho phép cấu hình phân loại, WFQ phân loại gói tin theo flow, một flow bao gồm nhiều gói tin có cùng đích đến và cùng nguồn, cùng port đích và port nguồn. Sẽ không có cấu hình nào rõ rang cho nó.
- Tính năng lập lịch: WFQ dựa vào flow, do vậy những flow nào có độ ưu tiên cao hơn thì sẽ được phát trước.
- Mỗi flow là một hàng đợi, vì vậy số hàng đợi trong WFQ có thể lên tới 4096 hàng đợi lớn hơn rất nhiều so với PQ hay FIFO.
Với WFQ ta có tối đa là 4096 hàng đợi trong 1 interface của router, số hàng đợi này cũng chính là số flow chảy vào router. Ví dụ: ta có 5 flow là Voice, 2 kết nối HTTP, 2 kết nối FTP thì khi đó ta sẽ có 5 hàng đợi trong router, như vậy số hàng đợi thay đổi theo số flow, chúng không cố định như trong các kĩ thuật khác
Hoạt động của WFQ như sau:
Hình 3.7: Tiến trình gởi gói tin của WFQ.
+ Khi gói tin vào interface, nó sẽ được phân loại thành các flow theo 5 thông số:
- IP source - IP destination - Port source - Port destination
- Giao thức lớp 4 nó sử dụng là gì (TCP hay UDP)
WFQ dựa vào các trường như DSCP, ToS để phân loại gói tin và đưa nó vào các hàng đợi khác nhau. Những gói tin có IP precedent hay DSCP cao hơn sẽ có mức ưu tiên cao hơn.
Hai vấn đề quan trọng trong WFQ đó là :
- Đối xử công bằng với tất cả các flow đang tồn tại : Giả sử ta có băng thông là 128 kbps và có 10 hàng đợi đang tồn tại, mỗi hàng đợi sẽ nhận được băng thông là 12.8 kbps. Nều số hàng đợi là 100 thì mỗi hàng đợi sẽ nhận băng thông là 1.28 kbps. Một vấn đề tồn tại ở đây là sự quá công bằng của WFQ, giả
- Sử trong số 10 hàng đợi trên hàng đợi thứ 1 cần băng thông là 5 kbps và hàng đợi thứ 2 cần băng thông là 30 kbps, nhưng vì WFQ chỉ cấp băng thông cho mỗi hàng đợi
là 12.8 kbps, như vậy hàng đợi thứ 1 dư băng thông nó sẽ luôn được phục vụ tốt nhất, nghĩa là low delay, low jitter, low loss vì số gói tin trong hàng đợi của nó lúc nào cùng rất ít. Với hàng đợi thứ 2 thiếu băng thông vì vậy delay, jitter và loss của nó sẽ rất lớn.
- Cung cấp thêm băng thông cho những flow có mức ưu tiên cao hơn (higher IP precedent hay higher DSCP) : Vẫn với giả sử trên 128 kbps cho 10 flow. Bây giờ giả sử có 5 flow với IP precedent bằng 0, và 5 flow với IP precedent bằng 1, 5 flow IP precedent 1 có mức ưu tiên cao hơn 5 flow IP precedent 0 theo đó tỉ số băng thông phân phối là 2:1, flow IP precedent 1 sẽ nhận băng thông là 17 kbps gấp đôi flow IP precedent 0 là 8.5 kbps, cách tính tỉ số này như sau:
BW cho IP precedent 1BW cho IP precedent 0 = 1+1 0+1=2
1
+ Sau khi được phân loại gói tin sẽ được tính giá trị SN (Sequence number) như sau:
SN = SN (trước đó) + Weight*length SN : Sequence number
Weight : trọng số của gói tin , Weight=32384 / (IP_Precedence+1) Length : Chiều dài gói tin
Bảng giá trị của Weight:
Bảng 2.5: Bảng giá trị Weight
Ví dụ: Với gói tin có SN trước đó là 0, chiều dài là 1500 byte và precedent là 0 ta sẽ tính SN như sau:
SN = 0 + 1500*32384 = 48576000
- Sau đó quyết định có drop gói tin hay không dựa vào 2 thông số (còn gọi là Tail drop):
- Hold-queue: Nếu gói tin là này là gói mà làm vượt mức hold-queue (tổng số gói tin trong tất cả các hàng đơi) thì nó sẽ bị drop.
- CDT: (Congestion discard threshold) là số gói tin tối đa trong một hàng đợi, giá trị này có thể cấu hình cho phép từ 1 đến 4096.
+ Khi nằm trong hàng đợi các gói tin sẽ được lập lịch (scheduler logic), quá trình lập lịch dựa vào SN của gói tin, precedent và volume (Số gói tin đang có trong một hàng đợi).
- Những gói tin có SN càng nhỏ, precedent càng lớn, và volume càng nhỏ sẽ được chọn forward trước.
- Thứ tự ưu tiên như sau: Đầu tiên là SN, sau đó là precedent, và cuối cùng là volume.