强烈建议阅读《计算机网络实验报告_这谁放在我仓库的.pdf》,第三个实验看了包懂,不懂就联系作者。
📚 完整的计算机网络实验集合,涵盖网络拓扑构建、SDN 控制器、流表配置等核心内容
核心内容:基于 OpenFlow/OS-Ken 控制器实现交换机自学习和环路广播防治
技术栈:
- 🎮 OS-Ken 控制器 - OpenFlow SDN 控制器
- 🔧 Mininet - 网络仿真器
- 🌐 OpenFlow 1.3 - 南向接口协议
- 📊 Wireshark - 数据包分析
- 📖 先阅读 QUICKSTART.md 快速上手
- 🔧 必读 OSKEN_MODIFICATION.md 修改 OS-Ken 源文件
- 📝 查看 CHANGES_SUMMARY.md 了解代码修改
- 📋 使用 REPORT_TEMPLATE.md 撰写报告
核心内容:通过 LLDP 协议实现链路发现和时延测量,实现动态路径选择和故障容错
技术栈:
- 📡 LLDP 协议 - 链路层发现协议
- 🎮 OS-Ken 控制器 - OpenFlow SDN 控制器
- 📊 NetworkX - 图算法库
- ⏱️ Echo 消息 - 时延测量
- 🔧 Mininet - 网络仿真器
实验任务:
-
任务一:基于最少跳数的路径选择
- 理解 LLDP 拓扑发现机制
- 使用 NetworkX 计算最短路径
- 处理 ARP 环路问题
-
任务二:基于最小时延的路径选择
- LLDP 时延测量(Tlldp)
- Echo RTT 测量(Techo)
- 计算链路单向时延
- 动态选择最优路径
-
任务三:链路故障容忍与自动恢复
- 捕获
EventOFPPortStatus事件 - 自动检测链路故障
- 动态切换备用路径
- 故障恢复后自动回切
- 捕获
Lab 3 结构:
lab3/
├── README.md # 📘 详细的实验指南(1351 行)
├── QUICKSTART.md # 🚀 快速开始指南(3 个任务的运行步骤)
├── OSKEN_MODIFICATION.md # 🔧 OS-Ken 源文件修改说明
├── CHANGES_SUMMARY.md # 📝 代码修改详细总结
├── COMPLETION_SUMMARY.md # ✅ 完成情况总结和代码统计
├── REPORT_TEMPLATE.md # 📋 实验报告模板(含思考题)
├── least_hops.py # ✅ 任务一:最少跳数路径
├── shortest_delay.py # ✅ 任务二+三:最小时延路径和故障容忍
├── network_awareness.py # 📡 拓扑发现和链路时延测量
├── topo.py # 🌐 实验拓扑(9 台交换机)
└── setup.sh # 🔨 环境设置脚本
# 操作系统
Ubuntu 18.04 / 20.04 / 22.04 (推荐使用虚拟机)
# 必需软件
- Python 3.6+
- Mininet 2.3.0+
- Open vSwitch 2.9.0+# 方法 1:使用官方脚本(推荐)
git clone https://github.com/mininet/mininet
cd mininet
git checkout 2.3.0
./util/install.sh -a
# 方法 2:使用 apt(Ubuntu)
sudo apt update
sudo apt install mininet openvswitch-switchgit clone https://github.com/yourusername/lab.git
cd labLab 1(FAT TREE 拓扑):
cd lab1
sudo python3 fat_tree_topo.py🎉 30 秒后看到 pingall 成功!
Lab 2(SDN 自学习):
cd lab2
source setup.sh # 一键设置环境
# 终端 1:
osken-manager self_learning_switch.py
# 终端 2:
sudo ./topo_1.py🎉 实现交换机自学习功能!
Lab 3(链路选择与故障恢复):
cd lab3
source setup.sh # 一键设置环境
# 任务一:最少跳数路径
# 终端 1:
sudo ./topo.py
# 终端 2:
uv run osken-manager least_hops.py --observe-links
# Mininet: h2 ping h9
# 任务二+三:最小时延路径和故障容忍
# 终端 1:
sudo ./topo.py
# 终端 2:
uv run osken-manager shortest_delay.py --observe-links
# Mininet: h2 ping h9
# Mininet: link s6 s7 down (测试故障切换)
# Mininet: link s6 s7 up (测试故障恢复)🎉 实现动态路径选择和自动故障恢复!
每个实验文件夹都包含:
Lab 1 结构:
lab1/
├── README.md # 📘 详细的实验指南
├── fat_tree_topo.py # ✅ 完整工作版本
├── fat_tree_topo_4_bad.py # ❌ 问题演示版本
├── debug.py # 🔧 调试版本
└── [其他辅助文件]
Lab 2 结构:
lab2/
├── README.md # 📘 详细的实验指南
├── setup.sh # 🚀 一键环境设置脚本
├── simple_switch.py # 📦 简单交换机(洪泛)
├── self_learning_switch.py # ✅ 自学习交换机
├── loop_breaker_switch.py # 🔧 端口禁用解决环路
├── loop_detecting_switch.py # 🔍 转发历史检测环路
├── topo_1.py # 🌐 无环路拓扑
├── topo_2.py # 🔁 有环路拓扑
└── instruction.md # 📖 详细操作指南
Lab 3 结构:
lab3/
├── README.md # 📘 详细的实验指南(1351 行)
├── QUICKSTART.md # 🚀 快速开始指南(3 个任务的运行步骤)
├── OSKEN_MODIFICATION.md # 🔧 OS-Ken 源文件修改说明
├── CHANGES_SUMMARY.md # 📝 代码修改详细总结
├── COMPLETION_SUMMARY.md # ✅ 完成情况总结和代码统计
├── REPORT_TEMPLATE.md # 📋 实验报告模板(含思考题)
├── least_hops.py # ✅ 任务一:最少跳数路径
├── shortest_delay.py # ✅ 任务二+三:最小时延路径和故障容忍
├── network_awareness.py # 📡 拓扑发现和链路时延测量
├── topo.py # 🌐 实验拓扑(9 台交换机)
└── setup.sh # 🔨 环境设置脚本
请务必先阅读各个实验的 README.md 文件!
里面包含:
- ✅ 详细的实验步骤
- 📊 数据收集方法
- 🐛 常见问题及解决方案
- 📸 实验报告模板
- 🎯 演示技巧
欢迎贡献!可以通过以下方式参与:
- 🐛 报告 Bug:发现问题请提 Issue
- 💡 提出建议:改进想法请提 Issue
- 🔧 提交代码:欢迎 Pull Request
- 📖 完善文档:改进 README 或注释
- ⭐ 给个 Star:这是对我们最大的鼓励!
# 1. Fork 本仓库
# 2. 创建你的分支
git checkout -b feature/amazing-feature
# 3. 提交改动
git commit -m "Add some amazing feature"
# 4. 推送到分支
git push origin feature/amazing-feature
# 5. 提交 Pull Request- 🎥 Mininet 入门教程
- 🎥 SDN 基础课程
本项目采用 MIT License 开源协议。
MIT License
Copyright (c) 2025
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files...
有问题或建议?
计算机学院都知道我是谁吧(
如果这个项目帮助到了你,请点击右上角的 ⭐ Star 按钮!