使用Mininet搭建简单的拓扑实验,其中有几个小细节需要注意的,先贴代码。
#!/usr/bin/python
from mininet.net import Mininet
from mininet.log import info,setLogLevel
from mininet.node import Controller
from mininet.node import RemoteController
from mininet.node import OVSKernelSwitch
from mininet.node import Host
from mininet.cli import CLI
# 使用python代码创建简单拓扑
def myNetwork():
# 拓扑整体配置
net = Mininet(
topo = None,
build = False,
ipBase = '10.0.0.0/8'
)
# 添加控制器
"""
如果选择Remoteontroller,则表示使用的是外置的控制器,比如Ryu控制器,
则需要启动外置控制器才能ping通(cd ryu/ryu/app-->ryu-manager ./simple_switch.py)
如果是Controller,则表明使用的是Mininet自带的控制器
"""
info("----------Adding controller----------\n")
c0 = net.addController(
name='c0',
controller = RemoteController,
ip = '127.0.0.1',
protocol = 'tcp',
port = 6633
)
# 添加交换机
info("----------Adding Switches----------\n")
s1 = net.addSwitch('s1', cls=OVSKernelSwitch, dpid='0000000000000001')
s2 = net.addSwitch('s2', cls=OVSKernelSwitch, dpid='0000000000000002')
# 添加主机
info("----------Adding Hosts----------\n")
h1 = net.addHost('h1',cls=Host,ip='10.0.0.1',defaultRoute=None)
h2 = net.addHost('h2',cls=Host,ip='10.0.0.2',defaultRoute=None)
h3 = net.addHost('h3',cls=Host,ip='10.0.0.3',defaultRoute=None)
h4 = net.addHost('h4',cls=Host,ip='10.0.0.4',defaultRoute=None)
h5 = net.addHost('h5',cls=Host,ip='10.0.0.5',defaultRoute=None)
h6 = net.addHost('h6',cls=Host,ip='10.0.0.6',defaultRoute=None)
# 添加连接
info("----------Adding Links----------\n")
# net.addLink(c0,s1)
# net.addLink(c0,s2)
net.addLink(s1,s2)
net.addLink(s1,h1)
net.addLink(s1,h2)
net.addLink(s2,h3)
net.addLink(s2,h4)
net.addLink(s2,h5)
net.addLink(s2,h6)
# 启动拓扑
info( '----------Starting network----------\n')
net.build()
# 启动控制器
info( '----------tarting controllers----------\n')
for controller in net.controllers:
controller.start()
# 启动交换机
info( '----------Starting switches----------\n')
net.get('s1').start([c0])
net.get('s2').start([c0])
# 启动主机
info( '----------Post configure switches and hosts----------\n')
CLI(net)
net.stop()
if __name__ == '__main__':
setLogLevel( 'info' )
myNetwork()
1. 为什么使用Ryu控制器无法ping通?
如果选择Remoteontroller,则表示使用的是外置的控制器,比如Ryu控制器, 则需要启动外置控制器才能ping通(cd ryu/ryu/app–>ryu-manager ./simple_switch.py)。如果是Controller,则表明使用的是Mininet自带的控制器。
2. 简单拓扑能否直接用可视化界面实现?
肯定是可以的。
首先进入到example目录下
cd mininet/example
然后打开可视化界面(注意是python3不是python了)
sudo python3 ./miniedit.py
然后就能进入可视化界面了: