私は現在TCを使って実際のネットワーク状況をシミュレートすることを目的として、QuicとTCPプロトコルを試しています。しかし、帯域幅を32mbitに設定しようとすると、損失0.1%、待ち時間20ms、ジッタ1msで問題が発生しました。 TCP性能は予想通りだったが、QuicはTCPの3.6MB/sに比べて約250KB/sとかなり遅かった。
より詳細に調査した結果、ジッタを削除して0msに設定すると、Quicが正常に動作し、TCPと同様の性能を発揮できることがわかりました。また、速度制限を除去しながらジッタを1msにリセットすると正常な動作が発生します。ただし、Quic はジッタと速度制限が同時に設定された場合に異常な動作を示します。
遅延と損失の修正も試しましたが、期待どおりに動作します。
使っています早く行くQuickを実装します。 TC構成サンプルコードは次のとおりです。
tc qdisc add dev "$interface" root handle 1: htb default 10
tc class add dev "$interface" parent 1: classid 1:1 htb rate 32mbit ceil 32mbit
tc class add dev "$interface" parent 1:1 classid 1:10 htb rate 32mbit ceil 32mbit
tc class add dev "$interface" parent 1:1 classid 1:20 htb rate 32mbit ceil 32mbit
tc filter add dev "$interface" parent 1: protocol ip prio 16 u32 match ip protocol 17 0xff flowid 1:10
tc filter add dev "$interface" parent 1: protocol ip prio 16 u32 match ip protocol 6 0xff flowid 1:20
tc qdisc add dev "$interface" parent 1:10 handle 100: netem delay 20ms 1ms loss 0.2%
tc qdisc add dev "$interface" parent 1:20 handle 200: netem delay 20ms 1ms loss 0.2%
この動作がQuic実装のパケットシーケンスにあるジッタやバグと関係があるかどうかはわかりません。これは帯域幅の制限が取り除かれた場合、問題が解決したように見えたためです。どんな洞察力やアイデアにも感謝します。ありがとうございます。