Mininet 是一个强大的网络仿真器,可以在单个系统上模拟复杂的网络环境。它利用Linux的网络命名空间创建一个由虚拟主机、交换机、路由器和链路组成的网络,并且这个网络的行为表现得就像是一个真实的物理网络一样。Mininet 特别适合于SDN和OpenFlow协议的开发和测试,因为它支持使用自定义控制器来控制网络中的虚拟交换机。在Mininet环境中,用户可以快速启动、修改网络拓扑,并且可以实时地测试网络配置和应用程序。
Mininet承担的是网络创建和管理的角色。它负责模拟网络设备和拓扑,并提供了一个实验平台,让用户可以在虚拟环境中测试他们的SDN解决方案。
Ryu 是一个用Python编写的SDN控制器框架,提供了一套完整的控制器功能,允许开发人员编写自己的网络管理和控制程序。Ryu 支持多种SDN协议,包括OpenFlow,是开发和测试SDN应用程序的理想选择。Ryu控制器允许开发人员创建用于定义网络流量处理方式的策略和规则。
在 Mininet + Ryu 的环境中,Ryu 承担的是网络控制和管理的角色。Ryu 控制器与Mininet仿真的网络设备进行通信,控制网络流量的流向,并且实施网络策略。
Mininet + Ryu 安装
安装环境及版本需求:
- Ubuntu 22.04
- Mininet 2.3.0
- Ryu 4.34
- Python 3.8
- Ovs 2.9.8
- OpenFlow 1.3
Mininet 安装
官网支持3种安装方式,这里采用从源进行安装的方式

更新系统软件包
1 | sudo apt-get update |
下载并安装
1 | sudo mkdir -p /opt/mininet_package |
参数-a:安装 Mininet VM 中包含的所有内容,包括 Open vSwitch 等依赖项以及 OpenFlowwireshark 解析器和 POX 等附加项。默认情况下,这些工具将内置在您的主目录中创建的目录中。
安装过程中出现如图报错:
解决方法:
1 | git clone --global url.https://github.com/.insteadOf git://github.com/ |
看到如下界面则说明安装完成:
安装完成后,进行测试,测试成功如图所示
1 | sudo mn --switch ovsbr --test pingall |

Ryu安装
Ryu安装需要的python版本为3.8,但是Ubuntu 22.04系统的python3版本为3.10;
所以首先要先下载python3.8,启用虚拟环境ryu-venv;
1 | sudo apt-get update |


上面是启动ryu的虚拟环境,接下来是安装ryu,采用的是源安装的方式
1 | git clone https://github.com/faucetsdn/ryu.git |
测试是否安装成功:
1 | pip show ryu |

进入和退出虚拟环境:
1 | source ryu-venv/bin/activate |
接下来安装并启动Ryu GUI;
1 | pip install -r tools/pip-requires |

然后打开浏览器输入http://0.0.0.0:8080就可以访问GUI界面了
Mininet 与 Ryu联动,运行openflow1.3的交换机
1 | ryu-manager --observe-links --verbose /home/ubuntu/ryu/app/gui_topologygui_topology.py /home/ubuntu/ryu/app/simple_switch_13.py |
命令参数解读:
--observe-links:这是一个选项,告诉ryu-manager启动一个内置的 Ryu 应用(ryu.topology.observers.links),它可以发现网络中的链路,并观察链路的变化。--verbose:这个选项使 Ryu 在执行时提供详细的日志输出,有助于调试或详细跟踪 Ryu 的行为。gui_topology.py:这个py提供了一个网络拓扑的图形用户界面,实现可视化观察网络状态。simple_switch_13.py:实现了一个简单的 OpenFlow 1.3 兼容的交换机。
另外打开一个终端,输入Mininet的语句:
1 | sudo mn --controller remote,ip=127.0.0.1 --topo linear,3 --mac --switch ovsk --link tc |
命令参数解读:
--controller remote,ip=127.0.0.1:这告诉Mininet使用一个远程控制器,其IP地址是127.0.0.1(localhost)。这意味着Mininet将尝试连接到运行在本地计算机上的SDN控制器。--topo linear,3:这定义了将被创建的网络拓扑。linear是拓扑类型,后面的3指定了拓扑中的交换机数量。在这里,创建了一个线性拓扑,其中包含3个串联连接的交换机。--mac:设置Mininet为每个主机自动设置MAC地址,其地址会根据主机编号来生成。--switch ovsk:指定使用 Open vSwitch 内核模块作为虚拟交换机。
--link tc:使用 Linux 的tc(traffic control)工具来配置网络链路参数,如延迟、带宽限制等。
然后就可以看到如下界面,到此,环境的搭建就成功了~
