使用TC命令模拟弱网丢包

ops/2024/12/25 21:58:39/

在网络测试和优化过程中,模拟弱网环境(如高延迟、丢包、抖动等)是非常重要的一环。tc(Traffic Control)是 Linux 内核中的一个强大工具,它可以用于流量整形、流量控制、队列管理等。通过 tc,我们可以模拟各种网络条件,如延迟、丢包、带宽限制等。本文将介绍如何使用 tc 命令实现弱网丢包,以便在开发和测试过程中模拟不稳定的网络环境。

安装 tc

在大多数 Linux 发行版中,tc 工具是 iproute2 包的一部分。你可以使用包管理器来安装它:

# 在 Debian/Ubuntu 系统上
sudo apt-get install iproute2# 在 CentOS/RHEL 系统上
sudo yum install iproute

我们将使用tc的netem能力来实现模拟弱网丢包,下面网页是linux中关于tc-netem的介绍,tc-netem是 Linux 内核中的一个网络仿真模块,属于 tc(Trtc-netemaffic Control)工具的一部分。netem(Network Emulator)用于模拟各种网络条件,如延迟、丢包、抖动、重排序等。

tc-netem(8) - Linux manual page

随机丢包

我们可以使用 tc 的 netem 模块来模拟丢包。以下命令将配置网络接口 eth0,使其有 10% 的丢包率:

# 创建一个 Netem 队列规则,设置 10% 的丢包率
sudo tc qdisc add dev eth0 root netem loss 10%

在这个命令中:

  • dev eth0:指定网络接口 eth0
  • root:指定根队列规则。
  • netem:使用 Netem 队列规则。
  • loss 10%:设置 10% 的丢包率。

突发丢包配置

除了基本的丢包配置,我们还可以模拟突发丢包。以下命令将配置网络接口 eth0,使其有 5% 的丢包率和 25% 的突发丢包率:

# 创建一个 Netem 队列规则,设置突发丢包
sudo tc qdisc add dev eth0 root netem loss 5% 25%

在这个命令中:

  • loss 5% 25%:设置 5% 的丢包率和 25% 的突发丢包率。

Gilbert-Elliot 模型

Gilbert-Elliot 模型是一种用于模拟突发丢包的模型。它通过定义两种状态(良好状态和坏状态)来模拟丢包行为。以下命令将配置网络接口 eth0,使用 Gilbert-Elliot 模型:

# 创建一个 Netem 队列规则,使用 Gilbert-Elliot 模型
sudo tc qdisc add dev eth0 root netem loss gemodel 0.1 0.02 0.5 0.01

在这个命令中:

  • loss gemodel:使用 Gilbert-Elliot 模型。
  • 0.1:从良好状态到坏状态的概率。
  • 0.02:从坏状态到良好状态的概率。
  • 0.5:在坏状态下的丢包率。
  • 0.01:在良好状态下的丢包率。

组合配置

我们还可以组合多个网络条件来模拟更复杂的弱网环境。例如,以下命令将配置网络接口 eth0,使其有 10% 的丢包率和 100ms 的延迟:

# 创建一个 Netem 队列规则,设置 10% 的丢包率和 100ms 的延迟
sudo tc qdisc add dev eth0 root netem loss 10% delay 100ms

查看配置

通常情况下配置完成后我们需要查看配置是否成功,要查看某个网络接口的根队列规则,可以使用以下命令:

sudo tc qdisc show dev eth0

在这个命令中:

  • qdisc show:显示队列规则。
  • dev eth0:指定网络接口 eth0

示例输出:

qdisc netem 8001: root refcnt 2 limit 1000 loss 10%

在这个输出中,我们可以看到 eth0 接口上配置了一个 netem 队列规则,设置了 10% 的丢包率。

清除配置

当你不再需要模拟弱网环境时,可以使用以下命令清除 tc 配置:

# 清除网络接口 eth0 上的所有 tc 配置
sudo tc qdisc del dev eth0 root


http://www.ppmy.cn/ops/144946.html

相关文章

“Content type ‘text/plain;charset=UTF-8‘ not supported“,

用postman进行新增数据时,如下提示: "Content type text/plain;charsetUTF-8 not supported" Content type text/plain 不支持 点击Headers我们看到Content-Type 支持的类型是json 所以问题出现在这个地方,要将Text切换成JSON…

C++23新特性详解:多维下标运算符

1. 为什么需要多维下标运算符? 在C的发展历程中,多维数组的访问一直是一个令人困扰的问题。让我们先看看传统的多维数组访问方式及其问题: 1.1 传统方式的问题 1.1.1 C风格数组 int matrix[3][4]; matrix[1][2] 42; // 需要多次下标访问…

案例分析-THC7984设计问题报告

目录 简介 配置信息 结论: 简介 使用的环境 AD芯片:THC7984 VGA信号:通过电脑主机产生1024x768 60HZ信号。 配置信息 AD数字数字产生通过FPGA接收。 AD寄存器配置(第一个数数据,第二个是地址): iic_write_reg 1 0x1e iic_write_reg 02 0x5

重温设计模式--迭代器模式

文章目录 迭代器模式(Iterator Pattern)概述迭代器模式的结构迭代器模式UML图C 代码示例应用场景 迭代器模式(Iterator Pattern)概述 定义: 迭代器模式是一种行为型设计模式,它提供了一种方法来顺序访问一个…

关于uni-forms组件的bug【提交的字段[‘*‘]在数据库中并不存在】

问题:在使用 uni-forms校验的时候,出来的一个问题,这个字段都没有设置校验的规则,不知道什么原因就出现了下图的问题: 解决办法: 在uni-forms-item 添加key 值就解决了 原因不知道,有大佬发现…

​在VMware虚拟机上设置Ubuntu与主机共享文件夹​

‌在VMware虚拟机上设置Ubuntu与主机共享文件夹的步骤如下‌: ‌主机共享文件夹的设置‌:首先,在主机上选择一个磁盘分区创建一个文件夹,并设置其共享属性。右键点击该文件夹,选择“属性”,然后在“共享”选…

基于Spring Boot的远程教育网站

一、系统背景与意义 随着互联网技术的飞速发展和普及,远程教育已成为现代教育体系中的重要组成部分。它打破了时间和空间的限制,让学习者可以随时随地进行学习。基于Spring Boot的远程教育网站正是为了满足这一需求而设计的,它利用互联网技术…

如何详细地遵循RustDesk的步骤来搭建远程访问和自定义服务器?

要详细地遵循RustDesk的步骤来搭建远程访问和自定义服务器,你可以按照以下几个主要步骤进行操作: 下载并安装RustDesk:前往RustDesk的官方网站(https://rustdesk.com/)下载适用于你的操作系统的安装程序。然后&#xf…