首先,我们来看一下tc,TC(Traffic Control)命令,是linux自带的告警流控命令。Linux操作系统中的流量控制器TC(Traffic Control)用于Linux内核的流量控制,主要是通过在输出端口处建立一个队列来实现流量控制。一般只能限制网卡发送的数据包,不能限制网卡接收的数据包,所以可以通过改变发送次序来控制传输速率。Linux流量控制主要是在输出接口排列时进行处理和实现的。

限速场景,需要对当前设备的发包做限制。(其实本来想在接收包时做限制,但是tc只能对发包限制,收包限制不住)当前ens8端口为10GE光口,带宽可以达到1250MB/s。我们先限制总的网络流速为10000Mbit/s,然后再创建子类,将子类限制流速为100Mbit/s,最后再使用iptables命令将发包的端口与子类关联,达到对端口限速的目的。具体操作如下:

#查看现有的队列
tc -s qdisc ls dev eth0 #查看现有的分类
tc -s class ls dev eth0 #清理iptables Mangle规则
iptables -t mangle -F #清理ens8上原有的队列类型
tc qdisc del dev ens8 root #创建队列
tc qdisc add dev ens8 root handle : htb default
#添加一个htb队列,绑定到eth0上,命名为1: ,默认归类为1
#handle:为队列命名或指定某队列 #创建分类
tc class add dev ens8 parent : classid : htb rate 10000Mbit
#为ens8下的root队列1:0添加一个分类并命名为1:,类型为htb,带宽为10000M
#rate: 是一个类保证得到的带宽值.如果有不只一个类,请保证所有子类总和是小于或等于父类. #创建一个子分类
tc class add dev ens8 parent : classid : htb rate 100Mbit ceil 100Mbit
#为1:1类规则添加一个名为1:10的类,类型为htb,带宽为100M
#ceil: ceil是一个类最大能得到的带宽值.
#为了避免一个会话永占带宽,添加随即公平队列sfq. 
tc qdisc add dev ens8 parent : handle : sfq perturb
#perturb:是多少秒后重新配置一次散列算法,默认为10秒
#sfq,可以防止一个段内的一个ip占用整个带宽 #使用u32创建过滤器
tc filter add dev ens8 protocol ip parent : prio u32 match ip sport 46320 flowid :
#执行此步时总是报错(Illegal “match”) 注意flowid需要与classid相同 #上步执行报错,采用iptables方式限速
#创建过滤器并制定handle
tc filter add dev ens8 parent 1:0 protocol ip prio 1 handle 10 fw classid 1:10 #使用iptables对端口绑定tc队列
iptables -A OUTPUT -t mangle -p tcp --sport 46320 -j MARK --set-mark 10
#set-mark与classid相同

完成上述配置后,当从端口46320发出去的包得到了限速,通过包大小以及包个数,传输包的时间大概统计出带宽值如下:

Trans data for  times, average time for every process:
0.0513210330009
average time 0.0513210330009
bandwidth 11.1887605612 MB/s

带宽与设置的限速吻合,从其他端口发出去的包没有收到限制,带宽较大,如下:

Trans datafor  times, average time for every process:
0.00130607795715
average time 0.00130607795715
bandwidth 439.651206771 MB/s

原理后续分析,未完待续。。。

参考博客

https://my.oschina.net/adailinux/blog/1631371

https://www.diannaobos.com/post/609.html

使用iptables和tc对端口限速的更多相关文章

  1. 【转】 LINUX中IPTABLES和TC对端口的带宽限制 端口限速

    不管是iptables还是tc(traffic control)功能都很强大,都是与网络相关的工具,那么我们就利用这两个工具来对端口进行带宽的限制. 1.使用命令ifconfig查看服务器上的网卡信息 ...

  2. centos tc 端口限速

    #http://www.fx114.net/qa-178-108967.aspx#http://professor.blog.51cto.com/996189/1569481/#http://blog ...

  3. 使用tc ingress来限速接收方向

    Linux中的QoS分为入口(Ingress)部分和出口(Egress)部分,入口部分主要用于进行入口流量限速(policing),出口部分主要用于队列调度(queuing scheduling).大 ...

  4. tc令牌桶限速心得

    一.实验拓扑与实验现象 实验拓扑如图所示,在①号机上发送数据,③号机上接受数据,同时在④号机的eth1与eth2网口限制速率为115200kbps,命令如下 tc qdisc add dev eth1 ...

  5. 关于nginx安装、iptables设置和查看端口指令netstat/ss

    实验1: Nginx介绍 Nginx("engine x")是一款是由俄罗斯的程序设计师Igor Sysoev所开发高性能的 Web和 反向代理 服务器,也是一个 IMAP/POP ...

  6. Cisco端口限速配置

    作者:邓聪聪 Cisco端口限速的配置 配置案例如下: 定义策略组: access-list ID permit ip any any 模版关联策略组: class-map match-all nam ...

  7. CentOs7 使用iptables防火墙开启关闭端口

    CentOs7 使用iptables防火墙开启关闭端口   # 0x01介绍 iptables命令是Linux上常用的防火墙软件,是netfilter项目的一部分iptables文件设置路径:命令:v ...

  8. CentOS 7 设置iptables防火墙开放proftpd端口

    由于ftp的被动模式是这样的,客户端跟服务器端的21号端口交互信令,服务器端开启21号端口能够使客户端登录以及查看目录.但是ftp被动模式用于传输数据的端口却不是21,而是大于1024的随机或配置文件 ...

  9. 【转载】iptables、tc和ip命令

    2.3 CommandListener中的命令 CL一共定义了11个命令,这些命令充分反映了Netd在Android系统中网络管理和控制方面的职责.本节首先介绍Linux系统中常用的三个网络管理工具, ...

随机推荐

  1. 《JavaWeb从入门到改行》过滤器学习笔记

    >"; display: block; height: 0; clear: both; visibility: hidden; } #sitemap, #sitemap ul{disp ...

  2. 原生canvas写的飞机游戏

    一个原生canvas写的飞机游戏,实用性不大,主要用于熟悉canvas的一些熟悉用法. 项目地址:https://github.com/BothEyes1993/canvas_game

  3. 关于iFrame特性总计和iFrame跨域解决办法

    1.iframe 定义和用法 iframe 元素会创建包含另外一个文档的内联框架(即行内框架). HTML 与 XHTML 之间的差异 在 HTML 4.1 Strict DTD 和 XHTML 1. ...

  4. [POI2013]LUK-Triumphal arch

    题目链接 此题的答案k具有可二分性 那么我们可以二分答案k,然后跑一个树形DP 令\(dp[i]\)表示到节点\(i\)时需要再多染色的点数 那么有\(dp[i]=\max(\sum_{fa[j]=i ...

  5. 13 Reasons Why You Should Pay Attention to Mobile Web Performance

    Mobile is no longer on the sidelines. If you’re not already thinking mobile first, you should at lea ...

  6. Maven学习总结(六):pom.xml文件的说明

    什么是POM? POM是项目对象模型(Project Object Model)的简称,它是Maven项目中的文件,使用XML表示,名称叫做pom.xml.作用类似ant的build.xml文件,功能 ...

  7. 【MFC】CDialogBar中按钮不可用

    现象展示: 具体原因: A button in a CDialogBar object is disabled automatically if the command routing does no ...

  8. 浅谈搜索引擎SEO(HTML/CSS)

    SEO:搜索引擎优化(免费): SEM:搜索引擎营销(付费). 它们两者的区别是: 1.SEM高投入,SEO低投入: 2.SEM短.效益块,SEO长期投入.增长慢: 3.新广告法颁布之后SEM广告位减 ...

  9. Spring事务管理入门与进阶

    事务管理 一个数据库事务是一个单一的工作单元操作序列.这些操作应该要么完整地执行,要么完全不执行.事务管理是一个重要组成部分,事务管理可以确保数据完整性和一致性.事务具有以下四个关键特性分别是 ACI ...

  10. 使用ajax请求后返回数据显示undefinded解决办法

    今天在使用七牛的sdk做断点续传时候,当文件过大,本地没有存储时候,想要通过ajax将本地信息存到服务器缓存,之后通过读取缓存的方式来完成文件过大断点续传无法使用问题. 但是在使用ajax请求的时候, ...