在Ubuntu 22.04上,我是这样一步步搞定Mininet和Ryu联动的(附完整排错记录)

张开发
2026/4/12 16:00:37 15 分钟阅读

分享文章

在Ubuntu 22.04上,我是这样一步步搞定Mininet和Ryu联动的(附完整排错记录)
在Ubuntu 22.04上我是这样一步步搞定Mininet和Ryu联动的附完整排错记录作为一名长期深耕SDN领域的开发者我深知Mininet与Ryu联动调试的痛点——那些看似简单的安装步骤背后往往隐藏着版本冲突、依赖缺失、网络连接失败等暗礁。本文将用3000字实战笔记带你穿越从零部署到可视化拓扑展示的全流程重点解决GitHub克隆失败、Python包版本冲突、Ryu GUI空白等高频问题。以下操作均在纯净的Ubuntu 22.04 LTS环境下验证建议读者按顺序执行每个步骤。1. 环境准备与避坑策略在开始安装前有四个关键准备动作能节省80%的后续问题快照策略VMware/VirtualBox务必在以下节点创建快照刚完成Ubuntu基础系统安装后成功安装Git和Python3环境后Mininet源码下载完成后网络优化国内用户建议永久修改GitHub镜像源避免后续克隆失败git config --global url.https://hub.fastgit.org/.insteadOf https://github.com/依赖完整性检查运行以下命令确保基础环境完备sudo apt update sudo apt upgrade -y sudo apt install -y build-essential python3-dev libffi-dev libssl-devPython环境隔离虽然Ubuntu 22.04自带Python 3.10但强烈建议使用venv创建独立环境python3 -m venv ~/sdn-env source ~/sdn-env/bin/activate提示所有命令中的~/sdn-env/bin/activate需要替换为你的实际虚拟环境路径。若遇到E: Unable to locate package错误先执行sudo apt update --fix-missing。2. Mininet源码安装实战2.1 非标准安装路径问题处理官方推荐的install.sh脚本有时会因路径权限失败建议分步手动安装git clone https://gitclone.com/github.com/mininet/mininet cd mininet git checkout 2.3.0 # 明确指定稳定版本安装核心组件时若遇到openflow克隆失败改用以下命令序列sudo apt install -y mininet openvswitch-switch cd util/ ./install.sh -n # 仅安装必要组件验证安装时特别关注OVS兼容性sudo mn --test pingall --switch ovs,protocolsOpenFlow13常见错误解决方案对照表错误现象根本原因修复方案ping: unresolved symbolOVS内核模块未加载sudo modprobe openvswitchUnable to contact controller默认使用OF10协议添加--switch ovs,protocolsOpenFlow13git clone timeoutGitHub连接不稳定使用镜像源或配置HTTP代理2.2 自定义拓扑测试技巧新建custom_topo.py文件实现灵活测试from mininet.topo import Topo class MyTopo(Topo): def __init__(self): Topo.__init__(self) h1 self.addHost(h1) h2 self.addHost(h2) s1 self.addSwitch(s1) self.addLink(h1, s1, bw10) self.addLink(h2, s1, bw5) topos {mytopo: MyTopo}启动测试时指定自定义拓扑sudo mn --custom custom_topo.py --topo mytopo --test pingall3. Ryu控制器深度配置3.1 解决Python包地狱问题Ryu对依赖版本极其敏感推荐使用以下精确版本组合pip install --upgrade pip pip install eventlet0.33.3 webob1.8.7 routes2.5.1安装Ryu核心时添加--no-deps避免自动安装错误依赖git clone https://gitclone.com/github.com/osrg/ryu cd ryu pip install -r tools/pip-requires --no-deps python setup.py install3.2 典型错误实时修复当遇到collections.MutableMapping错误时修改文件/usr/lib/python3.10/collections/__init__.py在文件开头添加import collections.abc collections.MutableMapping collections.abc.MutableMapping保存后执行sudo python -m compileall /usr/lib/python3.10/验证控制器是否正常响应OpenFlow 1.3ryu-manager ryu.app.simple_switch_13 --verbose4. 可视化联动全流程演示4.1 GUI拓扑显示异常排查当Ryu GUI显示空白时按以下步骤检查确认控制器已加载拓扑应用ryu-manager --observe-links ryu.app.gui_topology.gui_topology ryu.app.simple_switch_13Mininet启动命令必须指定远程控制器sudo mn --controllerremote,ip127.0.0.1 --topolinear,3 --mac --switch ovsk,protocolsOpenFlow13浏览器访问http://127.0.0.1:8080时若仍无节点检查控制器日志是否有packet_in事件Mininet是否执行pingall触发链路发现防火墙是否放行8080端口4.2 性能调优参数在/etc/sysctl.conf中添加以下网络参数优化仿真性能net.core.somaxconn 2048 net.ipv4.tcp_max_syn_backlog 4096 net.core.netdev_max_backlog 5000加载配置后启动Mininet时添加QoS限制sudo mn --link tc,bw10,delay5ms,loss0经过上述步骤你应该能看到完整的网络拓扑图。我在实际测试中发现当链路延迟设置为5ms时GUI的实时流量展示最为流畅。如果遇到交换机图标丢失的情况尝试清除浏览器缓存后重新加载页面。

更多文章