《SQL基础教程》简要总结 《设计师要懂心理学》读书笔记 MySQL与MariaDB学习笔记 WDT (Folly) 安装指南 -- CentOS 7 [solved]Page build failed(Jekyll) 数据包过滤及分析实例 tshark tcpdump Scala Tour 学习总结 “Docker容器和容器云”读书笔记(1) “Docker Practice”读书笔记 “图解基础设施设计模式”小结 “图解服务器端网络架构”小结 Python网络安全编程 数据包解析笔记 华为挑战赛(1) DDoS攻击防御与云服务 基于网络回溯分析技术的异常行为分析 “Linux程序设计”小结(进程间通信) C语言编程规范(华为软件精英挑战赛) 2017阿里在线编程题--单源最短路径问题 2017年阿里在线编程题-- 数串分组 Uinx/Linux上的帮助查询命令 你懂C,所以C++不在话下 一篇特别长的总结(C专家编程) 程序员面试金典--笔记(精华篇) C陷阱与缺陷--笔记 半小时搭建电子商务网站--opencart linux网络知识和工具(持续更新) 网卡参数查询及设置工具ethtool 高性能流量生成工具trafgen(DDoS模拟) Linux流量控制工具TC 流量控制工具TC详细说明 tcpdump过滤数据包,结果不对? Lecture 网络攻击与防御技术笔记 gotgit-git权威指南 高效使用MacOS所要知道的 shell内置字符串处理 配置ntp(知其所以然) 360黑客攻防技术分享会--记录 中毒U盘恢复--快捷键病毒 Tor--anonymity network介绍(PPT) IBM bluemix 再读《Linux Shell脚本攻略》 linux shell 学习摘记(9) linux shell 学习摘记(8) linux shell 学习摘记(7) linux shell 学习摘记(6) linux shell 学习摘记(5) linux shell 学习摘记(4) linux shell 学习摘记(3) linux shell 学习摘记(2) linux shell 学习摘记(1) firefox vim 插件 vimperator A Byte of Vim 笔记 windows注册表小知识 安全测试工具篇(开源&商业) 安全及性能测试工具(网站收集) 性能测试工具 屡试不爽的“3个”iPad使用技巧 Shell Shortcuts(和Tab键一样实用) vim--自动添加jekyll post信息头 vim 自动给文件添加头部信息 GitHub Tips (很实用,值得收藏) Linux路由、防火墙、NAT命令

Linux流量控制工具TC

2017年01月11日

tc是用来提供流量控制的强大工具,自己在进行DDoS攻击模拟、网络负载测试中一直使用!本文是简单的使用介绍, 流量控制工具TC详细说明有详细的介绍

概要

  1. 简介
    • netem是linux内核版本提供的一个网络模拟功能模块
    • tc 是 Linux 系统中的一个工具,全名为traffic control(流量控制)。tc 可以用来控制 netem 的工作模式
    • 如果想使用 netem ,需要至少两个条件,一个是内核中的 netem 功能被包含,另一个是要有 tc 。
  2. 原理
    • TC用于Linux内核的流量控制,主要是通过在输出端口处建立一个队列来实现流量控制。
    • 一般只能限制网卡发送的数据包,不能限制网卡接收的数据包,所以可以通过改变发送次序来控制传输速率。Linux流量控制主要是在输出接口排列时进行处理和实现的

简单使用

以下功能一般是基于无类队列,可完成如下功能如下(故障模拟)

1. 模拟延迟传输

以使用netem(Token Bucket Filter)为例

  1. tc qdisc add dev ens33 root netem delay 100ms
    • 该命令将 ens33 网卡的传输设置为延迟100毫秒发送
  2. tc qdisc del dev ens33 root netem delay 100ms
    • 删除
  3. tc qdisc add dev ens33 root netem delay 100ms 10ms
    • 该命令将 ens33 网卡的传输设置为延迟 100ms ± 10ms (90 ~ 110 ms 之间的任意值)发送
    • 更真实的情况下,延迟值不会这么精确,会有一定的波动,可以用该命令来模拟出带有波动性的延迟值
  4. tc qdisc add dev ens33 root netem delay 100ms 10ms 30%
    • 该命令将 ens33 网卡的传输设置为 100ms ,同时,大约有 30% 的包会延迟 ± 10ms 发送。
    • 进一步加强这种波动的随机性

2. 模拟网络丢包

以netem为例

  1. tc qdisc add dev ens33 root netem loss 1%
    • 该命令将 ens33 网卡的传输设置为随机丢掉 1% 的数据包。
  2. tc qdisc add dev ens33 root netem loss 1% 30%
    • 设置丢包的成功率
    • 该命令将 ens33 网卡的传输设置为随机丢掉 1% 的数据包,成功率为 30% 。

3. 模拟包重复

  1. tc qdisc add dev ens33 root netem duplicate 1%
    • 该命令将 ens33 网卡的传输设置为随机产生 1% 的重复数据包 。

4. 模拟包损坏

  1. tc qdisc add dev ens33 root netem corrupt 0.2%
    • 该命令将 ens33 网卡的传输设置为随机产生 0.2% 的损坏的数据包 。 (内核版本需在2.6.16以上)

5. 模拟包乱序

  1. tc qdisc change dev ens33 root netem delay 10ms reorder 25% 50%
    • 该命令将 ens33 网卡的传输设置为:有 25% 的数据包(50%相关)会被立即发送,其他的延迟 10 秒。
  2. tc qdisc add dev ens33 root netem delay 100ms 10ms
    • 该命令会在一定程度上打乱发包的次序

流量控制模拟

以tbf(Token Bucket Filter)为例,详细内容见流量控制工具TC详细说明,tbf更适合用来控制速率。百度百科介绍

  1. 简介
    令牌桶过滤器(TBF)是一个简单的队列规定:只允许以不超过事先设定的速率到来的数据包通过,但可能允许短暂突发流量朝过设定值。
    • TBF很精确,对于网络和处理器的影响都很小。所以如果您想对一个网卡限速,它应该成为您的第一选择!
    • TBF的实现在于一个缓冲器(桶),不断地被一些叫做“令牌”的虚拟数据以特定速率填充着。 (token rate)。桶最重要的参数就是它的大小,也就是它能够存储令牌的数量。
    • 每个到来的令牌从数据队列中收集一个数据包,然后从桶中被删除。这个算法关联到两个流上——令牌流和数据流,有三种情形:
      1) 数据流以等于令牌流的速率到达TBF。这种情况下,每个到来的数据包都能对应一个令牌,然后无延迟地通过队列。
      2) 数据流以小于令牌流的速度到达TBF。通过队列的数据包只消耗了一部分令牌,剩下的令牌会在桶里积累下来,直到桶被装满。剩下的令牌可以在需要以高于令牌流速率发送数据流的时候消耗掉,这种情况下会发生突发传输。
      3) 数据流以大于令牌流的速率到达TBF。这意味着桶里的令牌很快就会被耗尽。导致TBF中断一段时间,称为“越限”。如果数据包持续到来,将发生丢包。
    • 令牌的积累可以导致越限的数据进行短时间的突发传输而不必丢包,但是持续越限的话会导致传输延迟直至丢包。
  2. 示例
    tc qdisc add dev ens33 root tbf rate 100mbit latency 50ms burst 1000
    tc qdisc change dev ens33 root tbf rate 200mbit latency 50ms burst 1000
    tc qdisc change dev ens33 root tbf rate 300mbit latency 50ms burst 1000
    tc qdisc del dev ens33 root tbf rate 300mbit latency 50ms burst 1000

  3. 测试情况(依赖具体的硬件)
    image_1b6b77v4adon3gul0bq8a1tba9.png-15.4kB

TC进阶

  1. 流量控制工具TC详细说明
  2. Traffic Control HOWTO
  3. Linux 高级流控

知识共享许可协议
SWF's Hacking Dreamonephone 创作,采用 知识共享 署名-非商业性使用 4.0 国际 许可协议进行许可。
© 2011-2017. All rights reserved by onephone. Powerd by Jekyll.