Các gói được phân loại dựa trên các tiêu chuẩn phân loại của người sử dụng, và được đặt ở một trong số các hàng đợi đầu ra với các độ ưu tiên: độ ưu tiên cao, trung góisGói tin đến Hàng đợi 1
Gói tin đi
Link
Hàng đợi 2 Phân loại
bình, bình thường (không được ưu tiên), ưu tiên thấp. Các gói không được ấn định độ ưu tiên sẽ được đưa tới các hàng đợi bình thường. Khi các gói được gửi tới giao diện đầu ra, các hàng đợi ưu tiên tại giao diện đó được quét các gói theo thứ tự độ ưu tiên giảm dần. Hàng đợi có độ ưu tiên cao nhất được quét đầu tiên, sau đó đến các hàng đợi trung bình và tiếp tục các hàng đợi có độ ưu tiên khác. Gói đứng đầu hàng đợi có độ ưu tiên cao nhất được truyền đầu tiên. Thủ tục này được lặp lại mỗi khi có một gói được truyền. Chiều dài lớn nhất của hàng đợi được định nghĩa theo chiều dài giới hạn. Khi một hàng đợi dài hơn chiều dài hàng đợi giới hạn thì các gói đến sau sẽ bị loại bỏ.
PQ thường được dùng cho các interface băng thông thấp ở đó ta muốn gán mức ưu tiên tuyệt đối cho ứng dụng hay traffic trọng yếu. Mặc dù PQ là cách tiếp cận lập lịch đơn giản nhưng nó có thể gây thiếu hụt băng thông nghiêm trọng cho các luồng có độ ưu tiên thấp. PQ có thể dành hết băng thông cho các luồng có độ ưu tiên cao và dẫn tới việc các luồng có độ ưu tiên thấp không bao giờ được phục vụ. Hiện nay PQ thường được cấu hình tĩnh và không được tùy chỉnh theo sự thay đổi của mạng.
2.1.3. Chiến lược Packet-Based Round Robin
Tương tự như chiến lược PQ đã trình bày ở phần trước. Chiến lược này cũng dựa vào việc phân loại các gói tin đến theo từng luồng khác nhau mỗi luồng được xếp vào một hàng đợi và được phục vụ lần lượt theo vòng. Tuy nhiên thay vì phục vụ theo mức ưu tiền thì PBRR lại phục vụ lần lượt quay vòng từng hàng đợi, mỗi hàng đợi chỉ phục vụ 1 gói tin. Nếu hàng đợi nào rỗng thì bộ lập lịch sẽ bỏ qua không phục vụ.
Hình 2.3: Cơ chế phục vụ hàng đợi PBRR(Packet-Based Round Robin)
Bộ lập lịch PBRR sẽ đối xử với các luồng dữ liệu giống nhau, nghĩa là không có mức độ ưu tiên dành cho các luồng có mức ưu tiên cao và nó cũng không quan tâm đến độ dài hàng đợi hiện tại khiến cho những luồng có hàng đợi dài chứa nhiều gói tin cũng chỉ được cấp cho một lượng băng thông giống như các luồng khác. Làm giảm hiệu suất sử dụng đường truyền. Không đáp ứng được băng thông cho các luồng dữ liệu multimedia.
2.1.4. Bộ lập lịch lý tưởng GPS - Generalized Processor Sharing
Ý tưởng của GPS là trong mỗi khoảng thời gian hữu hạn phải thăm mỗi hàng đợi ít nhất một lần, phục vụ cho một lượng rất nhỏ dữ liệu từ mỗi hàng đợi. Khoảng thời gian và lượng dữ liệu này đủ nhỏ để có thể giả định rằng máy phục vụ (server) có thể phục vụ được tất cả các luồng có gói tin đang chờ một cách đồng thời và các luồng có thể được chia nhỏ tuỳ ý. Đây là một cơ chế lý tưởng vì nó đảm bảo sự phân chia công bằng nhất dành cho các luồng dữ liệu. Tuy nhiên việc cài đặt GPS trong thực tế là không thực hiện được vì trong 1 khoảng thời gian thì server chỉ có thể phục vụ 1 hàng đợi thay vì tất cả các hàng đợi của các luồng dữ liệu và độ dài kích thước gói tin là cố định không thế chia nhỏ tùy ý, gói tin này được phục vụ xong thì gói tin khác mới được phục vụ.
góisGói tin đến
Hàng đợi 1
Gói tin đi
Link
Hàng đợi 3 Phân loại Hàng đợi 2
Cài đặt đơn giản nhất của GPS là chiến lược Weighted Round Robin (WRR),
thay vì thăm mỗi hàng đợi ít nhất một lần và phục vụ một lượng nhỏ dữ liệu tại hàng đợi như GPS thì WRR lại phục vụ một số gói tin tại từng hàng đợi, số gói tin được phục vụ tại từng hàng đợi phụ thuộc vào trong số “Weight” của hàng đợi đó. Trong kiến trúc DiffServ có thể phân biệt các hàng đợi này thông qua giá trị trường DS trong gói tin IP.
Một biến thể của WRR là Weighted Interleaved Round Robin (WIRR) về cơ
bản thì chiến lược này giống với WRR nhưng có thêm một cơ chế “Interleaved behavior”. Cơ chế này cho phép bộ lập lịch bỏ qua các hàng đợi không có gói tinmột khoảng thời gian mà bộ lập lịch phải phục vụ hàng đợi đó.
2.1.5. Chiến lược Flow-Based Weighted Fair Queuing (WFQ)
Các chiến lược đã nói trong phần trước đều dựa trên packet-base nghĩa là nó áp dụng cho từng gói tin theo đó mỗi lần phục vụ server sẽ chọn 1 gói tin theo mức độ ưu tiên của nó. Ưu điểm của chiến lược này nó đạt được mức độ công bằng cao cho các gói tin nhưng lại chứa nhiều điểm hạn chế: Thứ nhất là chi phí gán nhãn cho từng gói tin là lớn và làm gia tăng độ phức tạp thuật toán và tiêu tốn tài nguyên của server. Thứ 2 là các gói tin của cùng 1 luồng sẽ không được phụ vụ cùng 1 lúc mà bị gián đoạn bởi các gói tin của các luồng khác, điều này không phù hợp với các ứng dụng truyền thông đa phương tiện thời gian thực trên Internet cần độ liền mạch các gói tin. Chính vì lẽ đó ta cần 1 cách tiếp cận hay 1 chiến lược khác là việc xác định và gán độ ưu tiên cho một luồng dữ liệu thay vì 1 gói tin riêng lẻ. Các gói tin trong cùng 1 luồng dữ liệu sẽ có cùng 1 độ ưu tiên và được phục vụ liên tục. Server sẽ phục vụ các luồng theo tứ tự ưu tiên hoặc trọng số, các gói tin trong cùng 1 luống sẽ được phục vụ theo cơ chế FIFO nghĩa là gói tin nào đến trước được phục vụ trước. Chiến lược này được gọi là Flow- Base Weighted Fair Queuing.
Trong chiến lược WFQ này khi các gói tin tới hàng đợi sẽ được phân chia thành các luồng theo từng mức ưu tiên khác nhau. Mỗi luồng sẽ được xếp vào 1 hàng đợi riêng và nhận được 1 lượng phục vụ tùy theo trọng số của hàng đợi đó.
Hình 2.4: Cơ chế WFQ
Giả sử mỗi luồng i được gán 1 trọng số . Trong khoảng thời gian phục vụ lớp i
sẽ nhận được một lượng phục vụ là: / ∑ ( ) tổng dung lượng đường truyền trong đó:
n là tổng số luồng có gói tin đang chờ C là tổng dung lượng đường truyền
Luồng i sẽ nhận được ∗ (∑ ( )) băng thông mỗi lần phục vụ
Có nhiều cách xác định trọng số cho từng luồng WFQ, một trong những cách được sử dụng phổ biến nhất là sử dụng các bit ưu tiên (IP precedence bits) của trường TOS (Type of Services) trong header packet ipv4. Đó là 3 bit bên trái nhất của trường TOS. Tổ hợp của 3 bit này tạo nên 6 mức ưu tiên từ 0 – 5, các mức 7, 8 được dành riêng và không được phép sử dụng. Như vậy dựa vào các bit trên ta có thể phân chia thành 6 luồng khác nhau với các mức ưu tiên.
Giả sử chúng ta có 6 luồng với 6 mức ưu tiên khác nhau (IP precedence = 0 ÷ 5), mỗi luồng sẽ chiếm 1 lượng băng thông đường truyền là (IP precedence + 1)/(tổng dung lượng đường truyền).
Tổng dung lượng đường truyền là:
1 + 2 +3 + 4 + 5 + 6 = 21
góisGói tin đến
Hàng đợi 1
Gói tin đi
Link
Hàng đợi 3 Phân loại Hàng đợi 2
Các luồng sẽ nhận được lần lượt là 1/21, 2/21, 3/21, 4/21, 5/21, 6/21 dung lượng đường truyền.
Hình 2.5: IP Precedence bits
Như vậy có thể thấy rằng WFQ thực hiện phân phối dải thông đường truyền một cách công bằng cho các luồng dữ liệu dựa vào mức ưu tiên của chúng. Có thể nó rằng WFQ đảm bảo được chất lượng dịch vụ có phân loại hay còn gọi là QoS mềm. Trên thực tế WFQ thường được dùng trong trường hợp mạng yêu cầu thời gian đáp ứng nhất quán khi tải nặng cũng như khi tải nhẹ trong khi băng thông không thay đổi. Nó đảm bảo cho hàng đợi lúc nào cũng có băng thông và lượng dịch vụ dành cho mỗi luồng là có thể dự đoán trước được.
WFQ còn có thể được kết hợp với giao thức đặt trước tài nguyên RSPV - Resource Reservation Protocol để cung cấp QoS cứng.
2.1.6. Chiến lược Class-Based Weighted Fair Queuing (CBQ)
Không giống như WFQ, CBQ được thiết kế nhằm đảm bảo băng thông cho các lớp lưu lượng do người dùng đặt trước mà vẫn đảm bảo phân phối công bằng cho các luồng trong lớp đó. CBQ cung cấp nhiều hàng đợi riêng biệt, mỗi hàng đợi có thể phân chia thành nhiều lớp, các luồng này có thể được xác định dựa vào các tiêu chi như giao thức (FTP, HTTP, Telnet, SSh..) hoặc danh sách điều khiển truy cập (Access list). Các gói tin thỏa mãn các tiêu chí được xếp chung vào 1 lớp
Ipv4 header
payload
TOS Bytes
3 bits
Class-Based Weighted Fair Queuing (CBQ) là cơ chế queuing được dùng để reserve (giành trước) một lượng bandwidth tối thiểu cho một loại lớp lưu lượng (traffic class) khi xảy ra nghẽn. Lệnh bandwidth trong policy-map sẽ được dùng để tính toán ra giá trị weight cho lớp đó. Công thức tính weight của mỗi lớp có liên quan đến bandwidth của interface, vì vậy việc cấu hình đúng bandwidth của interface (thỏa với tốc độ vật lý của đường link) là rất quan trọng.
CBQ cho phép người quản trị mạng xác định chính xác lượng băng thông được cấp phát cho 1 luồng lưu lượng cụ thể dựa vào băng thông có sẵn mà WFQ không làm được – Tính trọng số ưu tiện dựa vào các bit trong trường ToS chứ không phải do người dùng đặt trước. Điều ngày giúp người quản trị có thể phân phối cho một lớp lưu lượng đặc biệt nào đó một lượng băng thông tối thiểu đủ để hoạt động
Xét 1 ví dụ có một luồng thoại thời gian thực yêu cầu băng thăng tối thiểu bằng một nửa dung lượng đường truyền T1 (1.544Mbps). Nếu chỉ có 2 luồng dữ liệu ta hoàn toàn có thể sử dụng WFQ để phân phối. Tuy nhiên vấn để xảy ra khi có thêm nhiều luồng dữ liệu tham gia vào đường truyền khi đó đặc tính của WFQ sẽ phân phối giải thông công bằng cho các luồng, như vậy luồng thoại thời gian thực ban đầu sẽ không có đủ lượng băng thông yêu cầu là một nữa đường truyền T1. Khác với WFQ khi sử dụng CBQ thì hoàn toàn có thể cấu hình dành 1 nửa đường truyền T1 cho luồng dữ liệu thoại thời gian thực này. Luồng này được đưa vào 1 lớp và có đủ băng thông để hoạt động, các luồng còn lại được xếp vào một lớp khác và chia sẻ một nửa băng thông còn lại.
CBQ còn hỗ trợ chia sẻ băng thông giữa các lớp bằng cách sử dụng cấu trúc cây phân lớp, để hiểu rõ hơn chúng ta cùng xét ví dụ dưới đây. Tại mức cao nhất người quản trị chia sẻ đường truyền cho 3 người dùng khác nhau. Tại mức này từng người đùng sẽ chia sẻ băng thông họ nhận được cho các ứng dụng theo một tỉ lệ nào đó, quá trình lặp lại cho đến khi ứng dụng nhận được phần băng thông được cấp phát để truyền.
Hình 2.6: Chia sẻ băng thông trong CBQ
Trong quá trình hoạt động có những lớp không sử dụng hết băng thông được cấp phát, lượng băng thông này sẽ được chia sẻ cho các lớp còn lại, các lớp cùng cấp có thể mượn số băng thông này thông qua lớp cha của nó, lớp nào có ưu tiên cao hơn sẽ mượn được nhiều bằng thông hơn.
CBQ đã được cài đặt trên linux bằng cách dùng thuật toán từ bộ mô phỏng NS2. Cài đặt ban đầu của CBQ là WRR (Weighted Round Robin), trong linux là DRR(Deficit Round Robin). Chính sách chia sẻ băng thông được sử dụng trong DRR như sau: Khi lớp A có độ ưu tiên cao hơn lớp B, cả 2 đang mượn băng thông từ lớp C thì A sẽ lấy phần băng thông nó cần sau đó phần băng thông còn lại sẽ dành cho B, nếu độ ưu tiên của lớp A và B bằng nhau thì 2 lớp sẽ cùng nhận được 1 lượng băng thông chia sẻ giống nhau.
links Agency A 40% Agency B 30% Agency C30% HTTP 20% FTP 10% POP3 10% TCP 10% IP 20% HTTP 20% SSH 10% RTP 10% FTP 10%
2.2. CÁC CHIẾN LƯỢC QUẢN LÝ HÀNG ĐỢI ĐỘNG
Trong lý thuyết hàng đợi người ta chứng minh được rằng thời gian trung bình mà các gói tin đi qua hàng đợi bao gồm thời gian các gói tin phải chờ trong hàng đợi cộng với thời gian chúng được phục vụ, tỉ lệ thuận với chiều dài hàng đợi, tỉ lệ nghịch với tốc độ gói tin đến hàng đợi trung bình. Mục tiêu chính của các chiến lược quản lý hàng đợi là giữ cho chiều dài hàng đợi trung bình đủ nhỏ và ổn định. Đảm bảo độ trễ trung bình của các gói tin không vượt quá ngưỡng cho phép đồng thời đạt được hệ số sử dụng đường truyền cao. Hai yêu cầu này là trái ngược nhau chính vì vậy cần có một sự thỏa hiệp. Để biểu diễn đại lượng này người ta đưa ra một đại lượng là “Công suất”, đó là tỉ lệ giữa thông lượng và độ trễ. Điểm tối ưu là điểm có hiệu suất cực đại. Trong chương này sẽ trình bày về các chiến lược quản lý hàng đợi động AQM và một số thuật toán tiêu biểu. Các chiến lược này nhằm đáp ứng các mục tiêu đã nêu phía trên. Trước khi tìm hiểu về các chiến lược quản lý hàng đợi động chúng ta hãy xem xét chiến lược quản lý hàng đợi truyền thống và các nhược điểm của nó.
2.2.1. Chiến lược quản lý hàng đợi truyền thống và hệ quả
Các cách tiếp cận quản lý hàng đợi truyền thống đều dựa trên cơ chế FIFO như đã trình bày ở phần trước. Với các cơ chế này thì gói tin khi tới gateway hoặc router sẽ được xếp vào hàng đợi, khi hàng đợi đầy thì các gói tin tới sau sẽ bị loại bỏ. Các gói tin tới trước sẽ được phụ vụ trước và hàng đợi này được mô phỏng trong bộ mô phỏng NS2 với tên gọi “DropTail”. Do tính đơn giản và dễ cài đặt mà nó được sử dụng trong nhiều năm trên Internet tuy nhiên do sự phát triển mạnh mẽ của mạng Internet ngày nay nó xuất hiện nhiều nhược điểm mà nổi bật nhất là hai nhược điểm sau đây
a. Hiện tượngGlobal Synchronization
Theo cơ chế FIFO,chúng ta nói rằng các luồng khác bị “Lock Out” tại một thời điểm khi xuất hiện một luồng lưu lượng bùng nổ khiến cho hàng đợi bị chiếm độc quyền, các gói tin của các luồng lưu lượng khác không được nhận vào vì hàng đợi đầy. Khi xảy ra hiện tượng lockout nếu các thực thể sử dụng giao thức TCP để truyền thì chúng sẽ bị TimeOUT. Theo thuật toán tránh tắc ngẽn của TCP chúng sẽ đồng loạt giảm cửa số phát, thực hiện rút lui theo hàm mũ làm cho lưu lượng trên mạng đồng loại giảm nhanh chóng gây lãng phí băng thông đường truyền, làm giảm hiệu suất sử
dụng. Hiện tượng đồng loạt giảm lưu lượng đó được gọi là hiện tượng đồng bộ toàn cầu – Global synchronization.
b. Hiện tượng hàng đợi đầy (Full Queue)
Hàng đợi FIFO có thể thường xuyên nằm trong trạng thái đầy trong trong thời gian dài nếu có nhiều luồng lưu lượng, vì cơ chế FIFO chỉ loại bỏ gói tin khi hàng đợi đã đầy. Lưu lượng trên mạng thường xuyên có sử bùng nổ và các gói tin tới các node mạng thường theo cụm nên bộ đệm tại các node mạng phải đủ lớn để hấp thu các lưu lượng bùng nổ này. Nhược điểm của nó là khi tăng kích thước bộ đêm để hấp thu các lưu lượng bùng nổ đồng thời sẽ làm gia tăng độ trễ và thăng giáng độ trễ. Ưu tiên sẽ là lựa chọn một cơ chế quản lý hàng đợi tốt thay vì tăng kích thước hàng đợi tại node mạng.
Ngoài “DropTail” còn có 2 phương pháp khác có thể được sử dụng là loại bỏ gói