linux端口限流量,Linux 上的TC 流量控制几个例子(80端口流量限制)

你可以使用tc 命令,对服务器上指定的端口和服务器进行调整限制。

令牌桶 (TB)

令牌桶是一个常见的算法,用于控制进入到网络的数据量,允许将发送数据突发。它是用于网络流量控制或速率限制。随着令牌桶中,您可以定义一个接口上允许的最大速率在给定时间的交通。

tokens/sec

| |

|| Bucket to

|| to hold b tokens

+======+=====+

|

|

| \|/

Packets | +============+

stream | ---> | token wait | ---> Remove token ---> eth0

| +============+

The TB filter puts tokens into the bucket at a certain rate.

Each token is permission for the source to send a specific number of bits into the network.

Bucket can hold b tokens as per shaping rules.

Kernel can send packet if you’ve a token else traffic need to wait.

我如何使用TC命令?

e022294c6395d58142b351286cb05bf1.png警告!这些例子,需要很好地理解TCP/ IP和其它网络概念。所有新的用户,应尽量在测试环境中的例子。

TC命令是默认安装在我的Linux发行版。要列出现有规则,请输入:

# tc -s qdisc ls dev eth0

样本输出:

qdisc pfifo_fast 0: root bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1

Sent 2732108 bytes 10732 pkt (dropped 0, overlimits 0 requeues 0)

rate 0bit 0pps backlog 0b 0p requeues 0

你首先流量整形规则

首先,发送ping请求cyberciti.biz你本地的Linux工作站,并注意下ping的时间,输入:

# ping cyberciti.biz

样本输出:

PING cyberciti.biz (74.86.48.99) 56(84) bytes of data.

64 bytes from txvip1.simplyguide.org (74.86.48.99): icmp_seq=1 ttl=47 time=304 ms

64 bytes from txvip1.simplyguide.org (74.86.48.99): icmp_seq=2 ttl=47 time=304 ms

64 bytes from txvip1.simplyguide.org (74.86.48.99): icmp_seq=3 ttl=47 time=304 ms

64 bytes from txvip1.simplyguide.org (74.86.48.99): icmp_seq=4 ttl=47 time=304 ms

64 bytes from txvip1.simplyguide.org (74.86.48.99): icmp_seq=5 ttl=47 time=304 ms

64 bytes from txvip1.simplyguide.org (74.86.48.99): icmp_seq=6 ttl=47 time=304 ms

键入下面的TC命令减慢200毫秒

# tc qdisc add dev eth0 root netem delay 200ms

现在,再次运行ping 请求

# ping cyberciti.biz

输出样本:

PING cyberciti.biz (74.86.48.99) 56(84) bytes of data.

64 bytes from txvip1.simplyguide.org (74.86.48.99): icmp_seq=1 ttl=47 time=505 ms

64 bytes from txvip1.simplyguide.org (74.86.48.99): icmp_seq=2 ttl=47 time=505 ms

64 bytes from txvip1.simplyguide.org (74.86.48.99): icmp_seq=3 ttl=47 time=505 ms

64 bytes from txvip1.simplyguide.org (74.86.48.99): icmp_seq=4 ttl=47 time=505 ms

64 bytes from txvip1.simplyguide.org (74.86.48.99): icmp_seq=5 ttl=47 time=505 ms

64 bytes from txvip1.simplyguide.org (74.86.48.99): icmp_seq=6 ttl=47 time=505 ms

64 bytes from txvip1.simplyguide.org (74.86.48.99): icmp_seq=7 ttl=47 time=505 ms

64 bytes from txvip1.simplyguide.org (74.86.48.99): icmp_seq=8 ttl=47 time=505 ms

^C

--- cyberciti.biz ping statistics ---

8 packets transmitted, 8 received, 0% packet loss, time 7006ms

rtt min/avg/max/mdev = 504.464/505.303/506.308/0.949 ms

要列出当前规则,请输入

# tc -s qdisc ls dev eth0

输出样本:

qdisc netem 8001: root limit 1000 delay 200.0ms

Sent 175545 bytes 540 pkt (dropped 0, overlimits 0 requeues 0)

rate 0bit 0pps backlog 0b 0p requeues 0

想删除全部规则,请输入

# tc qdisc del dev eth0 root

# tc -s qdisc ls dev eth0

TBF的范例

要附加一个持续的最大速率1Mbit / s的,peakrate2.0mbit/ S,10kilobyte缓冲区一个TBF的计算,使TBF的原因最多70ms的延迟,与完美的peakrate行为,与前斗队列大小限制,,输入:

# tc qdisc add dev eth0 root tbf rate 1mbit burst 10kb latency 70ms peakrate 2mbit minburst 1540

HTB – 层次令牌桶

要控制在一个给定的链接使用HTB的出口带宽的使用:

1.rate – 您可以设置允许的带宽。

2.ceil – 您可以设置的突发带宽时,允许桶。

3.prio – 您可以设置额外的带宽优先级。 prios较低的类所提供的带宽。例如,您可以给DNS流量和HTTP下载PRIO较低。

4.iptables和TC:你需要使用iptables和TC如下:控制出站HTTP流量。

示例: HTTP 出站流量整形

首先,删除eth1 网卡上已存在的规则:

# /sbin/tc qdisc del dev eth1 root

打开队列规则,输入:

# /sbin/tc qdisc add dev eth1 root handle 1:0 htb default 10

定义类的限制,即允许的带宽为512千字节到640千字节的端口80和突发带宽:

# /sbin/tc class add dev eth1 parent 1:0 classid 1:10 htb rate 512kbps ceil 640kbps prio 0

请注意,端口80是不是在上面的类中定义的任何地方。您将使用iptables裂伤规则如下:

# /sbin/iptables -A OUTPUT -t mangle -p tcp --sport 80 -j MARK --set-mark 10

要保存iptables 规则,请输入下列命令,(RHEL 为例):

# /sbin/service iptables save

最后,将其分配给 qdisc:

# tc filter add dev eth1 parent 1:0 prio 0 protocol ip handle 10 fw flowid 1:10

下面是端口80和22的另一个例子:

/sbin/tc qdisc add dev eth0 root handle 1: htb

/sbin/tc class add dev eth0 parent 1: classid 1:1 htb rate 1024kbps

/sbin/tc class add dev eth0 parent 1:1 classid 1:5 htb rate 512kbps ceil 640kbps prio 1

/sbin/tc class add dev eth0 parent 1:1 classid 1:6 htb rate 100kbps ceil 160kbps prio 0

/sbin/tc filter add dev eth0 parent 1:0 prio 1 protocol ip handle 5 fw flowid 1:5

/sbin/tc filter add dev eth0 parent 1:0 prio 0 protocol ip handle 6 fw flowid 1:6

/sbin/iptables -A OUTPUT -t mangle -p tcp --sport 80 -j MARK --set-mark 5

/sbin/iptables -A OUTPUT -t mangle -p tcp --sport 22 -j MARK --set-mark 6

我如何监控和测试速度呢?

使用一下工具

# /sbin/tc -s -d class show dev eth0

# /sbin/iptables -t mangle -n -v -L

# iptraf

# watch /sbin/tc -s -d class show dev eth0

要测试下载速度使用LFTP或者wget命令行工具。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux系统中,可以使用以下工具实现基于端口流量控制: 1. tc:是Linux内核中的Traffic Control子系统,可以用来限制网络流量,例如带宽限制、延迟限制、丢包率限制等。使用tc可以创建一个qdisc队列规则,然后将需要进行流量控制的网络接口绑定到该规则上。 2. iptables:是Linux内核中的防火墙子系统,可以通过iptables规则来实现端口级别的流量控制。例如可以通过iptables规则将某个端口流量限制在一定的带宽范围内。 下面是一个基于tc实现端口级别的流量控制的示例: 1. 创建一个名为eth0的网络接口的qdisc队列规则: ``` tc qdisc add dev eth0 root handle 1: htb default 10 ``` 2. 将80端口绑定到该规则上,并限制其带宽为1Mbps: ``` tc class add dev eth0 parent 1: classid 1:1 htb rate 1mbit tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dport 80 0xffff flowid 1:1 ``` 以上命令的详细解释如下: - `tc qdisc add dev eth0 root handle 1: htb default 10`:创建一个名为eth0的网络接口的qdisc队列规则,使用htb算法,将默认流量流向编号为10的类别中。 - `tc class add dev eth0 parent 1: classid 1:1 htb rate 1mbit`:创建一个名为1:1的类别,将其父类别指定为1:(即默认流量),限制该类别的带宽为1Mbps。 - `tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dport 80 0xffff flowid 1:1`:将80端口绑定到该规则上,限制其带宽为1Mbps。具体地,该命令首先创建一个名为1:1的类别,将其父类别指定为1:(即默认流量),限制该类别的带宽为1Mbps;然后使用u32匹配规则,将dport(即目标端口)为80的流量流向1:1类别中。 这样,就可以在Linux系统中实现基于端口流量控制了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值