Mininet虚拟网络拓扑的创建方法
1.通过Mininet命令行自动创建网络拓扑
通过--topo参数来指定Mininet自带的拓扑类型
可选参数
--topo=linear|single|tree: 指定SDN网路拓扑类型
--controller=remote,ip=xxx.xxx.xxx.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
https://blog.csdn.net/wuliangtianzu/article/details/82689347
交互式界面创建主机、交换机
通过py命令执行Python表达式,例如添加网络设备。
py net.addHost('h3')#给当前网络net添加新的主机h3
py net.addLink(s1,net.get('h3'))#为主机h3和交换机s1之间添加一条链路
py s1.attach('s1-eth3')#给交换机s1添加端口eth3用于连接h3
py h3.cmd('ifconfig h3-eth0 10.3')#为主机h3配置端口及改端口的IP地址
#py net.get('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.
"""
from mininet.topo 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