Linux 网络带宽限制方法大全,快速解决大流量问题! (linux 限制带宽)

随着互联网的不断发展与普及,网络带宽的使用也愈加广泛。对于一些大型企业或机构而言,网络带宽的使用量也愈加巨大,其中无不缺少大流量问题的困扰。今天就来讲一下,在使用Linux平台的服务器上,如何进行网络带宽限制,以解决大流量问题。

一、使用 iptables

iptables 是一款Linux内核中的防火墙工具,也是一款网络地址转换(NAT)工具。在进行网络带宽限制时,我们可以使用 iptables 来实现,其具体操作如下:

1.限制某个 IP 的更大带宽

我们可以使用 iptables 的限制功能来限制某个 IP 的更大带宽。具体操作如下:

“`

iptables -A INPUT -s 1.2.3.4 -p tcp –dport 80 -m limit –limit 50/s –limit-burst 100 -j ACCEPT

iptables -A INPUT -s 1.2.3.4 -j DROP

“`

其中,1.2.3.4 代表 IP 地址,–dport 80 表示端口为80。–limit 50/s 表示每秒钟只允许50个连接,–limit-burst 100 表示允许突发100个连接,大家可以根据自己需求进行调整。

2.限制某个端口的更大带宽

我们也可以使用 iptables 来限制某个端口的更大带宽。具体操作如下:

“`

iptables -A OUTPUT -p tcp –sport 80 -m limit –limit 10/s –limit-burst 20 -j ACCEPT

iptables -A OUTPUT -p tcp –sport 80 -j DROP

“`

其中,–sport 80 表示源端口为80,其他参数含义同上。

3.限制总带宽

如果我们希望限制整个服务器的带宽,可以使用 tc 来实现。首先需要安装 tc 工具:

“`

yum install tc -y

“`

安装完成后,我们可以使用如下命令来限制总带宽:

“`

tc qdisc add dev eth0 root tbf rate 1mbps burst 32kbit latency 400ms

“`

其中,eth0 代表网络接口名称,rate 1mbps 表示限制带宽为1Mbps,burst 32kbit 表示允许突发32kbit的流量,latency 400ms 表示延迟为400毫秒。

二、使用 Tc

Tc 是一款 Linux 内核功能的一部分,具有限制网络带宽的功能。tc 的设置较为复杂,但是可以更精细地进行带宽限制,对于大流量问题较为可靠。它主要基于 HTB(Hierarchical Token Bucket)算法,是目前 Linux 平台上的公认带宽控制方式。具体操作如下:

1.安装 tc 工具

安装 tc 工具的方式同 iptables 部分。

2.限制某个端口的更大带宽

需要先进行以下操作:

“`

tc qdisc add dev eth0 root handle 1: htb default 10

“`

其中,eth0 代表网络接口名称,handle 1: 表示将本规则存放在类别 1 中,default 10 表示设置默认类别为 10。然后执行以下指令:

“`

tc class add dev eth0 parent 1: classid 1:1 htb rate 256kbps ceil 256kbps

tc class add dev eth0 parent 1:1 classid 1:10 htb rate 200kbps ceil 256kbps

tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip sport 80 0xffff flowid 1:10

“`

其中,rate 指限制的更大带宽速率,ceil 指更大平均带宽速率,test 80 为限制端口号,若想限制多个端口号,则使用“&&”隔开。

3.限制某个 IP 的更大带宽

我们还可以对某个 IP 进行带宽限制,具体操作如下:

“`

tc filter add dev eth0 parent 1:0 protocol ip prio 1 u32 match ip src 1.2.3.4/32 flowid 1:10

“`

其中,1.2.3.4 为限制的 IP 地址,flowid 后接的数字为上面定义的“类别编号:规则编号”。

以上是两种方法来实现在 Linux 平台上对网络带宽进行限制。可以根据自己的需求进行选择。如果只是限制某一端口的更大带宽,则可以使用 iptables;如果要更为精细的带宽控制,则可以考虑使用 tc 工具。

相关问题拓展阅读:

关于Linux网卡带宽设置的问题

首先你得netem QDiscipline设置看起来没什么区别,limit太大,loss 0%和默认一样,剩下的delay 10ms都是指所有pakcat按照延迟10ms进行发送

至于你的TBF设置,用了TBF自身提供的两个途径

TBF叫做Token Bucket Filter.总体的思路就是数据包要领到Token(令牌)才能被发送,而令牌的产生速率收到rate这个参数的限制。Token是一个抽象的概念,Token的大小都是指的Token所指向的数据包的大小。

当要发送的速率低于令牌产生的速度时,所有的数据包都能领到Token,并且多余的Token会在你的Buffer里积累。积累的上限由Buffer/Burst这个参数指定。

当发送的速率等于Token产生的速度时,Token正好被完全消耗,所有雹颤的数据包都会发送,并且buffer不会积累多余的Token

当发送的速率大于Token的速率,如果Buffer里还有多余的Token,就会开始消耗Buffer的Token,同时允许数据包通过。如果buffer的Token耗尽,数据包就不被允许通过,并且进入Txqueue(发送队列)排队。如果排队的尺寸大于limit(你的之一个TBF有指定),则队列不能再增长,新到来的数据包会被drop。

明白上面的镇好概念之后你的两条命令的区别也就容易看懂了。

之一个是用的Buffer/Limit

Buffer就是瞬间可以额外提供的Token的数量。Rate限制了你的持续上传速率为1Mb/s,然后在你长时间网络流量很低时,你得Token会积累,最后你可以有Buffer这么大(1600b)的缓冲无视rate的限制(可以瞬间发送1600b,所以叫做突发)。至于后面的limit 3000,是指你当你的缓冲区(Txqueue)超过3000b时,新来的包会被Drop

第二个用的是御肆铅Burst/latency/rate组合

这里的burst和上面的buffer含义完全相同,都是能够以高于rate所限定的速度发送的数据量(4Mb,比之一个的大很多)。至于Latency,是对应limit的量。Latency规定的是数据包能在Txqueue中呆的最长的时间(你的是1S),在Txqueue中呆超过1s的包都会被Drop。所以结合你的rate来计算,latency 1s+rate 1Mbit/s 等价于 limit为1Mbit*1s=1Mb

*tc只能规整egress traffic,就是从NIC流出的流量(上传),对于下载,要用IFB将ingress(下载)模拟成egress

linux 限制带宽的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于linux 限制带宽,Linux 网络带宽限制方法大全,快速解决大流量问题!,关于Linux网卡带宽设置的问题的信息别忘了在本站进行查找喔。


数据运维技术 » Linux 网络带宽限制方法大全,快速解决大流量问题! (linux 限制带宽)