Mininet是由⼀些虚拟的终端节点(end-hosts)、交换机、路由器连接⽽成的⼀个⽹络仿真器,它采⽤轻量级的虚拟化技术使得系统可以和真实⽹络相媲美。 Mininet可以很⽅便地创建⼀个⽀持SDN的⽹络:host就像真实的电脑⼀样⼯作,可以使⽤ssh登录,启动应⽤程序,程序可以向以太⽹端⼝发送数 据包,数据包会被交换机、路由器接收并处理。有了这个⽹络,就可以灵活地为⽹络添加新的功能并进⾏相关测试,然后轻松部署到真实的硬件环境中。 1.通过Mininet命令⾏⾃动创建⽹络拓扑
通过–topo参数来指定Mininet⾃带的拓扑类型
可选参数
--topo=linear|single|tree: 指定SDN⽹路拓扑类型
但愿人长久教学设计--controller=remote,x.xxx :指定接管SDN⽹络的控制器
Mininet简单⽹络拓扑创建举例
菊花槐米胶囊
minimal拓扑
sudo mn #sudo mn --topo minimal
linear拓扑
sudo mn --topo=linear,5#创建线性拓扑模型,交换机个数为5
sudo mn --topo=linear,3,2 --controller=remote,ip=192.168.0.2
#创建线性拓扑模型,交换机个数为3,每个交换机下的主机数2
single拓扑
sudo mn --topo=single,3#创建单⼀拓扑⽹路,交换机数量为1,主机数量为3
sudo mn --topo=single,5 --controller=remote
tree拓扑
电气化铁路sudo mn --topo tree, fanout=2,depth=2
#depth代表深度,fanout代表扇出,即深度代表交换机的深度,扇出代表每个交换机下挂载主机数⽬
sudo mn --topo=tree,3,2 --controller=remote,ip=192.168.0.2 --mac
#--topo=tree,3,2:拓扑模型,交换机的深度或者层数,每层交换机下连接的主机或者交换机个数
#交换机深度(层数)为3层,第⼀层⼀个交换机,第⼆层2个交换机,第三层4个交换,主机:4 x 2 = 8
#--topo=tree,3,3:三层,第⼀层⼀个交换机,第⼆层3个交换机,第三层9个交换, 主机:9 x 3 = 27
交互式界⾯创建主机、交换机
通过py命令执⾏Python表达式,例如添加⽹络设备。
py net.addHost('h3')#给当前⽹络net添加新的主机h3
py net.addLink(('h3'))#为主机h3和交换机s1之间添加⼀条链路 py s1.attach('s1-eth3')#给交换机s1添加端⼝eth3⽤于连接h3
d('ifconfig h3-eth0 10.3')#为主机h3配置端⼝及改端⼝的IP地址
#('h3').cmd('ifconfig h3-eth0 10.3')
h1 ping -c1 10.3# h1 ping h3
pingall#测试所有主机都是连通的
2.通过Python脚本⾃定义创建⽹络拓扑
⾃定义型,是指通过py⽂件⾃定义拓扑类型,通过–custom和–topo两个参数搭配指定。
使⽤简单的Python API轻松定义⾃定义拓扑,并在其中提供了⼀个在mininet/custom⽬录下⽰例代码topo-2sw-2host.py
"""Custom topology example
Two directly connected switches plus a host for each switch:
host --- switch --- switch --- host
Adding the 'topos' dict with a key/value pair to generate our newly defined
topology enables one to pass in '--topo=mytopo' from the command line.
"""
po import Topo
class MyTopo( Topo ):
"Simple topology example."
def__init__( self ):
"Create custom topo."
# Initialize topology
Topo.__init__( self )
# Add hosts and switches
leftHost = self.addHost('h1')
rightHost = self.addHost('h2')
leftSwitch = self.addSwitch('s3')
rightSwitch = self.addSwitch('s4')
伊妹儿影院# Add links
self.addLink( leftHost, leftSwitch )
self.addLink( leftSwitch, rightSwitch )
乳胶手套生产线self.addLink( rightSwitch, rightHost )
topos ={'mytopo':(lambda: MyTopo())}
提供⾃定义的mininet⽂件后,它可以向命令⾏添加新的拓扑,交换机类型和测试。
科学社会主义理论与实践论文
sudo mn --custom ~/mininet/custom/topo-2sw-2host.py
sudo mn --custom ~/mininet/custom/topo-2sw-2host.py --topo mytopo --test pingall 退出mininet之后,使⽤sudo mn -c删除缓存
附:常⽤的mininet命令
nodes #查看有哪些可⽤节点
net #查看链路信息,两个设备之间的之间连线,称为⼀个链路,链路是双向的links #检测链路是否正常⼯作
ports
dump #查看所有节点信息
link #link s1 s2 down/up 禁⽤/开启s1和s2这两个节点之间的链路
iperf #如iperf h1 h2测试两个主机h1和h2之间的TCP带宽
iperfupd #iperfupd bw h1 h2 测试两个主机h1和h2之间的UDP带宽
pingall #所有节点相互ping
pingallfull #所有节点相互ping,返回详细x信息
xterm #如xterm h1打开主机h1的操作⼝
py #execute python expression
sh #Run external shell command