我意识到已经有很多类似的问题被问到,但到目前为止我还没有找到解决我的问题的方法。
我有一个虚拟 Linux 服务器(运行 Debian Squeeze),用于测试网站速度,以测量上述网站加载时间的增加和减少。我试图限制该服务器的带宽和延迟,以便能够接近网站的实际加载时间,但迄今为止失败了。
我具体想要的是以下内容:
- 设置 50 毫秒的传入和传出延迟。
- 设置传入带宽限制为 512 kbps。
- 设置传出带宽限制为 4096 kbps。
我一直在研究 netem 并使用tc
命令,但还是有点难以理解。我设法整理了这个命令来控制延迟,这似乎有效,但我甚至不确定它是否只处理传出延迟或两者兼而有之:
tc qdisc add dev eth0 root netem delay 50ms
有哪位网络专家可以帮助我吗?
编辑:
经过进一步的研究,我已经完成了一半的目标,使用这个命令,所有传出的流量都会按照我希望的方式运行:
tc qdisc add dev eth0 root tbf rate 4.0mbit latency 50ms burst 50kb mtu 10000
但是,我仍无法正确限制传入流量。我了解到我应该使用“入口监管器过滤器”,我一直在尝试使用下面的命令来做到这一点,尝试了不同的值,但没有成功。
tc qdisc add dev eth0 ingress
tc filter add dev eth0 parent ffff: protocol ip u32 match ip src 0.0.0.0/0 flowid :1 police rate 1.0mbit mtu 10000 burst 10k drop
但是带宽会受到命令的影响,上面的值使速度从 2MB/s 开始,并且随着传输的进行,慢慢下降到大约 80-90kB/s,在传输大约 30 秒后达到。
对我做错的事情有什么想法吗?
答案1
我最终决定只在服务器上设置传出带宽/延迟,然后在客户端执行相同的操作,有效地达到相同的结果。
这些是我在服务器和客户端上分别运行的命令,以实现我的目标:
服务器:4 Mbit 50 毫秒
tc qdisc add dev eth0 handle 1: root htb default 11
tc class add dev eth0 parent 1: classid 1:1 htb rate 1000Mbps
tc class add dev eth0 parent 1:1 classid 1:11 htb rate 4Mbit
tc qdisc add dev eth0 parent 1:11 handle 10: netem delay 50ms
客户端:512 kbit 50 毫秒
tc qdisc add dev vmnet1 handle 1: root htb default 11
tc class add dev vmnet1 parent 1: classid 1:1 htb rate 1000Mbps
tc class add dev vmnet1 parent 1:1 classid 1:11 htb rate 512kbit
tc qdisc add dev vmnet1 parent 1:11 handle 10: netem delay 50ms
答案2
大约 80-90 kByte / s 是预期的
tc filter add ... police rate 1.0mbit ...
您要求在传入数据达到 1 mBit/s(大约 125 kByte/s)时丢弃它。然后远程服务器将降至远低于该速度(可能是一半,不确定)。此后,所有数据包都会通过,因此远程端会慢慢加快速度,直到再次达到 125 kByte/s。您得到一个平均的吞吐量远低于 125 kByte / s,这是入口整形的典型特征。
我有点惊讶,在已经安装入口策略过滤器的情况下,速度竟然能达到 2 MByte/s。您在哪里测量的 - 在下游客户端(程序)还是在某个上游路由器?或者也许您先启动了连接,然后才启动入口策略过滤器?