IETF QUICの実装に使われている輻輳制御のアルゴリズムを調べてみました。(2019/12/6時点)

BBR、CUBIC、NewRenoの3つに絞って調べています。

各実装のレポジトリを、BBR、CUBIC、Reno、congestion、でキーワード検索して、出てきた情報から判断しています。詳細な実装を確認したわけではないので、実際には実装されていてもキーワード検索時に引っかからなかった場合は見落としている可能性がありますのでご注意ください。

もし間違っていたらご連絡いただけると助かります。

implementation language 実装されている輻輳制御アルゴリズム コメント
aioquic python ? コードとissueを検索してみましたが、何が実装されてるかまではわかりませんでした
AppleQUIC C, Objective-C ? closed sourceのため詳細不明
ats c++ NewReno このコミットログを見ると draft-19にあわせたと書いているので、NewRenoの可能性が高いと思います
f5 c ? closed sourceのため不明
kwik java NewReno ソースコードを検索したら、NewRenoCongestionController.java というのがありました
lsquic c BBR, CUBIC ソースコードを検索したら、BBRとCUBICの実装がありました
msquic c ? closed sourceのため不明
mvfst c++ BBR, CUBIC, NewReno, COPA BBR, CUBIC, NewNewRenoに加え、昨年論文が発表されたCOPAまで実装されていました。参考情報: COPAの論文 FaceBookの記事
Neqo Rust ? コードとissueを検索してみましたが、何が実装されてるかまではわかりませんでした
ngtcp c ? コードとissueを検索した限りでは、何が実装されてるかまではわかりませんでした
nginx_quic c ? quicheの拡張なので、quicheと同じだと思います
Pandora c ? closed sourceのためわかりませんでした
picoquic c CUBIC, NewReno ソースコードを検索したら、CUBICとNewRenoの実装がありました
quant c11 ? コードとissueを検索した限りでは、何が実装されてるかまではわかりませんでした
quiche Rust NewReno このissueによると 今はNewRenoしか実装していないようです
quicker TypeScript ? コードとissueを検索してみましたが、何が実装されてるかまではわかりませんでした
quicly c Reno コードを検索した限りでは、Renoが実装されているようでした
Quincy Java ? コードとissueを検索してみましたが、何が実装されてるかまではわかりませんでした
quinn Rust ? コードとissueを検索してみましたが、何が実装されてるかまではわかりませんでした
sora_quic Erlang/OTP ? closed sourceのためわかりませんでした
quic-go Go CUBIC コードを検索した限りでは、CUBICが実装されているようでした

単純なキーワード検索のみだと、不明なものが多かったです。個人的な予想ですが、そういう場合は、IDに従ってNewRenoを実装しているのではないかと思います。

もし、QUICのライブラリを実際に利用する場合は、ネットワークエミュレータなどで挙動を確認して、どの輻輳制御アルゴリズムを使っているか推定するのもありだと思います。