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

编程入门 行业动态 更新时间:2024-10-28 18:24:33

Python实现的基于数据包<a href=https://www.elefans.com/category/jswz/34/1771257.html style=队列管理内容"/>

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 参数实际上是一个模拟延迟和丢包的批处理大小,与真实的队列大小有区别,只是近似仿真。因此结果存在差异。

更多推荐

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

本文发布于:2024-02-11 17:42:14,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1682376.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:队列   数据包   内容   Python

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!