Skip to content

YuhangChen1/HUST_NET_Experiment

Repository files navigation

🌐 计算机网络实验 Lab for 本硕博,智科,大数据

License

强烈建议阅读《计算机网络实验报告_这谁放在我仓库的.pdf》,第三个实验看了包懂,不懂就联系作者。

📚 完整的计算机网络实验集合,涵盖网络拓扑构建、SDN 控制器、流表配置等核心内容

⭐ 如果这个项目对你有帮助,请给个 Star!

ALL LAB FINISHED!

📂 实验内容

Lab 1: FAT TREE 拓扑实验 ✅

👉 查看 Lab 1 详细指南


Lab 2: SDN 自学习与环路检测实验 ✅

核心内容:基于 OpenFlow/OS-Ken 控制器实现交换机自学习和环路广播防治

技术栈

  • 🎮 OS-Ken 控制器 - OpenFlow SDN 控制器
  • 🔧 Mininet - 网络仿真器
  • 🌐 OpenFlow 1.3 - 南向接口协议
  • 📊 Wireshark - 数据包分析

👉 查看 Lab 2 详细指南


Lab 3: SDN 链路选择与故障恢复实验 ✅

👉 查看 Lab 3 详细指南

  1. 📖 先阅读 QUICKSTART.md 快速上手
  2. 🔧 必读 OSKEN_MODIFICATION.md 修改 OS-Ken 源文件
  3. 📝 查看 CHANGES_SUMMARY.md 了解代码修改
  4. 📋 使用 REPORT_TEMPLATE.md 撰写报告

核心内容:通过 LLDP 协议实现链路发现和时延测量,实现动态路径选择和故障容错

技术栈

  • 📡 LLDP 协议 - 链路层发现协议
  • 🎮 OS-Ken 控制器 - OpenFlow SDN 控制器
  • 📊 NetworkX - 图算法库
  • ⏱️ Echo 消息 - 时延测量
  • 🔧 Mininet - 网络仿真器

实验任务

  1. 任务一:基于最少跳数的路径选择

    • 理解 LLDP 拓扑发现机制
    • 使用 NetworkX 计算最短路径
    • 处理 ARP 环路问题
  2. 任务二:基于最小时延的路径选择

    • LLDP 时延测量(Tlldp
    • Echo RTT 测量(Techo
    • 计算链路单向时延
    • 动态选择最优路径
  3. 任务三:链路故障容忍与自动恢复

    • 捕获 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+

安装 Mininet

# 方法 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-switch

克隆本仓库

git clone https://github.com/yourusername/lab.git
cd lab

运行实验

Lab 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 文件!

里面包含:

  • ✅ 详细的实验步骤
  • 📊 数据收集方法
  • 🐛 常见问题及解决方案
  • 📸 实验报告模板
  • 🎯 演示技巧



🤝 贡献指南

欢迎贡献!可以通过以下方式参与:

  1. 🐛 报告 Bug:发现问题请提 Issue
  2. 💡 提出建议:改进想法请提 Issue
  3. 🔧 提交代码:欢迎 Pull Request
  4. 📖 完善文档:改进 README 或注释
  5. 给个 Star:这是对我们最大的鼓励!

提交 Pull Request

# 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

📚 学习资源

推荐阅读

视频教程


📄 许可证

本项目采用 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 History

如果这个项目帮助到了你,请点击右上角的 ⭐ Star 按钮!

Star History Chart

⭐ 如果觉得有用,别忘了给个 Star!⭐

⬆ 回到顶部

Made with ❤️ by Network Lab Team

About

这是2025年秋华中科技大学计算机网络实验本硕博,智科,大数据的计网实验SDN

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors