我正在尝试使用 限制带宽tc并使用iperf. 我是这样开始的:
# iperf -c 192.168.2.1
------------------------------------------------------------
Client connecting to 192.168.2.1, TCP port 5001
TCP window size: 23.5 KByte (default)
------------------------------------------------------------
[ 3] local 192.168.2.7 port 35213 connected with 192.168.2.1 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 830 MBytes 696 Mbits/sec
Run Code Online (Sandbox Code Playgroud)
两个实例通过以太网直接相连。
然后我设置了htb qdisc一个默认类以将带宽限制为 1mbit/sec:
# tc qdisc add dev bond0 root handle 1: htb default 12
# tc class add dev bond0 parent 1: classid 1:12 htb rate …Run Code Online (Sandbox Code Playgroud) 我已经阅读了很多次关于Linux 的令牌桶过滤器 (tbf) 的内容,但我仍然不完全理解我应该如何计算burst和latency参数,我很惭愧:(
我认为合理的延迟约为 50 毫秒。好的,但是 burst 应该取什么值?
手册页说:
后一种计算考虑了存储桶的大小、速率以及可能的峰值速率(如果设置)。这两个参数是互斥的。
那么,延迟与存储桶和过滤器有何关系?有计算公式吗?或者仅仅是“好吧,X 字节的突发和 Y 秒的延迟对我有好处”?
我有一个 4 端口网桥:
root@Linux-Switch:~# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.000024cd2cb0 no eth0
eth1
eth2
eth3
Run Code Online (Sandbox Code Playgroud)
我的目标是限制eth2接口的上传速度。(eth0 是上行交换机的上行接口)。我一直在尝试通过 tc 和 iptables 来做到这一点。
# tried in both the filter table and mangle table
iptables -A FORWARD -t mangle -m physdev --physdev-in eth2 -j MARK --set-mark 5
tc qdisc add dev eth0 root handle 1:0 htb default 2
tc class add dev eth0 parent 1:0 classid 1:1 htb rate 1mbit ceil 1mbit
tc class add dev eth0 parent …Run Code Online (Sandbox Code Playgroud) 我发现沿着 tc 有用的 run watch,例如:
[root@router ~]# watch -dc tc -p -s -d qdisc show dev eth0
Every 2,0s: tc -p -s -d qdisc show dev eth0 Sat Oct 19 21:22:26 2013
qdisc prio 1: root refcnt 2 bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
Sent 130714882 bytes 1107132 pkt (dropped 20379, overlimits 0 requeues 0)
rate 0bit 0pps backlog 0b 0p requeues 0
qdisc sfq 30: parent …Run Code Online (Sandbox Code Playgroud) 根据Linux 高级路由和流量控制 HOWTO 的这一部分,我无法tc限制计算机的网络速度。
路由器是摩托罗拉 SurfBoard 调制解调器,具有一些路由功能和防火墙。我想限制流量的机器是192.168.0.5,脚本也是从192.168.0.5运行的。
这是我对上面链接中的命令的改编/etc/NetworkManager/dispatcher.d/:
#!/bin/sh -eu
# clear any previous queuing disciplines (qdisc)
tc qdisc del dev wlan0 root 2>/dev/null ||:
# add a cbq qdisc; see `man tc-cbq' for details
if [ $2 = up ]; then
# set to a 3mbit interface for more precise calculations
tc qdisc add dev wlan0 root handle 1: cbq avpkt 1000 \
bandwidth 3mbit
# leave 30KB (240kbps) …Run Code Online (Sandbox Code Playgroud) 我有一个由我的互联网提供商设置的数据包速率限制(每秒最多 10 个)。如果我想使用 AceStream 播放器,这是一个问题,因为如果我超过限制,我就会断开连接。
如何限制该程序的互联网访问?
我尝试了建议的命令:
iptables -A OUTPUT -m limit --limit 10/s -j ACCEPT
Run Code Online (Sandbox Code Playgroud)
但我收到一条致命错误消息:
FATAL: Error inserting ip_tables (/lib/modules/3.2.0-67-generic/kernel/net/ipv4/netfilter/ip_tables.ko): Operation not permitted
iptables v1.4.12: can't initialize iptables table `filter': Table does not exist (do you need to insmod?)
Perhaps iptables or your kernel needs to be upgraded.
Run Code Online (Sandbox Code Playgroud)
具有管理员权限:
sudo iptables -A OUTPUT -m limit --limit 10/s -j ACCEPT
Run Code Online (Sandbox Code Playgroud)
没有错误信息了。但它仍然无法正常工作,我断开连接。
命令行中是否有错误?还是我必须使用 iptables 的其他参数?
下面是当我超出提供程序的限制时我得到的实际消息。
到目前为止,我尝试了不同的方法,但没有一个不起作用。
sudo iptables -A INPUT -p tcp --syn --dport 8621 -m connlimit --connlimit-above 10 …Run Code Online (Sandbox Code Playgroud) 我想知道以下设备在用于入口流量整形的数据包流中的确切位置:
我想更好地了解数据包如何流向该设备,以及何时发生这种情况,以了解可以使用以下哪些过滤/分类方法:
tc filter ... u32 ...iptables ... -j MARK --set-mark ...iptables ... -j CLASSIFY --set-class ...似乎很难找到关于这个主题的文档,任何可以找到官方文档的帮助也将不胜感激。
据我所知文档:
tc: tldp.org HOWTO , lartc.org HOWTOifb: linuxfoundation.org , tc-mirred manpage , wiki.gentoo.orgnetfilter数据包流:kernel_flow , docum.org kptd
从已知的文档中,我解释了以下内容:
基本流量控制
figure 1
+-------+ +------+
|ingress| +---------+ |egress|
|qdisc +--->netfilter+--->qdisc |
|eth0 | +---------+ |eth0 |
+-------+ +------+
Run Code Online (Sandbox Code Playgroud)
国际金融局?
tc filter add dev eth0 parent ffff: protocol all u32 match u32 0 0 …
我们已经说过,专用网络中的用户通过正在执行的地址( NAT)4连接到互联网。我必须配置为向用户提供访问权限,但对用户的带宽进行限制,而对其他用户则没有限制。Linux routerpublic IPnetwork address translationQoSInternet2
eth0:121.51.26.35
eth1:10.239.107.1
Run Code Online (Sandbox Code Playgroud)
eth0是Linux Router一个10Mbps链接。eth1连接到switch且4节点连接到switch。我想配置tc为2 nodes仅限制一组用户的带宽(XyZ in picture)以仅3Mbps累积使用。(当1个用户下载/上传时,他/她必须收到3Mbps,但当3个用户同时下载/上传时,他们必须收到1MBps)
首先请告诉我这个要求是否可以实现,如果是的话我该如何进行?
下面是拓扑图

我遇到了一个带宽脚本问题,我已经使用该脚本一段时间来限制端口上的传出带宽。
一开始它工作得很好,直到我想改变传出端口速度。我将其切换到更高的数字(200mbit 到 400mbit),然后重新启动了脚本。由于某种原因,新的带宽限制没有生效,旧的限制仍然存在。我将脚本设置为初始化服务。这就是代码的一部分。
# Interface
interface=eth0
# Define the upload, follow units can be
upload_limit=400mbit
start() {
# Start the tc configuration and set all packets default to 10
/sbin/tc qdisc add dev $interface root handle 1:0 htb default 10
# Set default speed for all packets
/sbin/tc class add dev $interface parent 1:0 classid 1:10 htb rate 1000mbit ceil 1000mbit prio 0
# Set speeds for packets marked with 20
/sbin/tc class add dev $interface parent 1:0 classid …Run Code Online (Sandbox Code Playgroud) 看着一样的工具TC,wondershaper,HTB和康卡斯特,所有这些工具似乎对网络接口的“连接组”中,或至少水平,为限制带宽操作。我想不是油门带宽一组连接,而是油门单个连接的最大速率。
具体来说:是否有可用的工具可用于调整单个 HTTP 请求的最大下载速率?
我想要做的是模拟从 S3 上的存储桶中获取的慢速请求。我看到对于远离数据中心的请求,单个项目的下载通常很慢(<500 kb/s),但并行下载会产生 >5 mb/s 的下载速度。
我可能可以通过在这些请求中添加延迟来部分解决问题(这会减慢整个串行请求的速度,但不会减慢整体带宽),但更直接的解决方案会很棒。
tc ×10
iptables ×4
qos ×4
linux ×3
networking ×3
application ×1
bandwidth ×1
bridge ×1
centos ×1
limit ×1
linux-kernel ×1
nat ×1
netfilter ×1
process ×1