一.TC限速相关介绍

1.TC限速原理介绍
Linux操作系统中的流量控制器TC(Traffic Control)用于Linux内核的流量控制,主要是通过在输出端口处建立一个队列来实现流量控制。
接收包从输入接口进来后,经过流量限制丢弃不符合规定的数据包,由输入多路分配器进行判断选择,如果接收包的目的主机是本主机,那么将该包送给上层处理,否则需要进行转发,将接收包交到转发块(Forwarding Block)处理。转发块同时也接收本主机上层(TCP、UDP等)产生的包,通过查看路由表,决定所处理包的下一跳。然后,对包进行排列以便将它们送到输出接口。
从以上介绍可以看出,TC只能对网卡发出的数据包做分类限制,不能对网卡接收的数据包做分类限制,但是可以对网卡接收的数据包流量做一个整体限制。因为我们项目中只需要对网卡接收的流量做整体限制,所以TC刚好可以满足我们对网卡流量双向限制的要求。

2.TC限速基本概念介绍
TC对流量的处理由三种对象控制,它们是:
队列规则 qdisc(queueing discipline)
类(class)
分类器(Classifiers).

qdisc队列规则(queueing discipline)
qdisc(队列规则)是queueing discipline的简写,它是理解流量控制(traffic control)的基础。无论何时,内核如果需要通过某个网络接口发送数据包,它都需要按照为这个接口配置的qdisc把数据包加入队列。然后,内核会尽可能多地从qdisc里面取出数据包,把它们交给网络适配器驱动模块。最简单的qdisc是pfifo,它不对进入的数据包做任何的处理,数据包采用先入先出的方式通过队列。不过,它会保存网络接口一时无法处理的数据包。
可分类的qdisc包括:
(1)CBQ
CBQ是Class Based Queueing(基于类别排队)的缩写。它实现了一个丰富的连接共享类别结构,既有限制(shaping)带宽的能力,也具有带宽优先级管理的能力。带宽限制是通过计算连接的空闲时间完成的。空闲时间的计算标准是数据包离队事件的频率和下层连接(数据链路层)的带宽。
(2)HTB
HTB是Hierarchy Token Bucket的缩写。通过在实践基础上的改进,它实现了一个丰富的连接共享类别体系。使用HTB可以很容易地保证每个类别的带宽,虽然它也允许特定的类可以突破带宽上限,占用别的类的带宽。HTB可以通过TBF(Token Bucket Filter)实现带宽限制,也能够划分类别的优先级。
(3)PRIO
PRIO qdisc不能限制带宽,因为属于不同类别的数据包是顺序离队的。使用PRIO qdisc可以很容易对流量进行优先级管理,只有属于高优先级类别的数据包全部发送完毕,才会发送属于低优先级类别的数据包。为了方便管理,需要使用iptables或者ipchains处理数据包的服务类型(Type Of Service,ToS)。

Class 类
某些qdisc可以包含一些类别,不同的类别中可以包含更深入的qdisc,通过这些细分的qdisc还可以为进入队列的数据包排队。通过设置各种类别数据包的离队次序,qdisc可以设置网络数据流量的优先级。

Filter 规则
Filter(过滤器)用于为数据包分类,决定它们按照何种qdisc进入队列。无论何时数据包进入一个划分子类的类别中,都需要进行分类。分类的方法可以有多种,使用fileter(过滤器)就是其中之一。使用filter(过滤器)分类时,内核会调用附属于这个类(class)的所有过滤器,直到返回一个判决。如果没有判决返回,就作进一步的处理,而处理方式和qdisc有关。需要注意的是,filter(过滤器)是在qdisc内部,它们不能作为主体。

二.TC限速操作

1.虚拟机流入流量限制
(1)清除tap01网卡设备上所有的流入规则,防止与新添加的规则冲突。
# tc qdisc del dev tap01 root
(2)在网络设备tap01上绑定一个htb类型的qdisc根队列
# tc qdisc add dev tap01 root handle 1: htb default 9999
(3)在qdisc根队列1:下创建一个子类1:5,并设置子类的流量速率为50Mb/s
# tc class add dev tap01 parent 1: classid 1:5 htb rate 50Mbit burst 1Mbit
(4)为子类1:5添加随机公平队列sfq,防止该类被某一会话连接独占
# tc qdisc add dev tap01 parent 1:5 handle 5: sfq perturb 10
(5)为子类1:5添加过滤器,用来将目标地址为0.0.0.0/0(指所有网络)的数据包发往类1:5,使用其中的规则出队
# tc filter add dev tap01 parent 1: protocol ip prio 1 u32 match ip dst 0.0.0.0/0 flowid 1:5
注: tap01为虚拟机连接到网桥的网卡,与虚拟机内部的网卡一一对应。因tap01口的出方向的流量就是进入虚拟机内部网卡的流量,所以限制tap01口的出方向的流量,就可以限制流入虚拟机的网络流量。

2.虚拟机流出流量限制
(1)清除tap01网卡设备上所有的流入规则,防止与新添加的规则冲突。
# tc qdisc del dev tap01 ingress
(2)在网络设备tap01上绑定一个处理ingress流量的qdisc根队列
# tc qdisc add dev tap01 ingress handle ffff:
(3)为类ffff:添加过滤器,并限制流量为50Mb/s
# tc filter add dev tap01 parent ffff: protocol all prio 1 basic police rate 50Mbit burst 10Mbit mtu 65535 drop
注: tap01为虚拟机连接到网桥的网卡,与虚拟机内部的网卡一一对应。因tap01口的入方向的流量就是虚拟机内部网卡发出的流量,所以限制tap01口的入方向的流量,即可限制流出虚拟机的网络流量。
命令中的数字10和65535存在关联性,需要一起修改,否则会导致限速不准确。

TC限速原理和TC限速的实现相关推荐

  1. ifb与tc police对接收方向限速性能比较

    参考: [1]https://www.cnblogs.com/xingmuxin/p/10826703.html [2]https://blog.csdn.net/dog250/article/det ...

  2. 使用TC工具针对端口的限速

    假设对80和8080端口限速 1.建立eth0队列(根据自己环境定) tc qdisc add dev eth0 root handle 1: htb default 20 命令解释:将一个htb队列 ...

  3. tc端口流量控制(带宽限速)

    tc端口流量控制 tc真的是个巨坑,搞了一天才明白问题出在哪,记录一下. tc前置 首先强调一下,tc只管发包,不管收包的事.tc只管发包,不管收包的事.tc只管发包,不管收包的事.重要的事说三遍,坑 ...

  4. Linux网卡限速下载,端口限速下载脚本,网卡流量监控脚本

    限速脚本:命令 "./limitRate.sh help (帮助)" "./limitRate.sh stop (停止限速)"  "./limitRa ...

  5. linux 限速命令,Linux路由器限速设置详细教程

    linux的开源和免费使得越来越多的厂家用它来做防火墙和路由器,如海蜘蛛,飞鱼星等,其实我们也可以用linux来打造一台高性能的路由器.下面就以red hat为例(其他版本大同小异)教大家做一台能限速 ...

  6. linux 限速命令,linux 路由器限速实现方法

    linux 路由器限速实现方法 linux的开源和免费使得越来越多的厂家用它来做防火墙和路由器,今天本文用linux来打造一台高性能的能够限速的路由器.文章就以red hat为例教大家在linux下进 ...

  7. linux 限速命令,Linux路由器限速设置进程

    Linux路由器限速设置进程 设备linux假定是菜鸟请设备时设备图形桌面.Linux路由器限速的设置进程如下: 路由器限速榜首步:树立adsl联接,在体系设置--网络设置处有.在图形界面下很简略搞定 ...

  8. Mybatis插件原理和PageHelper结合实战分页插件(七)

    今天和大家分享下mybatis的一个分页插件PageHelper,在讲解PageHelper之前我们需要先了解下mybatis的插件原理.PageHelper 的官方网站:https://github ...

  9. HBase学习指南之HBase原理和Shell使用

    HBase学习指南之HBase原理和Shell使用 参考资料: 1.https://www.cnblogs.com/nexiyi/p/hbase_shell.html,hbase shell 转载于: ...

最新文章

  1. 那个linux系统带有安装工具,linux系统程序安装(一)rpm工具
  2. 如何在SAP CRM WebClient UI上打开外部链接
  3. idea的maven调用本地仓库的jar报错
  4. java读取redis数据_Java连接redis操作数据
  5. js 使用Rsa 加密 解密
  6. P2P技术体系结构与分类
  7. 【电源模块】TPS54331 DCDC降压芯片设计
  8. 青果教务处系统爬虫(java)
  9. java 读取word模板文件路径_Java 读取Word模板替换内容并另存
  10. java 校验 签名_使用JAVA实现签名验证示例程序详解
  11. 这篇文章应该在《新闻联播》连续报道一个月--武汉大学毕业生的反思
  12. 详解java -jar命令及SpringBoot通过java -jav启动的过程
  13. HTML5+CSS3小实例:鼠标悬停发光按钮
  14. Vue百度地图电子围栏
  15. Matlab:利用Matlab软件进行GUI界面设计实现图像的基本操作
  16. docker发布一个springboot项目真香
  17. 信安Note_day10
  18. 批量转txt文本编码,由utf-8转为ANSI(ASCII)
  19. EACCES: access denied‘ does your client key have mgr caps
  20. 单商户商城系统功能拆解07—个人中心

热门文章

  1. python双柱状图与双折线图_双坐标实现图标中同时存在柱状图和折线图
  2. Java Ftp客户端
  3. 2018滴水LUA手游脚本制作实战视频教程
  4. 编写一个帮助小学生练习数学的程序,帮助小学生练习 100 以内的四种数学运算:加、减、乘、除。
  5. Chrome如何使用
  6. 成都艾司博讯:什么是拼多多网店的品质退款率?
  7. 教育直播APP开发,在线教育系统开发,主要功能
  8. 守望先锋地图工坊分享合集
  9. java中utp_5类UTP比3类UTP扭矩_______。
  10. react-native电影简介app,了解一下?(android端)