TCP Congestion Control


🔸 1. TCP Congestion Control là gì?

TCP Congestion Control là cơ chế trong TCP giúp điều chỉnh tốc độ truyền dữ liệu giữa sender và receiver để tránh tình trạng tắc nghẽn mạng (congestion) gây mất gói, delay cao.


🔸 2. Các thành phần chính

Thành phần
Mục đích

Congestion Window (cwnd)

Giới hạn lượng dữ liệu được gửi mà chưa nhận ACK.

Slow Start

Tăng tốc độ truyền dần để đo dung lượng mạng.

Congestion Avoidance

Tăng chậm lại khi gần tới ngưỡng.

Fast Retransmit / Fast Recovery

Xử lý khi có mất gói, không cần chờ timeout.


🔸 3. Các thuật toán TCP Congestion Control phổ biến

Tên
Mô tả ngắn
Môi trường phù hợp

Reno

Cũ, đơn giản, không tối ưu tốt với mất gói

Môi trường cổ điển

Cubic (Linux default)

Tối ưu cho tốc độ cao, delay cao

Internet, server tải lớn

BBR (Google)

Dựa trên băng thông thực tế, không phụ thuộc mất gói

Microservices, video, gRPC, APIs

Vegas

Dựa trên delay RTT thay vì mất gói

Ứng dụng real-time, low-latency


🔸 4. Ứng dụng trong Backend

✅ Khi nào cần quan tâm:

  • Backend phục vụ lượng lớn client TCP (REST APIs, WebSocket, gRPC).

  • Các hệ thống streaming (video, audio).

  • Thao tác nhiều qua WAN hoặc Cloud (delay cao, mất gói).

🧠 Một số tình huống thực tế:

Tình huống
Liên quan TCP Congestion Control

gRPC streaming bị delay, giật

Dùng Cubic hoặc BBR tốt hơn Reno

REST API timeout ngẫu nhiên

Congestion window bị thu hẹp do mất gói

WebSocket chậm khi load cao

Có thể tuning tcp_congestion_control, kernel param


🔸 5. Tuning trong hệ thống Linux

# Xem thuật toán hiện tại
sysctl net.ipv4.tcp_congestion_control

# List các thuật toán hỗ trợ
sysctl net.ipv4.tcp_available_congestion_control

# Chuyển sang BBR
echo "bbr" > /proc/sys/net/ipv4/tcp_congestion_control

⚠️ Lưu ý: Chuyển đổi thuật toán yêu cầu kernel hỗ trợ (BBR yêu cầu Linux kernel >= 4.9)


🔸 6. Góc nhìn Backend Developer

Điều cần làm
Giải thích

Tối ưu mạng ở tầng TCP

Nếu backend tự quản lý hệ điều hành (Linux), có thể đổi sang thuật toán phù hợp như BBR

Hiểu rõ tác động đến retry logic

API bị delay → timeout → retry → thêm áp lực lên congestion

gRPC tuning

BBR + flow control tốt hơn cho gRPC bidirectional stream

Monitoring với Prometheus + Grafana

Theo dõi RTT, retransmits, cwnd để điều chỉnh hiệu quả


✅ Tổng kết dành cho Backend Engineer

Kỹ năng cần nắm
Lý do

Biết TCP hoạt động ra sao

Để xử lý lỗi timeout, connection reset...

Nắm các thuật toán congestion control

Để chọn đúng thuật toán theo workload

Biết cách monitoring & tuning

Đảm bảo hiệu năng dưới tải cao

Nếu bạn đang dùng các dịch vụ cloud (AWS, GCP...), hãy kiểm tra xem load balancer hoặc instance có hỗ trợ BBR, và cân nhắc dùng nếu workload có yêu cầu tốc độ & độ ổn định cao.


Last updated