linux 弱网环境模拟,轻松一招,教你实现模拟弱网环境

2023-11-12

原标题:轻松一招,教你实现模拟弱网环境

3add4c1608dfd0c6011775aa7f40ed03.png

运维过程中,最复杂的问题,莫过于网络的问题,而网络问题最烦的就是无法复现,这篇介绍一个强大的网络模拟工具Netem。

Netem是从linux 2.6以上内核版本开始提供的一个网络模拟功能模块,它主要用来在性能良好的网络环境中,模拟出复杂的网络传输性能,比如低带宽、传输延迟、丢包等各种常见的网络故障的情况。

而Netem是由命令行工具tc控制,tc我们应该比较熟悉,tc是iproute2工具包的一部分,它的全称是traffic control(流量控制),最常用的莫过于通过nc监听进行反弹shell。

tc主要用于linux内核的流量控制,主要是通过在是输出端口处建立一个队列来实现流量控制,接收包从输入接口进来后,经过流量限制,丢弃不符合规定的数据包,由输入多路分配器进行判断选择,如果接收包的目的是本主机,那么将该包送给上层处理,否则需要进行转发,将接收包交到转发块处理,转发块同时也接收本机上层(TCP、UDP等)产生的包。转发块通过查看路由表,决定所处理包的下一跳,然后对包进行排列以便将他们传送到输出接口,一般我们只能限制网卡发送的数据包,不太好限制网卡接收的数据包,所以我们可以通过改变发送次序来控制传输速率,linux流量控制主要是在输出接口排列时进行处理和实现的。

关于linux内部网络包转发,在公众号之前发过的文章《nfstable比iptables强在哪里》里面有较详细的介绍,这里就不罗嗦了,有兴趣的可以点进去看下。

回到正题,我们主要通过tc工具加Netem模块进行网络状况的模拟,看下netem模块的强大功能

网络状况不好的情况通常就是以下几个表现:延迟、丢包、乱序、重复、错误等,我们就通过netem来模拟以上这几种情况,建议不要生产环境测试,熟练掌握后再使用

在tc配置netem的操作中,主要有4个控制参数,分别是add(表示为指定网卡添加Netem配置),change(表示修改已经存在的Netem配置),replace(表示替换已经存在的Netem配置的值),del(表示删除网卡上的Netem配置),好了,接着开始测试几种情况。

模拟延迟传输 tc qdisc add dev eth0 root netem daly 100ms

模拟网络,所有的报文延迟100ms发送

f6d2465fbc7395714fcc50e2451a35ed.gif

上面的命令中qdisc是排队规则,没有添加规则之前,因为是内网,所以ping延迟在1ms,添加延迟后,增加到100ms

在真实的网络环境中,我们通常很难看到非常稳定的时延,别杠内网,所以netem也考虑到这一点,模拟延迟参数中提供了控制延迟的时间分布的可选参数,完整的参数列表如下:

可以看到,除了TIME外,还有三个可选参数:

JITTTER:网络抖动,增加一个随机事件长度,让延迟事件出现在某个范围

CORRELATION:相关系数,下一个报文延迟事件和上一个报文的相关系数

distribution:延迟分布,可以选择的值有uniform、normal、pareto和paretonormal

先来看下JITTER,如果设置为10ms,那么报文延迟事件会在100ms± 10ms之间随机选择,看下效果

a6eab038db5d2477c99fc995dd1e6101.gif

CORRELATION是指包和包之间的相关性,因为网络状况是平滑变化的,短时间里相邻报文的延迟应该是近似的,而不是完全随机的,这个值是个百分比,如果为100%,就是固定延迟的情况,如果是0%则是随机延迟的情况,接着刚才的配置继续看下效果

785586932c23d3708d905a648d74a506.gif

而distribution则是通过正态分布的方式来模拟更符合真实网络情况,它的几个参数就是几种延迟分布方法,有兴趣的可以试一下

模拟丢包率

丢包在网络中是最常见的一种情况,丢包会导致重传,重传会增加网络链路的流量和延迟,Netem提供了loss参数,可以模拟丢包率

tc qdisc add dev eth0 root netem loss 50%

看下效果

2dd5202b3233b08a943157748f591b55.gif

和延迟类似,丢包率也有相关系数的参数可以设置,表示后一个报文丢包率和它前一个报文的相关性

tc qdisc add dev eth0 root netem loss 50% 25%

上面这个命令表示,丢包率是50%,并且当前报文丢弃的可能性和前一个报文相关性为25%

模拟包重复

模拟报文重复,用duplicate参数,报文重复和丢包的参数类似,就是重复率和相关性两个参数,比如随机产生50%重复的包

tc qdisc add dev eth0 root netem duplicate 50%

看下效果

66be719945af1a84fe096aee1341bc32.gif

相关性和其他参数一样,有兴趣可以测试

模拟包损坏

模拟报文损坏用参数corrupt,报文损坏和报文重复的参数也类似,比如随机产生30%损坏的报文

tc qdisc add dev eth0 root netem corrupt 30%

查看效果

910a9fdb6ba820cddb65bb7a6e393336.gif

可以从icmp_seq看到,损坏的报文,导致严重的丢包

模拟包乱序

我们知道TCP为了保证可靠传输,会在报文中添加序列号,确保被拆分的包能够到达后进行重组,那么最好的情况就是包能按序传输,减少重新排序的次数,虽然包乱序造成的影响没有上面几种严重,但是仍然是会经常遇到,netem同样提供了模拟包乱序的方法

模拟报文乱序和前面的参数不太一样,上面的操作都是针对单个报文的,而乱序则牵扯到多个报文重组的问题,所以Netem这里有两种方法来模拟乱序

第一种是固定的每隔一定数量的报文乱序一次

tc qdisc add dev eth0 root netem reorder 50% gap 3 delay 100ms

caa02f1a2b83c8627e8814b74b7ae22e.gif

上面这个是每隔3个数据包正常发送,其他的数据包延迟100ms发送

第二种方法是更接近显示情况的,就是随机的,用概率来选择乱序的报文

tc qdisc change dev eth0 root netem reorder 50% 15% delay 300ms

看效果

e4e47f35584d05308340fd61e0815f75.gif

上面这个就是50%的报文正常发送,其他报文延迟300ms发送

查看已配置过滤条件

测试的过程中,肯定需要查看当前配置了那些条件,通过tc的show指令可以进行查看

977c9846eef17df22951d045d6fabbeb.png

对于模拟弱网环境,排查问题,这个工具必不可少,赶紧收藏!

“高效运维”公众号诚邀广大技术人员投稿,

投稿邮箱:jiachen@greatops.net,或添加联系人微信:greatops1118.

点击阅读原文,访问 DevOps 国际峰会官网

点个“在看”,一年不宕机 返回搜狐,查看更多

责任编辑:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

linux 弱网环境模拟,轻松一招,教你实现模拟弱网环境 的相关文章

  • Matlab查询表格中数据并对数据进行对比

    想查查自己在年级每个成绩排多少名 然后编了这样一个程序 a 算法分析与设计实验 记录学习算法分析与设计实验的总人数 j 0 记录比这个分大的人数 k 0 for i 1 26863 比较两个字符串是否相等 if strcmp Untitle
  • Windows 下 T-Kernel QEMU模拟器使用

    google了一下 没有找到T Kernel QEMU模拟器使用介绍的内容 只有T Kernel 自己的文档 那就简单的介绍一下 1 下载对应的T Kernel代码包 参考以前的文档 http blog csdn net robertson
  • Python:用指定的字拼成这个字本身

    字 字 字字字字字字字字字字字 字 字 字字字字字字字 字 字 字字字字字字字字字字字 字 字 字字字 符 符 符符符符 符符符符符 符 符 符 符 符 符 符 符 符符 符符符符符符符 符 符 符 符 符 符 符 符 符 符 符 符 符符
  • 逻辑设备名到物理设备名的映射实现

    为了实现设备的无关性 当应用程序请求使用I O设备时 应当用逻辑设备名 但系统值识别物理设备名 所以应在系统中需要配置一张逻辑设备表 用于将逻辑设备名映射到物理设备名 逻辑设备表LUT Logical Unit Table 在逻辑设备表中
  • 使用Anaconda创建python环境 & 常见错误

    目录 使用anaconda创建python环境 1 流程 1 使用 cmd 命令打开终端 2 执行 conda 命令进入conda环境 3 执行 conda creat name 环境名 python python版本 命令创建环境 2 常
  • 在vue中使用for循环有异步请求,每次都只获取到最后一个数据解决办法

    我预想是将标签数组 dynamicTags 使用for循环取出每个值 在遍历标签数组将值一一添加到数据库中 奈何for循环结束了 才去执行put请求 这就导致了只添了数组的最后一个值 原因是axios put请求是异步请求 解决方案 使用递
  • 分析整理文献的具体步骤_VOSviewer文献综述

    文献综述在科技论文和学位论文中占据着重要地位 是论文中的一个重要且不可或缺的部分 它是研究者在对某一学科 专业或专题的大量文献进行阅读 整理 筛选 分析 综合和提炼的基础上 用自己的语言综合叙述研究状况的情报研究成果 因此 文献综述的好坏直
  • 计算宽度_桥梁有效宽度计算,看看很有用!

    有效分布宽度实质上是剪力滞效应的反应 由于目前桥梁设计多用二维平面解析 故荷载的有效分布宽度仍需要计算 不过还有很多深层次问题还不能合理解答 有待进一步研究和探讨 各中间跨正弯矩段取该跨计算跨径的0 2倍 边跨正弯矩段取该跨计算跨径的0 2
  • 回溯法-装载问题

    子集树问题 和 子集树的0 1背包问题类似 但是没有考虑价格 include
  • 【Parallels Desktop】解决Sorry, This Application Cannot Be Run Under A Virtual Machine

    问题描述 解决步骤 Win R 或Cmd R 打开 运行 窗口 输入regedit并点击 确定 打开注册表编辑器 依次展开HKEY LOCAL MACHINE HARDWARE ACPI DSDT文件夹 鼠标右键点击PRLS 选择 重命名
  • Redis第二讲 Redis数据持久化AOF和RDB

    RDB快照 snapshot 在默认情况下 Redis 将内存数据库快照保存在名字为 dump rdb 的二进制文件中 你可以对 Redis 进行设置 让它在 N 秒内数据集至少有 M 个改动 这一条件被满足时 自动保存一次数据集 save
  • 【修仙境界】等级划分

    文章目录 一 下境界 1 炼气 一共13层 2 筑基 分初 中 后期和大圆满 3 结丹 分初 中 后期和大圆满 4 元婴 分初 中 后期和大圆满 5 化神 分初 中 后期和大圆满 二 中境界 1 炼虚 分初 中 后期和大圆满 2 合体 分初
  • C++ 编程出错的地方(考试选择题易错点)

    一 int IsSvn int n if n 7 0 return 1 要判断这个数能不能被7整除 你就只返回1吗 那岂不是只返回1 没有0的情况了 应该改为 int IsSvn int n if n 7 0 return 1 else r
  • 2021年电赛模块化程序总结

    文章目录 1 ADC0804 2 LCD1602 3 AD9854 1 ADC0804 集成A D转换器品种繁多 选用时应综合考虑各种因素选取集成芯片 一般逐次比较型A D转换器用的比较多 ADC0804就是这类单片集成A D转换器 ADC
  • 9、HTML:有序列表(ol),无序列表(ul),描述列表(dl、dt、dd)详解

    1 什么是列表 什么是列表 什么是有序列表 什么是无序列表 上面写的 3 句话就是一个列表 你懂得 2 有序列表 有序列表 英文叫做 ordered list 所以标签也是取这个词组的首字母 ol ol标签括起来的范围就是有序列表的范围 而
  • Win11怎么修改c盘用户名?

    Win11怎么修改c盘用户名 不知道的小伙伴们可以学起来了 谨慎操作 以下的方法提供给你 希望对你有所帮助 Win11更改C盘user用户名教程 一 开启Administrator权限并登入 搜索框搜索cmd 右击以管理员身份运行 出现cm
  • C++每日一问:C++ 内存管理——内存泄漏及处理

    2 内存泄漏 2 1 C 中动态内存分配引发问题的解决方案 假设我们要开发一个String类 它可以方便地处理字符串数据 我们可以在类中声明一个数组 考虑到有时候字符串极长 我们可以把数组大小设为200 但一般的情况下又不需要这么多的空间
  • 唯一分解定理(分解质因子)

    唯一分解定理 每个大于一的自然数均可写为质数的积 而且这些素因子按大小排列之后 写法只有一种方式 最简单的写法 include
  • matlab绘制正弦函数、幅度调制初步、Inner matrix dimensions must agree错误

    以sin 2 f t 表达式来绘制正弦图像 必须给定数值序列才能绘制出图像 t必须给定一个数值序列 然后计算出 y sin 函数值序列 以t为横轴 y为纵轴 就绘制出了图像 先给出f 4 在这里是有几个周期 采样率Fs 100 matlab

随机推荐

  • flask从入门到精通,知识讲解+代码演示 day1

    flask从入门到精通 知识讲解 代码演示 day1 文章目录 flask从入门到精通 知识讲解 代码演示 day1 一 flask是什么 二 使用步骤 1 创造flask项目 2 初入flask 3 flask代码初运行 4 flask从
  • Spring Cloud实战(五)-声明式接口模块

    接着上一篇 Spring Cloud实战 四 配置中心 现在开始搭建api模块 一 声明式接口模块api 1 pom xml
  • 数学建模-相关性分析(Matlab)

    注意 代码文件仅供参考 一定不要直接用于自己的数模论文中 国赛对于论文的查重要求非常严格 代码雷同也算作抄袭 如何修改代码避免查重的方法 https www bilibili com video av59423231 清风数学建模 一 基础
  • GPU与GPGPU泛淡

    GPU与GPGPU泛淡 GPU Graphics Processing Unit 也即显卡 是一种专门在个人电脑 工作站 游戏机和一些移动设备 如平板电脑 智能手机等 上作图像运算工作的微处理器 它已经是个人PC和移动设备上不可或缺的芯片
  • C#数据类型之枚举类型

    一 枚举类型的定义 public enum 枚举名称 枚举数据类型 枚举的数据类型可以省略 默认类型为int 枚举项1 枚举项的值 枚举项的值是整数可以自己设置 枚举项2 枚举项3 例如 public enum month ushort 一
  • Clion + mysql (win/Mac + 本地/远程)

    新手教程 那些年我用clion操作mysql的一些经验教训 本文目录 使用clion自带的数据库工具 对数据库进行操作 连接本地数据库 建库 建表 编辑表格 修改字段名 查询数据 插入新的数据 sql常用语句 mysql版 win Clio
  • 口罩检测——数据准备(2)

    文章目录 前言 一 数据介绍 二 数据标注 三 数据转换 总结 前言 上一篇文章中小编讲解了口罩检测的环境要求 在这一篇文章中我们就正式进入项目的讲解 我们从数据准备开始 数据是模型快乐的源泉 没有高质量的数据 再好的模型也白搭 一 数据介
  • Flink消费Rabbit数据,写入HDFS - 使用 BucketingSink

    一 应用场景 Flink 消费 Kafka 数据进行实时处理 并将结果写入 HDFS 二 Bucketing File Sink 由于流数据本身是无界的 所以 流数据将数据写入到分桶 bucket 中 默认使用基于系统时间 yyyy MM
  • 通过 Tensorflow 的基础类,构建卷积神经网络,用于花朵图片的分类

    实验目的 通过 Tensorflow 的基础类 构建卷积神经网络 用于花朵图片的分类 实验环境 import tensorflow as tf print tf version output 2 3 0 实验步骤 一 数据获取和预处理 1
  • 第五章 静态资源 CDN 引入

    第五章 静态资源 CDN 引入 静态请求 CDN 用户将静态资源数据请求到ECS服务器 ECS服务器解析到阿里云的CDN中 CDN可以理解为一个无限大的内容磁盘缓存 本身没有文件存储 当用户访问 getItem 的一个静态资源文件的时候 会
  • 【线代】特征值、惯性指数、标准型、规范型的关系?等价、相似与合同?

    目录 1 两矩阵特征值相同 1 1 实对称矩阵A B的特征值相同 2 二次型的标准型 2 1 标准型唯一吗 2 2 标准型与秩 2 3 标准型与特征值 2 4 正交变换与特征值 2 5 两个二次型的标准型相同 3 规范型 3 1 规范型唯一
  • Qt Install Framework使用方法

    Qt程序的打包发布现在已经可以通过其发布的Installer Framework框架来完成 通过修改一些配置文件即可实现 首先 现在该框架官网提供1 3 0 1 4 0和1 5 0版本的下载 本文书写时 根据有新的谁他吗还用旧的准则 下载1
  • Spring----初识

    Spring 是一种轻量级开发框架 旨在提高开发人员的开发效率以及系统的可维护性 Spring 官网 Spring Home Spring 框架指的都是 Spring Framework 它是很多模块的集合 使用这些模块可以很方便地协助我们
  • Qt 设计师-Qt Designer基础控件介绍

    Layouts Vertical Layout 垂直布局 Horizontal Layout 水平布局 Gird Layout 栅格布局 FormLayout 表单布局 关于布局有很多博客写的很好就不再赘述了 本人常用Qt Designer
  • Laplace Smoothing

    拉普拉斯平滑 Laplace Smoothing 拉普拉斯平滑 Laplace Smoothing 又称为加 1 平滑 是比较常用的平滑方法 平滑方法的存在时为了解决零概率问题 一 为什么要做平滑 零概率问题 在计算事件的概率时 如果某个事
  • Python判断当前日期是否为工作日(交易日),智能去除周末节假日(功能已实现)

    一 首先安装chinesecalendar模块 pip install chinesecalendar 或 使用镜像安装到指定位置 pip install chinesecalendar target D bin x64 Lib site
  • h264bitstream (read and write H.264 video bitstreams)

    1 编译安装参考源码包自带的说明文档 h264bitstream 0 2 0 README md sudo apt get install build essential libtoolautoreconf i configure pref
  • 数据挖掘——认识数据

    数据挖掘 国防科技大学 数据挖掘 青岛大学 数据挖掘与python实践 数据挖掘之认识数据 1 数据和信息 数据 data 是事实或观察的结果 是对客观事物的逻辑归纳 是用于表示客观事物的未经加工的原始素材 在计算机系统中 各种字母 数字符
  • WTL for VS2010/VS2010Express

    纠结wtl升级问题已经1个月了 装了vs2010才知道wtl很难兼容vs2010 不想换回vs2008了 今天找到了wtl的svn下载了最新的代码终于可以在vs2010里面顺利使用wtl了 http wtl svn sourceforge
  • linux 弱网环境模拟,轻松一招,教你实现模拟弱网环境

    原标题 轻松一招 教你实现模拟弱网环境 运维过程中 最复杂的问题 莫过于网络的问题 而网络问题最烦的就是无法复现 这篇介绍一个强大的网络模拟工具Netem Netem是从linux 2 6以上内核版本开始提供的一个网络模拟功能模块 它主要用