QoS không tạo thêm băng thông. Nó chỉ quyết định gói nào bị trễ hoặc bị bỏ trước khi link nghẽn. Mô hình phổ biến là DiffServ: phân loại và đánh dấu ở biên mạng, core chỉ đọc nhãn (DSCP hoặc MPLS TC/EXP) rồi xếp hàng đợi tương ứng. Cấu hình thực tế xem QoS trên IOS XR và Junos.
Luồng hoạt động#
flowchart LR
IN["Gói vào từ khách"] --> CL["Classification (ACL, DSCP, interface)"]
CL --> PO["Policing theo hợp đồng"]
PO --> MK["Marking DSCP / EXP / qos-group"]
MK --> FW["Chuyển tiếp"]
FW --> Q["Queuing: priority, bandwidth, WRED"]
Q --> SH["Shaping / scheduler"]
SH --> OUT["Ra interface"]
Ingress thường làm: phân loại, policing, marking. Egress làm: queuing, scheduling, shaping, WRED. Hàng đợi chỉ có tác dụng khi interface ra bị nghẽn.
Trường đánh dấu#
| Trường |
Vị trí |
Số bit |
Giá trị |
| DSCP |
Byte ToS (IPv4) / Traffic Class (IPv6) |
6 |
0-63 |
| IP Precedence |
3 bit đầu của ToS (cũ) |
3 |
0-7, tương ứng CSx |
| MPLS TC (EXP) |
Trong mỗi label |
3 |
0-7 |
| 802.1p (PCP) |
Tag VLAN 802.1Q |
3 |
0-7 |
DSCP thường dùng#
| PHB |
DSCP |
Nhị phân |
Dùng cho |
EXP thường map |
| Default / BE |
0 |
000000 |
Internet |
0 |
| AF11 / AF12 / AF13 |
10 / 12 / 14 |
001010 ... |
Dữ liệu ưu tiên thấp |
1 |
| AF21 / AF31 |
18 / 26 |
010010 / 011010 |
Dữ liệu doanh nghiệp |
2 / 3 |
| AF41 |
34 |
100010 |
Video |
4 |
| EF |
46 |
101110 |
Thoại |
5 |
| CS6 |
48 |
110000 |
Giao thức điều khiển (BGP, IGP) |
6 |
| CS7 |
56 |
111000 |
Dự phòng cho network control |
7 |
Công thức AF: AFxy = 8x + 2y (x là lớp 1-4, y là mức drop 1-3; y càng lớn càng dễ bị bỏ khi nghẽn).
Policing và shaping#
| Tiêu chí |
Policing |
Shaping |
| Vượt ngưỡng thì |
Drop hoặc remark ngay |
Giữ lại trong buffer, gửi sau |
| Hướng |
Ingress và egress |
Chỉ egress |
| Ảnh hưởng |
Không thêm delay, TCP thấy loss và giảm tốc kiểu răng cưa |
Thêm delay/jitter, traffic mượt |
| Tham số |
CIR, burst (Bc), có thể PIR/Be (2 rate 3 color) |
Rate trung bình, burst |
| Dùng khi |
Ép khách đúng hợp đồng ở biên, giới hạn hàng priority |
Khách mua 500M trên port 1G, khớp tốc độ với thiết bị phía sau |
Hàng đợi#
| Thành phần |
Vai trò |
| Priority queue (LLQ, strict-high) |
Phục vụ trước mọi hàng khác, delay thấp nhất. Phải giới hạn bằng policer để không bỏ đói hàng khác |
| Bandwidth / bandwidth remaining |
Chia phần băng thông còn lại theo tỷ lệ khi nghẽn |
| Queue limit / buffer |
Độ sâu hàng đợi; sâu quá gây bufferbloat, nông quá gây drop với burst |
| WRED |
Bỏ gói ngẫu nhiên trước khi đầy hàng để TCP giảm tốc sớm, có thể khác ngưỡng theo mức drop |
| Tail drop |
Mặc định khi không bật WRED: đầy là bỏ |
DiffServ qua MPLS#
| Mode |
Cách xử lý ToS khách |
Ghi chú |
| Uniform |
EXP copy từ DSCP, khi pop thì đánh lại DSCP theo EXP |
Một miền QoS thống nhất |
| Pipe |
DSCP khách giữ nguyên; PE egress xếp hàng theo EXP của ISP |
Phổ biến cho L3VPN |
| Short pipe |
DSCP khách giữ nguyên; PE egress xếp hàng theo DSCP khách |
Khi khách tự quản lý QoS |
Với PHP, label ngoài bị pop trước PE egress nên EXP ở label ngoài mất. Mã EXP vẫn nằm trong label VPN; muốn giữ EXP trên label transport tới tận egress thì dùng explicit null (xem MPLS LDP và RSVP-TE).
Khi nào dùng#
- Link biên khách hàng: policing ingress theo hợp đồng, shaping egress khi tốc độ bán nhỏ hơn tốc độ port.
- Backbone: thường dư băng thông, chỉ cần vài lớp (network control, voice, business, best-effort) để bảo vệ BGP/IGP và thoại khi có sự cố làm dồn traffic.
- Không nên tạo quá nhiều lớp: mỗi platform chỉ có 8 hàng đợi/port và vận hành càng nhiều lớp càng khó kiểm tra.