• Python实现的基于数据包队列管理内容


    基于数据包队列管理内容

    实验内容

    实验内容一

    重现 Bufferbloat 结果

    • h1(发送方)在对 h2 进行 iperf 的同时,测量 h1 的拥塞窗口值(cwnd)、r1-eth1 的队列长度(qlen)、h1 与 h2 间的往返延迟(rtt)
    • 变化 r1-eth1 的队列大小,考察其对 iperf 吞吐率和上述三个指标的影响

    实验内容二

    解决 BufferBloat 问题

    • Tail Drop
    • RED
    • CoDel

    数据处理及结果

    重现 Bufferbloat 结果

    处理的可视化脚本位于 10-bufferbloat/reproduce_data.ipynb 中,实验根据获取的数据,利用 Matplotlib 画图,得到了下列结果。

    CWND

    在这里插入图片描述

    上图为拥塞窗口大小随时间变化的曲线。测试刚开始时,队列大小为 100 的拥塞窗口迅速增长达到 600 的峰值,队列大小为 200 的的拥塞窗口迅速增长达到 1200 的峰值。可见该实验环境下,拥塞窗口峰值大小为队列大小的两倍。
    接着拥塞窗口迅速回落到队列大小一致的水平,接着再次增长。拥塞窗口随收包增长,随丢包下降。另外可以看到大队列后续的波动较小队列不明显。

    QLEN

    在这里插入图片描述

    上图为即时队列长度随时间变化的曲线。队列大小为 100 的曲线的上界为 100。测试刚开始时队列快速上升达到峰值,当队列满时,直接丢弃新接收的包,由于发送速率骤降,使得队列长度降低至最大队列长度的 40% 左右。随后一直这次循环下去。

    RTT

    在这里插入图片描述

    上图为 RTT 随时间变化的曲线。测试刚开始时,由于接收队列的快速增长,网络延时急剧增加,随后也随着队列缩短而减少。之后的时间内,延时随着队列长度的变化而变化,波动明显。另外可以看到大队列后续的波动较小队列不明显。

    iperf 吞吐率

    队列大小 200 时,iperf Transfer 成功的带宽平均大约为 29.4Mb/s,峰值为 37.7 Mb/s,有 2/3 的时间区间会下降到 0。

    队列大小 100 时,iperf Transfer 成功的带宽平均大约为 15Mb/s,峰值为 37.7 Mb/s,有 1/3 的时间区间会下降到 0。

    队列大小 10 时,iperf Transfer 成功的带宽平均大约为 9Mb/s,峰值为 12.6 Mb/s,最低为 6.9Mb/s。

    因此可以看出队列越长,iperf Transfer 为 0 的可能性越大,但是 Transfer 成功时的带宽也越大。

    解决 BufferBloat 问题

    在这里插入图片描述

    上图中出现了三种方式来 BufferBloat 问题的曲线。

    可以看出,tail drop 的队列延时远高于 RED 和 CoDel。其中 CoDel 的性能表现最佳。

    另外值得注意的是,tail drop 曲线一直出现“尖端”情况,和 ppt 中稳定的一段峰值不同,这是因为 Mininet 环境下仿真环境的差异导致的。在 Mininet 中,maxq 参数实际上是一个模拟延迟和丢包的批处理大小,与真实的队列大小有区别,只是近似仿真。因此结果存在差异。

  • 相关阅读:
    【遥感卫星数据】Landsat数据Collection1和Collection2区别
    【学懂数据结构】数据结构绪论
    Promrtheus+Grafana+onealert--实现报警
    GitHub的Java面试项目
    大语言模型在研究领域的应用——多模态大语言模型
    第二天:ALOAM前端讲解【第1部分】
    管理系统搭建一般步骤(会话跟踪 路由导航守卫 响应拦截器)
    【学习笔记】高光谱基础知识
    基于SpringBoot的网上点餐系统
    NAS媒体库资源归集整理工具nas-tools
  • 原文地址:https://blog.csdn.net/newlw/article/details/126919778