zoukankan      html  css  js  c++  java
  • 使用Kernel NetEm和tc模拟复杂网络环境

    关键词:netem(Network Emulator)、tc(Traffic Control)

    大部分局域网环境良好,但是产品实际网络环境可能千差万别,为了对产品进行各种情况测试就需要模拟网络环境。

    Linux内核network模块提供了NetworkEmulator功能,结合iproute2的tc功能可以模拟各种网络环境。

    还有一点好处就是可以固定特殊网络环境,进行bug复现。

    1. 环境准备

    要模拟网络环境,首先需要Kernel支持netem,并且需要tc工具。

    使能netem功能,在make emnuconfig界面输入"/",然后“netem”,即可找到配置netem的路径。

    稍微了解tc就知道它是iproue2的一部分,在buildroot中配置iproute2.

    在配置好两者之后,编译即可使用。

    2. 原理

    netem是内核提供的网络模拟功能模块,该功能模块可以用来在性能良好的局域网中,模拟出复杂网络传输性能,比如不同时延、丢包、乱序、重复等问题。

    netem的功能模拟通过tc进行配置。通过tc在用户空间对网卡进行配置,可以模拟出netem提供的各种网络环境。

    netem相关源码在net/sched/sch_netem.c中,tc在iproute2-4.14.1/tc中。

    3. 使用

    3.1 模拟延迟传输

    将 eth0 网卡的传输设置为延迟100毫秒发送。

    tc  qdisc  add  dev  eth0  root  netem  delay  100ms  

    真实的情况下,延迟值不会这么精确,会有一定的波动,下面命令模拟带有波动性的延迟值:

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

    该命令将 eth0 网卡的传输设置为延迟 100ms ± 10ms (90 ~ 110 ms 之间的任意值)发送。
    由于各个包的延迟值不通,也会在一定程度上打乱发包的次序。


    还可以更进一步加强这种波动的随机性,将 eth0 网卡的传输设置为 100ms ,同时,大约有30%的包会延迟 ± 10ms 发送:

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

    3.2 模拟网络丢包

    将 eth0 网卡的传输设置为随机丢掉 1% 的数据包。

    tc  qdisc  add  dev  eth0  root  netem  loss  1%  

    也可以设置丢包的成功率,将 eth0 网卡的传输设置为随机丢掉 1% 的数据包,成功率为30% :

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

    3.3 模拟包重复

    将 eth0 网卡的传输设置为随机产生 1% 的重复数据包。

    tc  qdisc  add  dev  eth0  root  netem  duplicate 1%

    3.4 模拟数据包损坏

    将 eth0 网卡的传输设置为随机产生 0.2% 的损坏的数据包。

    tc  qdisc  add  dev  eth0  root  netem  corrupt  0.2%

    3.5 模拟数据包乱序

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

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

    详细信息请参考:Linux Foundation的《netem》。

  • 相关阅读:
    微信小程序之页面路由(九)
    Laravel生成Word文档
    ubuntu配置虚拟主机
    在eclipse中加入API文档帮助
    蓝桥杯java 基础练习 芯片测试
    Linux解压缩文件
    数据库范式(转)
    蓝桥杯java 基础练习 龟兔赛跑预测
    蓝桥杯java 算法提高 邮票面值设计
    蓝桥杯java 算法提高 统计单词数
  • 原文地址:https://www.cnblogs.com/arnoldlu/p/10281127.html
Copyright © 2011-2022 走看看