Mininet安装与使用

Mininet安装与使用

Mininet介绍

前言

最近在学习计算机网络时,学到了SDN,想看看有没有相关的网络仿生工具,就看到了这个mininet,在云服务器上跑了一下,还不错。

Mininet 简介

Mininet 是一个轻量级的网络仿真工具,专为软件定义网络(SDN)研究和开发设计。它允许用户在单台计算机上快速创建包含虚拟主机、交换机、路由器和控制器的自定义网络拓扑。通过 Linux 内核的命名空间(namespaces)和虚拟化技术(如 Open vSwitch),Mininet 能够高效模拟复杂网络环境,支持 OpenFlow、Netconf 等协议,是学术界和工业界测试 SDN 应用的首选工具。

核心优势:

快速部署:一键生成虚拟网络,支持自定义拓扑。低成本实验:无需物理设备,单机模拟大规模网络。无缝兼容:与主流 SDN 控制器(如 Ryu、POX、ONOS)集成。真实代码环境:基于实际 Linux 网络栈,行为接近真实设备。

Mininet 安装教程

以下是针对不同系统的安装方法,推荐使用 Ubuntu 系统以获得最佳兼容性。

方法 1: Ubuntu 官方仓库安装(推荐)

适用场景:快速安装稳定版本。

更新系统包

sudo apt update && sudo apt upgrade -y

安装 Mininet

sudo apt install mininet -y

验证安装

sudo mn --test pingall # 启动默认拓扑并测试连通性

若输出 *** Results: 100% dropped,可能需要安装 Open vSwitch:

sudo apt install openvswitch-switch -y

方法 2: 源码安装(获取最新版)

适用场景:需要最新功能或自定义配置。

安装依赖

sudo apt install git net-tools ethtool socat -y

克隆仓库并安装

git clone https://github.com/mininet/mininet

cd mininet

git tag # 查看可用版本(如选择最新版)

git checkout -b 2.3.0 # 替换为所需版本号

sudo util/install.sh -a # -a 安装全部组件(包括 Open vSwitch, Wireshark 等)

验证安装

sudo mn --version # 查看版本

sudo mn --test pingall

方法 3: Docker 容器安装

适用场景:快速体验或隔离环境。

安装 Docker

curl -fsSL https://get.docker.com | sudo sh

sudo usermod -aG docker $USER # 将用户加入 docker 组

newgrp docker # 刷新组权限

拉取 Mininet 镜像

docker pull iwaseyusuke/mininet

启动容器并测试

docker run -it --rm --privileged iwaseyusuke/mininet

mn> h1 ping h2 # 在容器内执行 ping 测试

常见问题解决

权限不足:确保使用 sudo 执行命令,或添加用户到 sudoers 文件。Open vSwitch 未启动:运行 sudo service openvswitch-switch start。Wireshark 集成:安装时添加 -w 参数(sudo util/install.sh -w)。

快速入门示例

创建一个简单拓扑(1 交换机 + 2 主机)并测试:

sudo mn --topo single,2 --mac --switch ovsk --controller remote

mininet> pingall # 测试连通性

mininet> h1 ifconfig # 查看主机网络配置

通过 Mininet,您可以高效验证网络设计、调试 SDN 控制器或进行网络安全实验。

Mininet使用技巧

Mininet 是一个轻量级的网络仿真工具,主要用于创建虚拟的软件定义网络(SDN)环境,支持快速构建、测试和调试网络拓扑。以下是 Mininet 的核心使用方法:

1. 安装 Mininet

Ubuntu/Debian 系统(推荐):sudo apt-get update

sudo apt-get install mininet

其他系统:可通过源码安装(详见 Mininet 官方文档)。

2. 基本命令

启动默认拓扑

sudo mn

这会创建一个简单的拓扑:1 台 OpenFlow 交换机连接 2 台主机(h1 和 h2)。

常用 CLI 命令

在 Mininet 命令行界面(CLI)中,可以执行以下操作:

nodes:查看所有节点(主机、交换机、控制器)。links:检查链路状态。pingall:测试所有主机之间的连通性。h1 ping h2:测试 h1 到 h2 的连通性。xterm h1:打开主机 h1 的终端。dump:查看节点详细信息(如 IP 地址)。exit:退出 Mininet。

3. 自定义拓扑

通过命令行参数创建拓扑

sudo mn --topo=linear,3 # 创建 3 台交换机,每台连接 1 台主机的线性拓扑

sudo mn --topo=tree,depth=2,fanout=3 # 树形拓扑,深度 2,每层分支数 3

通过 Python 脚本创建拓扑

编写 Python 脚本(例如 custom_topo.py):from mininet.topo import Topo

class MyTopo(Topo):

def __init__(self):

Topo.__init__(self)

# 添加交换机

s1 = self.addSwitch('s1')

s2 = self.addSwitch('s2')

# 添加主机

h1 = self.addHost('h1')

h2 = self.addHost('h2')

h3 = self.addHost('h3')

# 连接设备

self.addLink(s1, s2)

self.addLink(s1, h1)

self.addLink(s2, h2)

self.addLink(s2, h3)

topos = {'mytopo': (lambda: MyTopo())}

启动 Mininet:sudo mn --custom custom_topo.py --topo mytopo

4. 连接外部控制器(如 OpenDaylight/ONOS)

sudo mn --controller=remote,ip=<控制器IP>,port=<控制器端口>

# 示例:连接本地 OpenDaylight(默认端口 6653)

sudo mn --controller=remote,ip=127.0.0.1,port=6653

5. 网络测试与调试

带宽测试(使用 iperf):mininet> h1 iperf -s & # h1 作为服务端

mininet> h2 iperf -c h1 # h2 作为客户端测试带宽

启动 HTTP 服务:mininet> h1 python3 -m http.server 80 &

mininet> h2 curl h1 # 从 h2 访问 h1 的 HTTP 服务

6. 高级功能

设置链路参数(带宽、延迟、丢包率):sudo mn --link tc,bw=10,delay='5ms',loss=1

使用 XTerm 调试:mininet> xterm h1 h2 # 打开 h1 和 h2 的终端

7. 清理资源

退出 Mininet 后,运行以下命令确保清除残留进程:sudo mn -c

常见问题

权限问题:使用 sudo 运行 Mininet。控制器连接失败:检查控制器是否启动,端口是否开放。主机无法通信:确认控制器是否正确配置流表(如使用 OpenFlow 控制器)。

通过上述步骤,你可以快速上手 Mininet,进行网络原型设计、SDN 实验或分布式系统测试。

2. 安装 OpenFlow 控制器(需 SDN 功能)

若要测试 SDN 控制器(如编写流表、实现自定义路由),需安装并指定控制器。以下是常用控制器安装方法:

示例:安装轻量级控制器 ovs-testcontroller

sudo apt install openvswitch-testcontroller -y

sudo systemctl start openvswitch-testcontroller # 启动控制器

启动 Mininet 并指定控制器:

sudo mn --controller=remote,ip=127.0.0.1,port=6653 --test pingall

常见问题解答

为什么没有控制器也能 ping 通? OVS 网桥在无控制器时默认以“普通交换机”模式运行,通过 MAC 地址学习自动转发流量。

如何彻底消除警告? 安装默认控制器(如 ovs-testcontroller)或通过 --controller=none 显式禁用控制器:

sudo mn --controller=none --test pingall

下一步实验

尝试以下命令探索 Mininet 功能:

# 启动交互式 CLI

sudo mn

# 查看网络拓扑

mininet> net

# 测试带宽

mininet> iperf

# 进入主机 shell

mininet> h1 ifconfig

相关推荐