Bài viết này giới thiệu ngắn gọn về cách bật thuật toán kiểm soát tắc nghẽn BBR trên thiết bị Windows; và các vấn đề có thể xảy ra khi sử dụng chức năng này.
Giới thiệu về BBR
BBR (Bottleneck Bandwidth and Round-trip propagation time) là một loại thuật toán kiểm soát tắc nghẽn TCP mới do Google phát triển. Nó được thiết kế để giải quyết các vấn đề về việc sử dụng băng thông thấp và độ trễ lớn của các thuật toán kiểm soát tắc nghẽn truyền thống (như Reno hoặc CUBIC) trong một số điều kiện mạng nhất định (đặc biệt là trong các mạng có tỷ lệ mất gói và độ trễ nhất định).
Tư tưởng cốt lõi
Tư tưởng cốt lõi của BBR là không còn phụ thuộc vào việc mất gói như một tín hiệu chính để đánh giá tắc nghẽn mạng. Các thuật toán kiểm soát tắc nghẽn truyền thống thường giảm tốc độ gửi khi phát hiện mất gói, nhưng điều này có thể dẫn đến việc không thể tận dụng tối đa băng thông khả dụng hoặc gây ra độ trễ không cần thiết (phình to bộ đệm) trong các mạng có bộ đệm lớn hơn hoặc có hiện tượng mất gói ngẫu nhiên nhẹ.
BBR chuyển sang chủ động đo hai tham số quan trọng của mạng:
- Băng thông nút thắt (Bottleneck Bandwidth, BtlBw): Giới hạn trên của tốc độ truyền dữ liệu trong đường dẫn mạng, tức là dung lượng của mắt xích hẹp nhất trong đường dẫn.
- Thời gian truyền khứ hồi (Round-trip Propagation Time, RTprop): Thời gian ngắn nhất cần thiết để một gói dữ liệu đi và về trong đường dẫn mạng, không bao gồm thời gian xếp hàng trong bộ đệm của các thiết bị trung gian.
Cơ chế hoạt động
BBR điều chỉnh động hành vi gửi của nó bằng cách thăm dò định kỳ hai tham số này:
- Thăm dò băng thông nút thắt: BBR sẽ gửi dữ liệu trong một khoảng thời gian với tốc độ cao hơn một chút so với băng thông nút thắt ước tính hiện tại để thăm dò xem có băng thông khả dụng cao hơn hay không.
- Thăm dò thời gian truyền khứ hồi: BBR sẽ gửi dữ liệu trong một khoảng thời gian với tốc độ thấp hơn một chút so với băng thông nút thắt ước tính hiện tại để làm trống hàng đợi trong đường dẫn, từ đó đo được RTprop chính xác hơn.
Bằng cách này, BBR cố gắng duy trì lượng dữ liệu đang truyền (inflight data) ở mức cao hơn một chút so với tích băng thông-độ trễ (BDP = BtlBw * RTprop). Điều này vừa có thể tận dụng tối đa băng thông của liên kết nút thắt, vừa có thể tránh gây ra hàng đợi quá dài và độ trễ cao trong mạng.
Ưu điểm chính
- Thông lượng cao: Đặc biệt trong các mạng dài và béo (Long Fat Networks) có tỷ lệ mất gói và độ trễ nhất định, BBR thường có thể đạt được thông lượng cao hơn so với các thuật toán truyền thống.
- Độ trễ thấp: Bằng cách chủ động kiểm soát hàng đợi, BBR có thể giảm độ trễ mạng một cách hiệu quả, tránh các vấn đề về phình to bộ đệm.
- Không nhạy cảm với mất gói: Do không chủ yếu dựa vào mất gói để đánh giá tắc nghẽn, BBR hoạt động ổn định hơn trong các mạng có một lượng nhỏ mất gói ngẫu nhiên.
Điều kiện để bật BBR trên Windows
Hệ điều hành phải hỗ trợ. Yêu cầu phiên bản có thể là Windows 11 version 22H2 trở lên.
Chạy Powershell với tư cách quản trị viên, gửi lệnh sau để tìm hiểu các thuật toán mà hệ thống hỗ trợ:
[Enum]::GetNames([Microsoft.PowerShell.Cmdletization.GeneratedTypes.NetTCPSetting.CongestionProvider])
Nó có thể xuất ra tương tự như:
Default
NewReno
CTCP
DCTCP
LEDBAT
CUBIC
BBR2
Danh sách này đại diện cho các tên thuật toán kiểm soát tắc nghẽn mà hệ thống có thể nhận dạng và định cấu hình trong cài đặt TCP. Default
thường có nghĩa là hệ thống quyết định sử dụng CUBIC hoặc các thuật toán khác theo một mẫu cụ thể hoặc cài đặt chung.
Thử sử dụng thuật toán kiểm soát tắc nghẽn BBR trên Windows
Xem thuật toán kiểm soát tắc nghẽn hiện được định cấu hình:
Get-NetTCPSetting | Select SettingName, CongestionProvider
Đầu ra có thể như sau:
SettingName CongestionProvider
----------- ------------------
Automatic
InternetCustom CUBIC
DatacenterCustom CUBIC
Compat NewReno
Datacenter CUBIC
Internet CUBIC
Thử bật:
Set-NetTCPSetting -SettingName InternetCustom -CongestionProvider BBR2
Lỗi:
Set-NetTCPSetting : Property CongestionProvider is read-only
At line:1 char:1
+ Set-NetTCPSetting -SettingName InternetCustom -CongestionProvider BBR ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (MSFT_NetTCPSett...ystemName = ""):ROOT/StandardCimv2/MSFT_NetTCPSetti
ng) [Set-NetTCPSetting], CimException
+ FullyQualifiedErrorId : Windows System Error 87,Set-NetTCPSetting
Vấn đề khi sử dụng thuật toán BBR trên Windows hiện tại
Tại thời điểm này, sau khi tìm hiểu, tôi biết rằng hỗ trợ BBR của Windows chưa hoàn thiện và có rất nhiều lỗi (hai tài liệu đầu tiên đề cập rằng việc bật BBR sẽ phá vỡ lưu lượng TCP “localhost” (giao diện vòng lặp), khiến các kết nối trong cùng một máy trở nên chậm chạp hoặc không phản hồi), chẳng hạn như:
- Sẽ phá vỡ Steam, vì Steamwebhelper không thể khởi động lại và khi sử dụng Internet Download Manager, nó sẽ phá vỡ tất cả các móc tải xuống, khi chuyển trở lại CUBIC, chúng sẽ hoạt động trở lại —— Fix BBR2 bugs on Windows 11 - Microsoft Community , được tạo vào ngày 8 tháng 5 năm 2025
- Lỗi mới của BBR2 24H2 là kết nối không ổn định. Trình duyệt Firefox của tôi sẽ ngẫu nhiên nhận được lỗi
NS_BINDING_ABORT
. Plugin phát triển Visual Studio Code Remote của tôi bị kẹt khi kết nối và hiển thị lỗi sau:failed to set up socket for dynamic port forward to remote port =: proxy connection timed out.
Ứng dụng Messenger (UWP) của tôi gần như bị treo (không thể hiển thị tin nhắn mới). —— Windows 11 24H2 and BBR2 : r/Windows11 - Sẽ làm gián đoạn kết nối bảng điều khiển cục bộ của Hyper-V (kể từ Windows 11 23H2). Bảng điều khiển sẽ hiển thị
Connecting to '[VM]'
trong vài phút, sau đó không thành công và hiển thịVideo remoting was disconnected
và hiển thị thông báoCould not connect to the virtual machine.
—— Cách bật TCP BBR trên Windows - Stack Overflow - v2rayN không thể cập nhật tệp địa lý, lõi hoặc kết nối với máy chủ proxy. —— [Bug]: Thuật toán tắc nghẽn BBR2 trong Windows khiến v2rayN ngừng hoạt động · 2dust/v2rayN
Do đó, tôi quyết định tạm thời không bật BBR. Nếu bạn muốn thử bật, bạn có thể thử lệnh:
netsh int tcp set supplemental template=Internet congestionprovider=BBR2
netsh int tcp set supplemental template=InternetCustom congestionprovider=BBR2
netsh int tcp set supplemental template=Datacenter congestionprovider=BBR2
netsh int tcp set supplemental template=DatacenterCustom congestionprovider=BBR2
netsh int tcp set supplemental template=Compat congestionprovider=BBR2
Ở đây, bạn cũng có thể thay thế BBR2
bằng BBR
(BBR v1), bạn có thể kiểm tra và so sánh hiệu quả.
Sau đó, xem thuật toán kiểm soát tắc nghẽn hiện được định cấu hình, liệu nó đã được định cấu hình thành BBR2
hay chưa:
Get-NetTCPSetting | Select SettingName, CongestionProvider
Trên Windows 11 23H2 / 24H2, việc bật BBR v2 có thể khiến kết nối TCP cục bộ không khả dụng (ví dụ: khiến adb không thể sử dụng, Steam không thành công, v.v.) , lúc này, vui lòng khôi phục thuật toán kiểm soát tắc nghẽn về cấu hình trước đó. Sau khi khôi phục, không cần khởi động lại và vấn đề sẽ được giải quyết ngay lập tức.
Bài viết này chưa hoàn thiện, vui lòng để lại tin nhắn hoặc bình luận để cho tôi biết thông tin mới nhất.
Tham khảo
Set-NetTCPSetting (NetTCPIP) | Microsoft Learn
Enable TCP BBR v2 on Linux & Windows 11 - Coxxs
Các phiên bản khác của trang web này
Bài viết này có nhiều phiên bản ngôn ngữ.
Nếu bạn muốn đăng bình luận, vui lòng truy cập trang web sau:
Các trang web này chỉ hỗ trợ duyệt, không thể đăng bình luận hoặc tin nhắn, nhưng cung cấp nhiều tùy chọn ngôn ngữ hơn và thời gian tải nhanh hơn:
ZH EN ZH-TW JA RU KO CS ES AR FR PT DE TR IT NL SV DA FI PL UK HE RO HU EL HR TH HI BN ID SW VI NO