Manu-Raj/SDN-Network-Delay-Measurement-Tool

GitHub: Manu-Raj/SDN-Network-Delay-Measurement-Tool

一个基于 SDN 的网络延迟与性能测量工具,使用 Ryu 控制器与 Mininet 实现流量控制与度量。

Stars: 0 | Forks: 0

# 基于SDN的网络延迟与性能测量工具 ## 问题陈述 在计算机网络中,测量**延迟(时延)**和**吞吐量(带宽)**对于分析性能和确保高效通信至关重要。 本项目实现了一个**基于SDN的网络监控工具**,使用: - Ryu 控制器 - Mininet 模拟器 系统设计用于: - 使用 ICMP(ping)测量**往返时间(RTT)** - 使用 iperf 测量**吞吐量** - 分析**不同路径上的延迟变化** - 演示**基于SDN的流量控制(阻断策略)** ## 项目结构 ``` SDN-Network-Delay-Measurement-Tool/ │── src/ │ ├── controller.py # Ryu controller (SDN logic) │ ├── measure.py # RTT + iperf measurement scripts │ └── topology.py # Mininet Topology │── .gitignore │── requirements.txt └── README.md ``` ## 目标 * 实现基于 OpenFlow 1.3 的**学习交换机** * 使用 ICMP(ping)测量**RTT** * 使用 iperf 测量**吞吐量** * 演示**SDN策略执行(流量阻断)** * 分析网络路径间的性能差异 ## 网络拓扑 ``` h1 ---\ \ s1 -------- s2 / \ h2 ---/ \--- h3 \ \--- h4 ``` ### 链路配置 | 链路 | 带宽 | 延迟 | | ------ | ----- | ---- | | h1–s1 | 100 Mbps | 5 ms | | h2–s1 | 100 Mbps | 5 ms | | h3–s2 | 100 Mbps | 5 ms | | h4–s2 | 100 Mbps | 5 ms | | s1–s2 | 50 Mbps | 10 ms | ## 系统要求 - 操作系统:Ubuntu / Linux(推荐) - Python:3.9 - 工具: - Mininet - Ryu 控制器 - iperf ## 系统要求(重要) 本项目设计优先在 **Linux** 上运行。 ### 推荐环境 * 基于 Ubuntu / Debian 的 Linux 系统 * Python **3.9(推荐,以确保与 Ryu & Mininet 兼容)** ### 为什么需要 Linux? * Mininet 依赖 Linux 内核特性(网络命名空间、tc 等) * 在 Windows/macOS 上运行可能导致失败或需要虚拟化 ## 使用方法 ### 步骤 1:安装依赖 ``` sudo apt update sudo apt install mininet iperf pip install -r requirements.txt ``` ### 步骤 2:启动控制器(终端 1) ``` ryu-manager src/controller.py ``` ### 步骤 3:运行拓扑(终端 2) ``` sudo python3 src/topology.py ``` ## 执行模式(重要) 项目支持 **两种模式**: ### 🟢 1. 正常模式(默认) 允许所有流量。 ### ✔ 配置 在 `controller.py` 中: ``` self.block_enabled = False ``` 在 `topology.py` 中: ``` measure_iperf(net, block_enabled=False) ``` ### ✔ 行为 * 所有主机之间通信成功 * `pingall` → 0% 丢包 * iperf 对所有测试对运行 ### 🔴 2. 阻断模式(SDN策略演示) 控制器阻断: ``` h1 → h4 ❌ ``` ### ✔ 配置 在 `controller.py` 中: ``` self.block_enabled = True ``` 在 `topology.py` 中: ``` measure_iperf(net, block_enabled=True) ``` ### ✔ 行为 | 通信 | 结果 | | ---------- | ------- | | h1 → h4 | ❌ 阻断 | | h4 → h1 | ✅ 允许 | | 其他 | ✅ 允许 | ### 重要说明 * 阻断是**单向的**(仅 h1 → h4) * 被阻断路径的 iperf 测试会被跳过以防止挂起 * 控制器动态丢弃匹配规则的包 ## 性能测量 ### RTT 测量 * 使用 ICMP(`ping`) * 提取最小 / 平均 / 最大 / 丢包率 ### 吞吐量测量 * 使用 `iperf` * 根据拓扑显示带宽差异 ## 关键观察 * RTT 随跳数增加而增加 * 吞吐量受瓶颈链路(50 Mbps)限制 * SDN 实现动态流量控制 * 策略执行通过 OpenFlow 规则完成 ## 常见说明 * `sch_htb quantum` 警告可以忽略 * 始终在启动拓扑前启动控制器 * 确保使用 Python 3.9 环境 ## 结论 本项目演示了 SDN 如何实现: * 可编程网络 * 性能监控 * 动态策略执行
标签:ICMP, Iperf, Linux网络, MacOS取证, Mininet, OpenFlow, Ping, Python网络, RTT测试, Ryu控制器, SDN, SDN实验, 吞吐量测量, 学习交换机, 带宽测试, 延迟测量, 性能测量, 流量控制, 流量阻断, 网络性能分析, 网络测量工具, 网络策略, 路径分析, 逆向工具