What is Congestion Control?
Kiểm soát tắc nghẽn (congestion control) giúp kiểm soát sự tắc nghẽn ở các bộ định tuyến, làm giảm sự mất gói xảy ra trên đường truyền. Congestion control khác với flow control ở chỗ nó kiểm soát nhiều client hơn. Tức là khi có hơn 2 client gửi quá nhanh và nhiều thì congestion control mới nhập cuộc.
Có hai cách để kiểm soát tắc nghẽn:
- End to end Congestion Control: giao thức sẽ quan sát sự mất gói và trễ gói để điều chỉnh việc tăng giảm tốc độ truyền tải từ bên gửi.
- Network – Assisted Congestion Control: có sự tham gia của các router, giúp điều chỉnh header của các gói tin khi xảy ra mất gói để báo cho bên gửi giảm tốc độ truyền tải dữ liệu. Ngoài ra, nó còn có khả năng can thiệp vào việc điều chỉnh tốc độ truyền tải.
Giao thức kiểm soát tắc nghẽn đơn giản nhất của TCP là AIMD.
Loss - Based Protocols
AIMD
Giao thức AIMD (Additive Increase - Multiplicative Decrease) sẽ tăng dần tốc độ đến khi gặp mất gói (là một dấu hiệu cho biết có sự tắc nghẽn xảy ra) sẽ giảm đột ngột xuống.
Cách này đã cũ và ít dùng.
![[AIMD.webp|#x-small]]
Ngoài ra, còn có hai dấu hiệu cho biết có sự mất gói xảy ra:
- Quá thời gian timeout.
- Nhận ba ACK liên tiếp trùng nhau.
Từ hai dấu hiệu trên, ta có hai giao thức tương ứng giúp tăng nhanh tốc độ truyền tin sau khi mất gói là TCP Tahoe và TCP Reno.
Tahoe
Có hai giai đoạn là giai đoạn slow start và giai đoạn congestion avoidance. Với slow start, tốc độ truyền tin (ta gọi là congestion window - cửa sổ tắc nghẽn) được tăng gấp đôi nếu không xảy ra mất gói.
Sau khi tốc độ truyền tin đạt đến giá trị xảy ra threshold thì tốc độ sẽ được tăng tuyến tính, đây được gọi là giai đoạn congestion avoidance.

Trong giai đoạn congestion avoidance, nếu có xảy ra mất gói thì sẽ lưu giá trị threshold là bằng một nửa giá trị của congestion window trước khi xảy ra mất gói.
Reno
Khi gặp ba ACK liên tiếp trùng nhau, thay vì giảm tốc độ truyền tải một cách đột ngột xuống mức thấp nhất thì chỉ giảm xuống một nửa so với lúc chưa xảy ra mất gói.

Tuy nhiên, đối với đường mạng có khoảng cách xa và băng thông rộng như mạng internet hiện nay thì việc phục hồi của TCP Tahoe và TCP Reno vẫn còn quá chậm, không tận dụng được tối ưu phần cứng của hệ thống.
CUBIC
Giao thức CUBIC có hàm tăng tốc độ truyền tải là đường cong để nhanh chóng đạt đến ngưỡng tối đa của băng thông rồi đột ngột giảm xuống khi xảy ra mất gói.
![[CUBIC.webp|#x-small]]
Delay - Based Protocols
Nhận diện tắc nghẽn bằng cách đo lường RTT, nếu RTT tăng lên quá nhiều thì có thể biết rằng đường mạng đang bị tắc nghẽn. Do đó, các giao thức dựa trên RTT cần phải theo dõi giá trị RTT để đưa ra hành động kiểm soát tắc nghẽn.
Google hiện tại đang sử dụng giao thức BBR, là một giao thức dựa trên độ trễ.
Network Assisted
Khi có khả năng xảy ra tắc nghẽn, các router sẽ chủ động đánh dấu gói tin IP (đánh dấu ECN bit) nhằm báo hiệu cho bên gửi giảm tốc độ truyền.

Resources
- Slide mạng máy tính nâng cao HCMUS: chương 2.