linux - 如何将 linux tc 与 tcp 应用程序一起使用

标签 linux trafficshaping

我有一个 1Gb 网络,我需要通过将速率限制为 100MB,然后限制为 1Gb 来运行某些 TCP 性能测试。我的理解是可以使用分层 token 桶(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?

最佳答案

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

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 兆的队列中。

由于您只想匹配一个应用程序,因此让我们假设您的应用程序有一个 TCP 套接字监听端口 7654,所有连接都通过该端口进行。 iptables 规则看起来更像这样

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

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

关于linux - 如何将 linux tc 与 tcp 应用程序一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15353304/

相关文章:

linux - 尝试将地址复制到结构时出现段错误?

linux - 如何实现这个功能呢? (这个功能的名字是什么?)

linux - 相当于 Bash 或命令行中 perl 的 print "-"x20

html - 在 Linux 上使用什么来检查大型项目中的 html 链接?

用于租户隔离的 API 流量整形/throttle 策略

linux - 用于流量整形的基于流的流量分类

python - 'RTNETLINK 回答 : File exists'

php - 在 PHP 上实时执行 git 命令

linux - 使用 tc over GRE Tunnel 的流量镜像只获取入口流量