如何在tcp应用程序中使用linux tc

时间:2013-03-12 04:24:45

标签: linux trafficshaping

我有1Gb网络,我需要通过将速率限制为100MB然后1Gb来运行某些TCP性能测试。我的理解是分层令牌桶(htb)可用于实现这一点,如下所示

tc qdisc add dev eth0 root handle 1: htb default 12
tc class add dev eth0 parent 1: classid 1:1 htb rate 1gbps ceil 1gbps
tc class add dev eth0 parent 1: classid 1:10 htb rate 100mbps ceil 100mbps

这应该创建两个根类1:1和1:10,分别带1gb和100mb带宽。如果我的理解是错误的,请纠正我。

接下来,我如何在tcp应用程序中使用上述类?例如,当我运行应该只使用100 Mb的应用程序时,我是否需要在套接字选项中指定一些内容,这样应用程序发送的任何消息现在都属于类1:1,因此速率限制为100 Mb? / p>

1 个答案:

答案 0 :(得分:1)

使用流量控制匹配规则和ip表规则来标记流量。

tc filter add dev eth0 protocol ip parent 1:0 prio 1 handle 1 fw flowid 1:10
iptables -A OUTPUT -i eth0 -p tcp -j MARK --set-mark 1

将所有TCP出站数据包放入您每秒100兆位的队列中。

由于您只想匹配一个应用程序,让我们假装您的应用程序在端口7654上侦听所有连接的TCP套接字。 iptables规则看起来更像是

iptables -A OUTPUT -i eth0 -p tcp -m multiport --sports 7654 -j MARK --set-mark 1

此外,您应该在tc qdisc命令中使用1 Gbps队列的默认值,以便系统上的正常流量不会以任何方式影响您的测试。