故障测试之模拟网络丢包

天翼云开发者社区
• 阅读 76

本文分享自天翼云开发者社区《故障测试之模拟网络丢包》,作者:y****n

1、模拟网络丢包工具——TC(Traffic Control)

TC(Traffic Control) 是linux自带的模块,一般不需要安装,TC要求内核2.4.18以上。Linux 操作系统中的流量控制器 TC用于Linux内核的流量控制,它利用队列规定建立处理数据包的队列,并定义队列中的数据包被发送的方式,从而实现对流量的控制。TC 模块实现流量控制功能使用的队列规定分为两类,一类是无类队列规定,另一类是分类队列规定。无类队列规定相对简单,而分类队列规定则引出了分类和过滤器等概念,使其流量控制功能增强。

无类队列规定是对进入网络设备(网卡)的数据流不加区分统一对待的队列规定。使用无类队列规定形成的队列能够接收数据包以及重新编排、延迟或丢弃数据包。这类队列规定形成的队列可以对整个网络设备(网卡)的流量进行整形,但不能细分各种情况。常用的无类队列规定主要有 pfifo_fast(先进先出)、TBF(令牌桶过滤器)、SFQ(随机公平队列)、ID(前向随机丢包)等等。这类队列规定使用的流量整形手段主要是排序、限速和丢包。

分类队列规定是对进入网络设备的数据包根据不同的需求以分类的方式区分对待的队列规定。数据包进入一个分类的队列后,它就需要被送到某一个类中,也就是说需要对数据包做分类处理。对数据包进行分类的工具是过滤器,过滤器会返回一个决定,队列规定就根据这个决定把数据包送入相应的类进行排队。每个子类都可以再次使用它们的过滤器进行进一步的分类。直到不需要进一步分类时,数据包才进入该类包含的队列排队。除了能够包含其他队列规定之外,绝大多数分类的队列规定还能够对流量进行整形。这对于需要同时进行调度(如使用SFQ)和流量控制的场合非常有用。

Linux流量控制的基本原理为:接收包从输入接口(Input Interface)进来后,经过流量限制(Ingress Policing)丢弃不符合规定的数据包,由输入多路分配器(Input De-Multiplexing)进行判断选择。如果接收包的目的地是本主机,那么将该包送给上层处理,否则需要进行转发,将接收包交到转发块(Forwarding Block)处理。转发块同时也接收本主机上层(TCP、UDP等)产生的包。转发块通过查看路由表,决定所处理包的下一跳。然后,对包进行排列以便将它们传送到输出接口(Output Interface)。一般我们只能限制网卡发送的数据包,不能限制网卡接收的数据包,所以我们可以通过改变发送次序来控制传输速率。Linux流量控制主要是在输出接口排列时进行处理和实现的。

2、TC常用命令 (1)模拟延迟传输

  # tc qdisc add dev eth0 root netem delay 100ms

该命令将 eth0 网卡的传输设置为延迟 100 毫秒发送; (2)模拟延迟波动

  # tc qdisc add dev eth0 root netem delay 100ms 10ms

更真实的情况下,传输延迟不会精确到100ms,会有一定的波动,该命令将 eth0 网卡的传输设置为延迟 100ms ± 10ms (90 ~ 110 ms 之间的任意值)发送; (3)模拟延迟波动随机性

  # tc qdisc add dev eth0 root netem delay 100ms 10ms 30%

为了更进一步加强这种波动的随机性,该命令将 eth0 网卡的传输设置为 100ms ,同时,大约有 30% 的包会延迟 ± 10ms 发送; (4)模拟网络丢包

  # tc qdisc add dev eth0 root netem loss 1%

该命令将 eth0 网卡的传输设置为随机丢掉 1% 的数据包; (5)模拟网络丢包成功率

  # tc qdisc add dev eth0 root netem loss 1% 30%

该命令将 eth0 网卡的传输设置为随机丢掉 1% 的数据包,成功率为 30%; (6)删除相关配置

  # tc qdisc del dev eth0 root netem delay 100ms

该命令将对应命令中的add 改为 del 即可删除配置; (7)模拟包重置

  # tc qdisc add dev eth0 root netem duplicate 1%

该命令将 eth0 网卡的传输设置为随机产生 1% 的重复数据包 (8)模拟包损坏

  # tc qdisc add dev eth0 root netem corrupt 0.2%

该命令将 eth0 网卡的传输设置为随机产生 0.2% 的损坏的数据包 。 (内核版本需在 2.6.16 以上) (9)模拟包乱序

  # tc qdisc change dev eth0 root netem delay 10ms reorder 25% 50%

该命令将 eth0 网卡的传输设置为:有 25% 的数据包(50%相关)会被立即发送,其他的延迟10 秒 (10)查看网卡配置

  # tc qdisc show dev eth0

该命令将 查看并显示 eth0 网卡的相关传输配置 (11)查看丢包率

  # tc -s qdisc show dev eth0

4、模拟丢包流程 首先需要确定在哪里制造丢包,针对具体场景分析,比如使用系统盘创建私有镜像的过程,是在cinder-api到volume的消息队列丢包,还是cinder-volume要通过存储外向ceph的盘写数据还是cinder-volume要通过存储外向对象存储的盘写数据,确定之后需要找开发确定对应步骤使用的网卡,确定网卡之后, (1)首先需要确定该操作涉及服务所在的节点:kubectl get pod -n az3|grep cinder-volume |awk '{print $1}'| xargs -I{} kubectl exec -n az3 {} -- grep -rn image-id /var/log/cinder/cinder-volume.log (2)在服务所在的节点上设置网卡丢包率:tc qdisc add dev bond2 root netem loss 10%; (3)查看丢包率:tc -s qdisc show dev bond2 (4)通过ping对应网卡服务的ip验证确实丢包(该例ping对象存储ip):ping 10.24.255.1 (5)测试结束后,删除丢包配置:tc qdisc del dev bond2 root netem loss 10%

点赞
收藏
评论区
推荐文章
基于SpringBoot实现单元测试的多种情境/方法(二)
本文分享自天翼云开发者社区@《》,作者:才开始学技术的小白1Mock基础回顾在上一篇分享中我们详细介绍了简单的、用mock来模拟接口测试环境的方法,具体的使用样例我们再回顾一下:1.首先是最简单的不需要传参的示例,需要注意的是,可能@Resource这个注
Springfox与SpringDoc——swagger如何选择(SpringDoc入门)
本文分享自天翼云开发者社区@《》,作者:才开始学技术的小白0.引言之前写过一篇关于swagger(实际上是springfox)的使用指南(https://www.ctyun.cn/developer/article/371704742199365),涵盖了
Stella981 Stella981
3年前
Centos 7 使用最新内核并使用BBR 加速
我们知道,在国外的一些VPS上,网络丢包一直是造成服务器访问缓慢的主要因素,一旦丢包,就需要再次发包,而再次发的包也存在丢包情况,所以丢包和网络情况的好坏几乎是指数相关的关系。而谷歌为我们带来了干货新的TCP拥塞控制算法BBR(BottleneckBandwidthandRTT),已经在linux4.9的内核中集成了该算法,windo
Stella981 Stella981
3年前
Linux下网卡限速
wondershaper是一款在Linux内核下基于TC工具的对整块网卡的限度工具,虽然有很久没有更新了,但是测试老版本在Centos6.5上依然可以使用。 在Linux/Centos下首先下载wondershaper的rpm安装包:wondershaper1.1a7.noarch.rpm 安装wondershaper:
Stella981 Stella981
3年前
OpenGL笔记
说起编程作图,大概还有很多人想起TC的include<graphics.h吧?但是各位是否想过,那些画面绚丽的PC游戏是如何编写出来的?就靠TC那可怜的640\480分辨率、16色来做吗?显然是不行的。本帖的目的是让大家放弃TC的老旧图形接口,让大家接触一些新事物。OpenGL作为当前主流的图形API之一,它在一些场合具有比DirectX
Stella981 Stella981
3年前
OpenGL 做demo会用到
说起编程作图,大概还有很多人想起TC的include<graphics.h吧?但是各位是否想过,那些画面绚丽的PC游戏是如何编写出来的?就靠TC那可怜的640\480分辨率、16色来做吗?显然是不行的。本帖的目的是让大家放弃TC的老旧图形接口,让大家接触一些新事物。OpenGL作为当前主流的图形API之一,它在一些场合具有比DirectX
实力强劲!天翼云斩获多项权威大奖与认证!
近日,云计算标准和开源推进委员会(TC608)年度工作总结会暨算力服务工作组成果发布会在北京召开。会上,天翼云斩获2023年算力服务领航者计划优秀案例等多项大奖,天翼云算力分发网络平台“息壤”通过了可信算力调度服务能力认证。凭借领先的产品技术和丰富的落地实践,天翼云深度赋能千行百业高质量发展,获得业界权威认可。
天翼云SD-WAN斩获首批“SD-WAN 2.0 SASE”权威认证
近日,在中国通信标准化协会算网融合产业及标准推进委员会(TC621)的指导下,中国信息通信研究院算网融合团队公布了第一批次SDWANReady2.0测试评估结果。此次测评基于《软件定义广域网络(SDWAN)2.0测试方法:SASE解决方案》、《软件定义广域网络(SDWAN)2.0测试方法:SASE服务》等标准,对天翼云自研SDWAN进行了严格的测试。
使用element-ui 的上传组件upload完成自定义上传到天翼云oss云服务器
本文分享自天翼云开发者社区@《》,作者:我是小朋友首先配置天翼云,如下操作1、要求在使用OOS之前,首先需要在www.ctyun.cn注册一个账号(Account)。创建AccessKeyId和AccessSecretKey。AccessKeyId和Acc
Dummynet简单部署
本文分享自天翼云开发者社区《Dummynet简单部署》,作者:凸凹部署流程^准备内核版本 ^参看系统内核版本unamer 我们需要将ipfw编译成内核模块,请确保ipfw用到的内核源码版本同你linux系统运行内核版本一致。
天翼云开发者社区
天翼云开发者社区
Lv1
天翼云是中国电信倾力打造的云服务品牌,致力于成为领先的云计算服务提供商。提供云主机、CDN、云电脑、大数据及AI等全线产品和场景化解决方案。
文章
764
粉丝
16
获赞
40