• Liunx模拟网络延时


    模拟广区域网络延迟
    https://wiki.linuxfoundation.org/networking/netem#dokuwiki__top

    恢复:tc qdisc del root dev eth2 2>/dev/null

    这是最简单的示例,它只是为来自本地以太网的所有数据包添加固定数量的延迟。

    tc qdisc add dev eth0 root netem delay 100ms

    现在,在本地网络上托管的简单 ping 测试应显示增加 100 毫秒。延迟受内核 (HZ) 的时钟分辨率限制。在大多数 2.4 系统上,系统时钟以 100hz 的速度运行,允许以 10ms 的增量延迟。 在 2.6 上,该值是 1000 到 100 hz 的配置参数。

    以后的示例只需更改参数,而无需重新加载 qdisc

    真正的广面积网络显示可变性,因此可以添加随机变异。

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

    这会导致添加的延迟为 100ms ± 10ms。网络延迟变化不是纯粹的随机的,因此要模拟一下,也有相关值。

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

    这将导致添加的延迟为 100ms ± 10ms,下一个随机元素取决于最后一个 25%。这不是真正的统计相关性,而是一个近似值。

    延迟分布

    通常,网络中的延迟不均匀。使用类似正态分布来描述延迟的变化更为常见。netem 学科可以采取表来指定非统一分布。

    tc qdisc change dev eth0 root netem delay 100ms 20ms distribution normal

    实际表(普通表、帕雷托表、帕雷托表)作为iproute2 编译的一部分生成,并放置在 /usr/lib/tc 中;因此,它是可能的,通过一些努力,使你自己的分布基于实验数据。

    数据包丢失

    随机数据包丢失在"tc"命令中指定百分比。尽可能小的非零值是:

    232 = 0.000000232%

    tc qdisc change dev eth0 root netem loss 0.1%

    这会导致随机丢弃百分之一(即 1000 个数据包中的 1 个)的 1/10。

    还可以添加可选关联。这会导致随机数生成器的随机性较小,并可用于模拟数据包突发丢失。

    tc qdisc change dev eth0 root netem loss 0.3% 25%

    这将导致 0.3% 的数据包丢失,并且每个连续的概率取决于最后一个数据包的四分之一。

    Probn =. 25 = Probn - 1 =. 75 = 随机

    警告

    当在本地使用损耗时(不在网桥或路由器上),损耗将报告给上层协议。这可能会导致 TCP 重新发送和行为,就像没有损失一样。当测试协议响应丢失时,最好在网桥或路由器上使用netem
    数据包复制

    数据包复制的指定方式与数据包丢失相同。

    tc qdisc change dev eth0 root netem duplicate 1%

    数据包损坏

    可以使用损坏选项模拟随机噪声(在 2.6.16 或更晚)。这将在数据包中的随机偏移量引入一个位错误。

    tc qdisc change dev eth0 root netem corrupt 0.1%

    数据包重新订购
    有两种不同的方法来指定重新排序。第一个方法间隙使用固定序列,并重新排序每个第 N 个数据包。一个简单的用法是:

    tc qdisc change dev eth0 root netem gap 5 delay 10ms

    这会导致每个第 5 个 (第 10 个,第 15 个,...) 数据包立即发送,并且所有其他数据包延迟 10 毫秒。这是可预测的,对于基础协议测试(如重新组装)非常有用。

    第二种形式的重新排序更像现实生活。它会导致一定百分比的数据包被错误排序。

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

    在此示例中,25% 的数据包(相关性为 50%)将立即发送, 其他人将延迟 10 毫秒。

    如果随机延迟值出问题,较新版本的 netem 也会重新订购数据包。以下将导致一些重新排序:

    tc qdisc change dev eth0 root netem delay 100ms 75ms

    如果第一个数据包的随机延迟为 100ms(100ms 基 - 0ms 抖动),而第二个数据包在 1 毫秒后发送,并且获得 50ms 的延迟(100ms 基 - 50ms 抖动);将先发送第二个数据包。这是因为内特姆内部的队列纪律 tfifo,按时间按顺序发送数据包。

    警告

    混合重新排序形式可能会导致意外的结果
    任何重新排序的方法工作,一些延迟是必要的。
    如果延迟小于数据包间到达时间,则不会看到重新排序。
    速率控制

    Netem 学科没有内置的速率控制,而是使用执行速率控制的其他学科之一。在此示例中,我们使用令牌存储桶筛选器(TBF) 来限制输出。

    tc qdisc add dev eth0 root handle 1:0 netem delay 100ms

    tc qdisc add dev eth0 parent 1:1 handle 10: tbf rate 256kbit buffer 1600 limit 3000

    tc -s qdisc ls dev eth0

    qdisc netem 1: limit 1000 delay 100.0ms
    Sent 0 bytes 0 pkts (dropped 0, overlimits 0 )
    qdisc tbf 10: rate 256Kbit burst 1599b lat 26.6ms
    Sent 0 bytes 0 pkts (dropped 0, overlimits 0 )

  • 相关阅读:
    [美团 CodeM 初赛 Round A]最长树链
    [POI2005]Toy Cars
    [CodePlus2017NOV]晨跑
    [JLOI2011]不重复数字
    [NEERC2007][SHOI2008]Cactus Reloaded
    [NOI2015]软件包管理器
    [HAOI2015]树上操作
    CF1097D Makoto and a Blackboard
    Luogu P5339 [TJOI2019]唱、跳、rap和篮球
    HNCPC2019H 有向图
  • 原文地址:https://www.cnblogs.com/notfind/p/14260068.html
Copyright © 2020-2023  润新知