Mininet 系列实验(二)

本文介绍了使用Mininet创建网络拓扑的多种方法,包括命令行、Python脚本及交互界面方式。涵盖基本拓扑类型如线性、单一交换机和树形结构,并演示了如何定制复杂的拓扑结构及限制性能。
该文章已生成可运行项目,
  • 实验内容

    分别通过命令行创建、Python脚本编写以及交互式界面创建来熟悉Mininet的基本功能。
  • 参考

    Mininet命令延伸实验扩展
  • 实验环境

    虚拟机:Oracle VM VirtualBox Ubuntu16
  • 实验步骤

    1. 命令行创建拓扑

(1) 最小的网络拓扑,一个交换机下挂两个主机

# sudo mn --topo minimal

拓扑结构1
实验截图

(2) 每个交换机连接一个主机,交换机间相连接。本例:4个主机,4个交换机。

# sudo mn --topo linear,4

拓扑结构2
实验截图

(3) 每个主机都连接到同一个交换机上。本例:3个主机,一个交换机。

# sudo mn --topo single,3

拓扑结构3

实验截图

(4) 定义深度和扇出形成基于树的拓扑。本例:深度2,扇出2。

# sudo mn --topo tree, fanout=2,depth=2

拓扑结构4
实验截图

2. Python脚本定义拓扑

一、--topo linear,4
(1)新建文件linear.oy,添加以下内容

from mininet.net import Mininet
from mininet.topo import LinearTopo
Linear4 = LinearTopo(k=4)    
net = Mininet(topo=Linear4)
net.start()
net.pingAll()
net.stop()

参考网站中,以上代码有一行注释,应该删去否则会报错
(2)修改文件linear.py为可执行文件

# chmod +x linear.py

实际上如果采用python xx.py的方式运行脚步并不需要这一步
(3)运行脚本

# sudo python linear.py

接下来只给出脚本内容,具体运行方法参考上面
二、--topo single,3

from mininet.net import Mininet
from mininet.topo import SingleSwitchTopo
Single3 = SingleSwitchTopo(k=3)   
net = Mininet(topo=Single3)
net.start()
net.pingAll()
net.stop()

三、--topo tree,depth=2,fanout=2

from mininet.net import Mininet
from mininet.topolib import TreeTopo
Tree22 = TreeTopo(depth=2,fanout=2)
net = Mininet(topo=Tree22)
net.start()
net.pingAll()
net.stop()

四、如果是非上述三种类型的拓扑,那么下面介绍一种适合各种拓扑形式的脚本创建模式。本例:1个交换机,2个主机,并且赋予主机IP地址

from mininet.net import Mininet
net = Mininet()
# Creating nodes in the network.
c0 = net.addController()
h0 = net.addHost('h0')
s0 = net.addSwitch('s0')
h1 = net.addHost('h1')
# Creating links between nodes in network
net.addLink(h0, s0)
net.addLink(h1, s0)
# Configuration of IP addresses in interfaces
h0.setIP('192.168.1.1', 24)
h1.setIP('192.168.1.2', 24)
net.start()
net.pingAll()
net.stop()

五、除了可以通过Python脚本创建基本的拓扑以外,还能在此基础上对性能进行限制。观察下面给出的脚本文件,addHost()语法可以对主机cpu进行设置,以百分数的形式;addLink()语法可以设置带宽bw、延迟delay、最大队列的大小max_queue_size、损耗率loss

from mininet.net import Mininet
from mininet.node import CPULimitedHost
from mininet.link import TCLink
net = Mininet(host=CPULimitedHost, link=TCLink)
c0 = net.addController()
s0 = net.addSwitch('s0')
h0 = net.addHost('h0')
h1 = net.addHost('h1', cpu=0.5)
h2 = net.addHost('h1', cpu=0.5)
net.addLink(s0, h0, bw=10, delay='5ms',
max_queue_size=1000, loss=10, use_htb=True)
net.addLink(s0, h1)
net.addLink(s0, h2)
net.start()
net.pingAll()
net.stop()

运行这个脚本时有几率某些结点ping不通
实验截图

3. 交互式界面创建主机、交换机等

一、

# sudo mn

二、添加主机h3

py net.addHost('h3')

三、添加link

py net.addLink(s1,net.get('h3')

四、给交换机s1添加端口eth3用于连接h3

py s1.attach('s1-eth3')

五、给h3赋予IP(10.0.0.3)

py net.get('h3').cmd('ifconfig h3-eth0 10.3')

六、h1 ping h3

h1 ping -c1 10.3

注意:这里网站给的代码有错,如果按照上面的代码执行步骤4时会有部分节点无法ping通。应该改为h1 ping -c1 h3这个错误巨坑...重复了三四遍确认自己没有出错,后来看了看学长的博客才发现错误 :(

4. 测试网络

一、展示所有网络信息

px from mininet.util import dumpNodeConnections
py dumpNodeconnections(net.hosts)

二、所有节点的ping测试

py net.pingAll()

实验截图

  • 总结

    1. 实验过程中遇到的问题

  • 创建拓扑结构的时候输入nodes命令可以看到创建了c0这个控制器,但是在links中控制器并没有与任何节点相连,那么这个控制器作用是什么呢?
  • 电脑性能实在是太差了,开个虚拟机就卡个半死,大量的时间都花费在等待执行操作上。

    2. 收获

  • sdnlab不一定绝对正确,还是要看实际情况;
  • 遇到问题先思考再网上搜索最后再问人;

转载于:https://www.cnblogs.com/multhree/p/9371388.html

本文章已经生成可运行项目
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值