VivianSobers/Link-Failure-Detection-and-Recovery

GitHub: VivianSobers/Link-Failure-Detection-and-Recovery

一个基于 SDN 的链路故障自动检测与恢复方案,通过 Ryu 控制器实现流量无损切换。

Stars: 0 | Forks: 0

# 链路故障检测与恢复 一个软件定义网络项目,能够实时检测链路故障并自动重新路由流量,无需人工干预。 ## 问题 网络会失效。电缆会被割断,端口会宕机,硬件会损坏。在传统网络中,恢复速度缓慢且需要手动操作。而在 SDN 控制的网络中,控制器可以看见一切并即时做出反应。 本项目正是展示了这一点。当链路断开时,Ryu 控制器会检测到故障,移除旧的流规则,并在丢包发生前通过备份路径推送新的规则,从而立即恢复连接。 当链路恢复时,控制器会检测到恢复状态并切换回主路径。 ## 工作原理 网络拓扑由三个交换机和两个主机组成: ``` h1 --- s1 --- s2 --- h2 \ / s3 ``` **主路径:** h1 → s1 → s2 → h2 **备份路径:** h1 → s1 → s3 → s2 → h2 Ryu 控制器在启动时预安装所有交换机上的显式流规则。当 s1-s2 链路失效时,控制器检测到端口状态变化,删除现有流规则,并安装更高优先级的备份规则,通过 s3 立即恢复连接。 当链路重新恢复时,控制器检测到恢复并切换回主路径。 ## 技术栈 - **Mininet** — 网络仿真 - **Ryu** — SDN 控制器(OpenFlow 1.3) - **Open vSwitch** — 虚拟交换 - **Wireshark / iperf3** — 流量分析与验证 ## 安装 ### 前置条件 - Ubuntu 24.04(原生或虚拟机) - Python 3.11 - Mininet 2.3.0 - Ryu 4.34 ### 安装步骤 ``` # 安装 Mininet sudo apt install mininet -y # 安装 Python 3.11 sudo add-apt-repository ppa:deadsnakes/ppa -y sudo apt update sudo apt install python3.11 python3.11-venv -y # 在虚拟环境中设置 Ryu python3.11 -m venv ~/ryu-env source ~/ryu-env/bin/activate pip install setuptools==58.0.0 pip install dnspython==2.3.0 eventlet==0.33.3 pip install ryu # 安装工具 sudo apt install wireshark iperf3 -y ``` ## 运行项目 你需要两个终端。 **终端 1 — 启动 Ryu 控制器:** ``` source ~/ryu-env/bin/activate ryu-manager controller.py ``` **终端 2 — 启动 Mininet 拓扑:** ``` sudo python3 topology.py ``` ## 演示 ### 场景 1 — 正常运行 ``` mininet> pingall ``` 预期结果:0% 丢包。流量通过主路径 h1 → s1 → s2 → h2 传输。 ### 场景 2 — 链路故障与恢复 ``` mininet> link s1 s2 down mininet> pingall ``` 预期结果:0% 丢包。控制器检测到故障并通过 h1 → s1 → s3 → s2 → h2 重新路由。 ``` mininet> link s1 s2 up mininet> pingall ``` 预期结果:0% 丢包。控制器检测到恢复并切换回主路径。 ## 预期输出 **故障期间的控制器终端:** ``` ================================================== LINK FAILURE DETECTED on s1-s2! Switching to backup path. ================================================== ACTIVE PATH: h1 -> s1 -> s3 -> s2 -> h2 (Backup) ================================================== ``` **恢复期间的控制器终端:** ``` ================================================== LINK RESTORED on s1-s2! Switching back to primary path. ================================================== ACTIVE PATH: h1 -> s1 -> s2 -> h2 (Primary) ================================================== ``` ## 验证 - `pingall` 确认故障前后丢包率为 0% - `ovs-ofctl dump-flows` 确认每个交换机的流规则变化 - Wireshark 捕获确认实时流量路径切换 - iperf3 确认在重新路由期间吞吐量保持稳定 ## 执行证明 ### 网络启动 — 主路径活跃 ![网络启动](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/7f33c0f35c001930.png) ### 场景 1 — 正常 pingall(0% 丢包) ![正常 pingall](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/d477e6a32a001931.png) ### 链路故障检测 — 切换到备份路径 ![链路故障](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/94a0f12c98001932.png) ### 场景 2 — 链路故障期间的 pingall(0% 丢包) ![故障期间 pingall](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/bc08495c70001933.png) ### 链路恢复 — 返回主路径 ![链路恢复](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/6765d35f99001935.png) ### iperf3 — 正常运行(15.2 Gbits/sec) ![iperf3 正常](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/5c0d366481001936.png) ### iperf3 — 链路故障期间(16.8 Gbits/sec) ![iperf3 故障](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/42d770c5df001937.png) ### Wireshark — ICMP 捕获 ![Wireshark 全部](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/724d9adc55001938.png) ### Wireshark — ICMP 过滤(正常) ![Wireshark 过滤](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/84565b0715001940.png) ### Wireshark — ICMP 过滤(故障期间) ![Wireshark 故障期间](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/30db7ae586001941.png) ## 作者 Vivian Sobers E
标签:iperf3, Mininet, OpenFlow, Open vSwitch, Python, Ryu控制器, SDN, Wireshark, 句柄查看, 备份路径, 实时检测, 实验环境搭建, 无后门, 显式流规则, 流规则更新, 流量重路由, 端口状态, 网络仿真, 网络弹性, 网络自动恢复, 软件定义网络, 逆向工具, 链路故障恢复, 链路故障检测, 高可用网络