Anh em kỹ sư mạng chắc hẳn đã từng gặp cảnh “kẹt xe” trên đường truyền – băng thông đầy, hàng đợi nghẽn, ứng dụng thì khựng lại. Trong QoS, tình huống này gọi là tắc nghẽn (congestion), và nếu không có cơ chế kiểm soát thì hậu quả là TCP đồng loạt giảm tốc, làm băng thông toàn mạng sử dụng kém hiệu quả.
Vậy chúng ta có thể làm gì? Ngoài các kỹ thuật quản lý tắc nghẽn (congestion management) như queuing và scheduling, còn có một mảng cực kỳ quan trọng: công cụ tránh tắc nghẽn (congestion avoidance).
Tail Drop vs Congestion Avoidance
-
Tail Drop: khi hàng đợi đầy, tất cả gói đến sau đều bị loại bỏ. Nghe có vẻ hợp lý, nhưng hệ quả là TCP Global Synchronization – tất cả các kết nối TCP giảm tốc cùng lúc, khiến đường truyền lúc thì rỗng, lúc thì lại đầy.
-
Congestion Avoidance (Tránh tắc nghẽn): thay vì chờ hàng đợi đầy mới drop, thiết bị sẽ chủ động loại bỏ ngẫu nhiên một số gói tin khi hàng đợi bắt đầu “dày” lên. Nhờ vậy, TCP giảm tốc dần dần, tránh được hiện tượng đồng loạt giảm tốc.
Ví dụ:
Anh em tưởng tượng một con đường cao tốc 4 làn. Nếu để xe chạy thoải mái cho đến khi nghẽn rồi mới chặn tất cả, thì sẽ kẹt xe toàn tuyến. Nhưng nếu ta chủ động cho một số xe ít quan trọng hơn (ví dụ xe tải chở hàng bình thường) tạm dừng từ sớm, thì đường cao tốc vẫn duy trì lưu lượng mượt cho xe ưu tiên (xe cứu thương, xe buýt).
RED và WRED
-
WRED (Weighted RED): Cisco IOS không dùng RED thuần mà triển khai WRED. Ý tưởng giống RED nhưng “có trọng số” – nghĩa là lưu lượng quan trọng (ví dụ VoIP, video conference) sẽ ít bị drop hơn lưu lượng ít quan trọng (FTP, HTTP tải file).
Cách WRED hoạt động
-
WRED là một trong những kỹ thuật phòng ngừa tắc nghẽn thông minh trong QoS. Nó vừa giúp tránh TCP Global Synchronization, vừa đảm bảo dịch vụ ưu tiên cho các loại lưu lượng quan trọng.
Anh em CCNA/CCNP có thể lab ngay với lệnh:
Router(config)# interface serial 0/0
Router(config-if)# random-detect
Router(config-if)# random-detect dscp-based