Linux主机限速

使用脚本实现主机间流量限制

1.脚本使用命令

bash tc.bash {start|stop|restart|show}
tc.bash写绝对路径

2.关键点

TC=/sbin/tc
IF=ens33            # 网卡名称eth0,ens33
DNLD=1mbit          # DOWNLOAD Limit
UPLD=1mbit          # UPLOAD Limit 
IP=192.168.171.176     # 此处写本机IP,即限制所有主机访问本机的流量;如果填写固定IP,即限制该IP到本机的流量
U32="$TC filter add dev $IF protocol ip parent 1:0 prio 1 u32"

3.测试

主机A(192.168.1.10)需要拷贝主机B(192.168.1.20)的/tmp/tomcat7.tar.gz,需要进行限速


4.操作方法:

4.1.主机B部署tc.bash,脚本中IP=192.168.1.10,只限制主机A的下载速度,此时其他主机通过scp等方式拷贝主机B的数据,速度不受影响;

4.2.主机B部署tc.bash,脚本中IP=192.168.1.20(本机IP),此时限制所有主机从本机下载或传输数据的速度;

备注:如果有两台主机需要互相限速,但是不限制其他主机,可以在两台主机同时部署tc.bash,然后IP填写对方主机即可.


脚本原文:

#!/bin/bash
#
#  tc uses the following units when passed as a parameter.
#  kbps: Kilobytes per second 
#  mbps: Megabytes per second
#  kbit: Kilobits per second
#  mbit: Megabits per second
#  bps: Bytes per second 
#       Amounts of data can be specified in:
#       kb or k: Kilobytes
#       mb or m: Megabytes
#       mbit: Megabits
#       kbit: Kilobits
#  To get the byte figure from bits, divide the number by 8 bit
#
TC=/sbin/tc
IF=ens33            # Interface
DNLD=1mbit          # DOWNLOAD Limit
UPLD=1mbit          # UPLOAD Limit 
IP=192.168.1.176     # Host IP
U32="$TC filter add dev $IF protocol ip parent 1:0 prio 1 u32"

start() {

    $TC qdisc add dev $IF root handle 1: htb default 30
    $TC class add dev $IF parent 1: classid 1:1 htb rate $DNLD
    $TC class add dev $IF parent 1: classid 1:2 htb rate $UPLD
    $U32 match ip dst $IP/32 flowid 1:1
    $U32 match ip src $IP/32 flowid 1:2

}

stop() {

    $TC qdisc del dev $IF root

}

restart() {

    stop
    sleep 1
    start

}

show() {

    $TC -s qdisc ls dev $IF

}

case "$1" in

  start)

    echo -n "Starting bandwidth shaping: "
    start
    echo "done"
    ;;

  stop)

    echo -n "Stopping bandwidth shaping: "
    stop
    echo "done"
    ;;

  restart)

    echo -n "Restarting bandwidth shaping: "
    restart
    echo "done"
    ;;

  show)

    echo "Bandwidth shaping status for $IF:\n"
    show
    echo ""
    ;;

  *)

    pwd=$(pwd)
    echo "Usage: $(/usr/bin/dirname $pwd)/tc.bash {start|stop|restart|show}"
    ;;

esac

exit 0
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux tc(Traffic Control)是一种用于限制网络带宽的命令行工具。通过使用tc命令,我们可以控制特定接口的出入流量,从而限制网络的速度。 在使用tc进行限速之前,我们首先需要了解一些基本概念。TC涉及的三个主要概念是:类别(class)、过滤器(filter)和队列(queue)。类别定义了包的属性和限制,过滤器定义了哪些包应该被当作哪一类别进行处理,队列则决定了包的传输顺序。 通过以下步骤可以在Linux上使用tc限速: 1. 安装tc命令:在大多数Linux发行版上,tc命令已经默认安装了。如果你的系统上没有tc命令,可以通过包管理器进行安装。 2. 创建一个根类别(root class):使用tc命令创建一个根类别,该类别将负责整个网络接口的限速。 3. 创建子类别和队列:在根类别下创建子类别,每个子类别对应不同的限速策略。然后,为每个子类别创建队列,该队列将控制包的传输顺序。 4. 添加过滤器:使用tc命令指定哪些包应该被当作哪个子类别进行处理,可以根据源IP、目标IP、端口等进行过滤。 5. 设置限速参数:为每个子类别设置带宽限制、延迟、丢包率等参数,以达到限速的目的。 6. 启用限速规则:使用tc命令激活限速规则,将其应用到指定的网络接口上。 通过以上步骤,我们就可以成功使用Linux的tc命令进行网络限速了。请注意,对于一些复杂的限速需求,可能需要更详细的配置,例如使用htb算法对不同的子类别进行更精细的控制。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值