有 tc 队列规则 DRR(Dificite Round Robin) 。
它具有与 HTB 相同的功能,但不使用填充令牌的桶,它只是为每个队列分配一些 Dificit Counter。在数据包发送 DC 减少数据包大小。如果 DC 小于数据包大小,则 DC 增加队列的量程并处理下一个队列。因此,它可以在不知道通道宽度(HTB 所需)的情况下按某种比例划分传出流量。见http://www.unix.com/man-page/linux/8/tc-drr/
设置:两台主机,172.16.1.1?172.16.1.2。
在第一台主机上,我们正在侦听流量:
nc -l 8111
nc -l 8112
Run Code Online (Sandbox Code Playgroud)
在第二台主机上,我们检查速度:
pv /dev/zero | nc 172.16.1.1 8111
pv /dev/zero | nc 172.16.1.1 8112
Run Code Online (Sandbox Code Playgroud)
现在速度是相等的(pv 是允许测量通过管道传输数据的速度的实用程序)。在第二台主机上添加 DRR(顶部的 HTB 用于模拟真实的通道速度限制):
tc qdisc add dev eth0 root handle 1: htb
tc class add dev eth0 parent 1: classid 1:1 htb rate 100mbit ceil 100mbit
tc qdisc add dev eth0 parent 1:1 handle 2: drr
tc …Run Code Online (Sandbox Code Playgroud) 我处于必须模拟 P2P 环境的情况(对于我的计算机科学硕士论文)。为此,我将 Docker 与 Ubuntu 一起使用来创建一堆虚拟机,这些虚拟机将连接到 BitTorrent 网络中。然后我需要确保可以设置对等点的上传和下载速率,这不是我在客户端中执行的选项(因为客户端使用睡眠来模拟较低的带宽,这会导致峰值速度)。
因此,我正在尝试为每个容器执行此操作。老实说,只要它有效,我真的不在乎这是如何完成的,但是我尝试了不同的事情但没有运气。这些是我迄今为止尝试过的事情:
我曾尝试遵循大量指南和示例,但每一个都没有奏效或如上所述。我在这里有点不知所措,所以如果有人知道上述示例应该工作的任何原因或有其他解决方案,那就太棒了。
我正在寻找的是一种限制单个 Linux 实例的方法,然后我应该能够使其适用于多个 Docker 容器。
- - - - - - - - 编辑 - - - - - - - -
我尝试了几个不同的 tc 命令,但其中一个是这样的
DEV=eth0
tc qdisc del dev $DEV root
tc qdisc add dev $DEV root handle 1: cbq avpkt 1000 bandwidth 100mbit
tc …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 Dijkstra 代码找到两个主机 H1 和 H2 之间的最短路径。在该路径上的其中一个开关中设置条件。条件是:如果数据包发送到H2则自动改变路径。
我正在使用 Mininet,我想通过过滤进入交换机并发送到 H2 的数据包来使用tc来减少出站带宽,然后 Dijkstra 代码将改变路径。
我想问一下,我可以使用(tc qdisc)来控制给定链路上出站带宽的使用吗?请问TC物理链路或仿真链路上的效果呢?
在 Linux tc 中使用“u32 match ip sport 80”我可以匹配端口 80,但是如何匹配端口范围 10000 - 20000 ?
这个问题涉及到另外一个问题有很大的答案,脚本从@Oliver。
目标:我想修改/扩展此答案中提供的脚本 以满足我的要求,如下所示:
我有大量客户(最多 1000 个)。应根据其 CN(通用名称)为每个客户端分配一个订阅类别和相应的最大数据速率。这些速率限制应在客户端连接时应用,并在断开连接时移除:
bronze: 1 兆位silver: 10 兆比特gold: 100 兆比特我想在客户端连接到 OpenVPN 服务器时动态调整每个客户端的订阅类和相应的活动数据速率限制。客户端不必重新连接到 OpenVPN 服务器。这是可能的,还是我们必须断开每个客户端并将其重新连接到 OpenVPN 以导致再次调用脚本来更改tc配置?
不是tc使用 shell 手动修改配置,我们如何从另一台计算机或应用程序(即通过 PHP)动态更新客户端订阅类和相应的活动数据速率限制?
非常感谢
我一直在添加规则/设置(不知道正确的术语做法是什么)用tc/ netem,比如tc qdisc add dev eth0 root netem delay 25ms,使用后已经删除它们。
但是,现在我想检查哪些规则/设置仍然有效。是否有查看或检查所有活动netem规则的命令?我认为等效的iptables命令类似于iptables -L.
在 linux 中,考虑这个用例:
1. User initiates http request for webpage to remote server
2. Remote server answers request and sends packets
Run Code Online (Sandbox Code Playgroud)
是否有任何关于启动进程的用户的参考,该进程在远程服务器发送的传入数据包上向远程服务器发出请求?
我试图找出一种过滤入口流量的方法,以便我可以基于每个用户进行速率限制,而不仅仅是限制整个系统的速率。