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实验, 吞吐量测量, 学习交换机, 带宽测试, 延迟测量, 性能测量, 流量控制, 流量阻断, 网络性能分析, 网络测量工具, 网络策略, 路径分析, 逆向工具