Mininet 通过 --topo
参数支持多种自定义网络拓扑结构,适用于不同场景的网络模拟需求。以下是所有内置拓扑类型及其参数说明:
一、基础拓扑类型
拓扑类型 | 参数格式 | 说明 | 示例命令 |
---|---|---|---|
single | single,<n> | 单一交换机连接所有主机(默认 2 台主机) | sudo mn --topo single,5 |
linear | linear,<n> | 链式拓扑:n 台交换机串联,每台交换机连接 1 台主机 | sudo mn --topo linear,4 |
tree | tree,<depth>,<fanout> | 树形拓扑:深度为 depth,每层分叉数为 fanout | sudo mn --topo tree,3,2 |
reversed | reversed,<depth>,<fanout> | 反向树形拓扑(根在底部) | sudo mn --topo reversed,2,3 |
torus | torus,<x>,<y> | 二维环面拓扑(x 行 y 列,每节点连接上下左右邻居) | sudo mn --topo torus,3,3 |
二、拓扑参数详解
1. single
拓扑
-
结构:1 个 OpenFlow 交换机连接所有主机。
-
参数:
<n>
表示主机数量(默认 2)。 -
示例:
sudo mn --topo single,3
生成结构:
h1 <-> s1 <-> h2↕h3
2. linear
拓扑
- 结构:n 台交换机串联,每台交换机连接 1 台主机。
- 参数:
<n>
表示交换机/主机数量。 - 示例:
sudo mn --topo linear,4
生成结构:h1 <-> s1 <-> s2 <-> s3 <-> s4 <-> h4
3. tree
拓扑
- 结构:分层树形结构,根交换机位于顶层,每层分叉数为
fanout
。 - 参数:
<depth>
为树深度,<fanout>
为每层分叉数。 - 示例:
sudo mn --topo tree,2,3
生成结构(深度 2,分叉 3):
总节点数:1(根交换机) + 3(中间层交换机) + 9(主机) = 13 节点。s1/ | \s2 s3 s4/|\ /|\ /|\h1~h3 h4~h6 h7~h9
4. reversed
拓扑
- 结构:反向树形结构,根交换机位于底层。
- 参数:同
tree
拓扑。 - 示例:
sudo mn --topo reversed,2,3
生成结构:h1~h9/ | \s2 s3 s4\ | /s1
5. torus
拓扑
- 结构:二维环面网络,每个节点连接上下左右邻居(用于数据中心网络模拟)。
- 参数:
<x>
行数,<y>
列数。 - 示例:
sudo mn --topo torus,3,3
生成结构:3x3 的网格,边缘节点环形连接。
三、高级用法
1. 自定义拓扑参数
通过 Python API 扩展拓扑类型(见 Mininet 自定义拓扑指南)。
2. 混合参数组合
结合链路参数(带宽、延迟)启动拓扑:
sudo mn --topo tree,2,2 --link tc,bw=10,delay='5ms'
3. 拓扑可视化
使用 mininet.util.dumpNetConnections()
输出拓扑结构:
from mininet.topo import Topo
from mininet.net import Mininetclass MyTopo(Topo):def build(self):h1 = self.addHost('h1')h2 = self.addHost('h2')s1 = self.addSwitch('s1')self.addLink(h1, s1)self.addLink(h2, s1)net = Mininet(topo=MyTopo())
net.start()
print(net) # 输出拓扑连接信息
net.stop()
四、拓扑选择建议
场景 | 推荐拓扑 | 理由 |
---|---|---|
快速测试控制器逻辑 | single | 结构简单,启动快速 |
多路径流量验证 | tree | 分层结构适合测试负载均衡和冗余路径 |
链路故障模拟 | linear | 链式结构便于手动断开中间链路 |
数据中心网络仿真 | torus 或 tree | 环面结构适合模拟 Clos 架构,树形结构适合传统三层架构 |
自定义协议开发 | Python API | 完全控制拓扑细节,支持复杂逻辑 |
五、注意事项
- 性能限制:复杂拓扑(如
tree,4,3
生成 121 节点)可能导致系统资源不足,建议虚拟机分配至少 4GB 内存。 - 控制器兼容性:树形/环面拓扑需控制器支持多交换机流表下发(如 ONOS、RYU)。
- 参数验证:
--topo
参数错误时会直接报错(如tree
缺少fanout
参数)。
通过灵活选择拓扑类型,可高效验证 SDN 控制器行为、网络协议性能及故障恢复机制。