linux系统下利用TC进行流量控制实例

本文利用vmware虚拟机搭建linux环境, 并模拟一些复制网络的情形。

一、网络带宽限速

linux下进行带宽限速,需要使用分类队列,其原理主要是对网络设备的发送接口(原则上接收接口无非进行流量控制),数据包进入一个分类的队列后,它就需要被送到某一个类中,也就是说需要对数据包做分类处理。对数据包进行分类的工具是过滤器,过滤器会返回一个决定,队列规定就根据这个决定把数据包送入相应的类进行排队。每个子类都可以再次使用它们的过滤器进行进一步的分类。直到不需要进一步分类时,数据包才进入该类包含的队列排队。

Linux流量控制主要分为建立队列、建立分类和建立过滤器三个方面。
基本实现步骤。
       1) 针对网络物理设备(如以太网卡eth0)绑定一个队列qdisc;

       2) 在该队列上建立分类class;

       3) 为每一分类建立一个基于路由的过滤器filter;

       4) 最后与过滤器相配合,建立特定的路由表。

1、绑定qdisc队列(本文主要使用CBQ队列)

      tc qdisc add dev ens33 root handle 1: cbq bandwidth 100kbit avpkt 1000 cell 8 mpu 64

该命令的含义是:将一个cbq队列绑定到网络物理设备ens33上,其编号为1:0;网络物理设备ens33的实际带宽为100kbit,包的平均大小为1000字节;包间隔发送单元的大小为8字节,最小传输包大小为64字节。

2、建立分类

     tc class add dev ens33 parent 1:0 classid 1:1 cbq bandwidth 100kbit rate 100kbit maxburst 20 allot 1514 prio 8 avpkt 1000 cell 8 weight 10kbit  

创建根分类1:1,该队列的最大可用带宽为100kbit,实际分配的带宽为100kbit,可接收冲突的发送最长包数目为20字节,最大传输单元加MAC头的大小为1514字节,优先级别为8,包的平均大小为1000字节,包间隔发送单元的大小为8字节,相当于实际带宽的加权速率为10kbit。

     tc class add dev ens33 parent 1:1 classid 1:2 cbq bandwidth 100kbit rate 80kbit maxburst 20 allot 1514 prio 2 avpkt 1000 cell 8 weight 8kbit split 1:0 bounded

创建分类1:2,其父类为1:1,该队列的最大可用带宽为10kbit,实际分配的带宽为80kbit,可接收冲突的发送最长包数目为20字节,最大传输单元加MAC头的大小为1514字节,优先级别为2,包的平均大小为1000字节,包间隔发送单元的大小为8字节,相当于实际带宽的加权速率为8kbit,分类的分离点为1:0,且不可借用未使用带宽。

3、创建过滤器

tc filter add dev ens33 parent 1:0 protocol ip prio 100 route

应用路由分类器到cbq队列的根,父分类编号为1:0;过滤协议为ip,优先级别为100,过滤器为基于路由表。

tc filter add dev ens33 parent 1:0 protocol ip prio 100 route to 2 flowid 1:2

建立路由映射分类 1:2。

4、建立路由

ip route add 119.0.0.0/8 dev ens33 via 192.168.17.2 realm 2

发往子网119.0.0.0/8的数据包通过分类2转发(分类2的速率80kbit),这里的子网119.0.0.0/8为我当时测试抓包分析得到的百度网盘上传所使用的ip段,由于只是简单演示限速效果,因此只限速部分上传流的ip。

5、以上所有命令效果截图

6、实际限速效果对比

限速前,上传本地一文件到百度网盘,可以看出上传速率可以达到1000KB/s。

限速后,上传同一文件到百度网盘,速度被限制到了几十KB/s,但这里有个问题是,由于未能百度上传所有ip段覆盖,因此,最终上传还是会很快成功(考虑百度上传是否并不是完全从本地上传,而是利用网络上的其他地方资源或者库资源,快速完成上传)。所以,实际上,这里只是演示限速效果,证明带宽限速的配置已经生效。

7、监控

简单显示指定设备(这里为ens33)的分类状况

tc class ls dev ens33


详细显示指定设备(这里为ens33)的分类状况(该命令对应查看限速效果比较重要)

tc -s class ls dev ens33

从图中可以看出,分类器1:2 发送了3508个包,总计7606285字节,超过速率限制的包的数目为10595个。

以上,就是简单介绍一个TC限速配置的实例,相关参考如下:

https://blog.csdn.net/u011641885/article/details/45640313 (主要)

https://blog.csdn.net/eydwyz/article/details/52164889

https://www.jianshu.com/p/4b5cc3845f2c

http://www.tldp.org/HOWTO/html_single/Traffic-Control-HOWTO/(TC的一个帮助文档,暂时还未细看)

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值