我目前正在尝试Quic和TCP协议,旨在使用TC来模拟真实的网络情况。然而,我在尝试将带宽设置为32mbit时遇到了问题,损耗为0.1%,延迟为20ms,抖动为1ms。虽然 TCP 的性能符合预期,但 Quic 的速度明显较慢,大约为 250KB/s,而 TCP 的速度为 3.6MB/s。
经过进一步探索,我发现消除抖动并将其设置为 0ms 可以使 Quic 正常运行,表现出与 TCP 类似的性能。此外,将抖动重置为 1ms,同时取消速率限制也会导致正常行为。然而,当抖动和速率限制同时设置时,Quic 表现出异常行为。
我还尝试修改延迟和丢失,但它按我的预期正常运行。
我在用快走实施Quic。 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 实现中的抖动和数据包排序中的错误有关,因为当带宽限制被消除时,该问题似乎已得到解决。任何见解或想法将不胜感激。谢谢。