3 Mininet命令延伸实验拓展

目录

  • 命令行创建拓扑

    • 启动参数总结
    • 自定义拓扑便捷测试
    • 清理配置
  • python 脚本定义拓扑
    • 展示所有的网络信息
    • pyton 脚本中调起 CLI
  • 交互式操作
    • 常用命令总结

Mininet自定义拓扑三种实现方式:命令行创建、Python脚本编写、交互式界面创建。

Mininet 是一个轻量级软件定义网络和测试平台;它采用轻量级的虚拟化技术使一个单一的系统看起来像一个完整的网络运行想过的内核系统和用户代码,也可简单理解为 SDN 网络系统中的一种基于进程虚拟化平台,它支持 OpenFlow、OpenvSwith 等各种协议,Mininet 也可以模拟一个完整的网络主机、链接和交换机在同一台计算机上且有助于互动开发、测试和演示,尤其是那些使用 OpenFlow 和 SDN 技术;同时也可将此进程虚拟化的平台下代码迁移到真实的环境中。

命令行创建拓扑

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

sudo mn --topo minimal

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

sudo mn --topo linear,4

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

sudo mn --topo single,3

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

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

启动参数总结

-h, --help        show this help message and exit
--switch=SWITCH        [kernel user ovsk]
--host=HOST        [process]
--controller=CONTROLLER        [nox_dump none ref remote nox_pysw]
--topo=TOPO        [tree reversed single linear minimal],arg1,arg2,...argN
-c, --clean         clean and exit
--custom=CUSTOM        read custom topo and node params from .py file
--test=TEST        [cli build pingall pingpair iperf all iperfudp none]
-x, --xterms        spawn xterms for each node
--mac        set MACs equal to DPIDs
--arp        set all-pairs ARP entries
-v VERBOSITY, --verbosity=VERBOSITY        [info warning critical error debug output]
--ip=IP        [ip address as a dotted decimal string for aremote controller]
--port=PORT        [port integer for a listening remote controller]
--innamespace        sw and ctrl in namespace?
--listenport=LISTENPORT        [base port for passive switch listening controller]
--nolistenport        don't use passive listening port
--pre=PRE        [CLI script to run before tests]
--post=POST          [CLI script to run after tests]

自定义拓扑便捷测试

sudo mn --test pingpair,可以直接对主机连通性进行测试,sudo mn --test iperf 启动后直接进行性能测试。

sudo mn --custom ~/mininet/custom/topo-2sw-2host.py --topo mytopo --test pingall

直接进行性能测试

sudo mn --custom ~/mininet/custom/topo-2sw-2host.py --topo mytopo --test iperf

示例结果

*** Creating network
*** Adding controller
*** Adding hosts:
h1 h2
*** Adding switches:
s3 s4
*** Adding links:
(h1, s3) (s3, s4) (s4, h2)
*** Configuring hosts
h1 h2
*** Starting controller
c0
*** Starting 2 switches
s3 s4 ...
*** Waiting for switches to connect
s3 s4
*** Iperf: testing TCP bandwidth between h1 and h2
*** Results: ['52.5 Gbits/sec', '52.6 Gbits/sec']
*** Stopping 1 controllers
c0
*** Stopping 3 links
...
*** Stopping 2 switches
s3 s4
*** Stopping 2 hosts
h1 h2
*** Done
completed in 10.747 seconds

清理配置

进行清理配置操作,适合故障后恢复,以及清理程序意外退出后虚拟网卡占用。

sudo mn -c

python 脚本定义拓扑

用 python 脚本创建与上述对应拓扑,创建完后的文件需要增加可执行权限chmod +x test.py,还是用sudo python test.py执行。

由于 miniet 支持的是 python2 故注释出现中文,需要在首行添加 # -*- coding: utf8 -*-

对应 --topo linear,4

from mininet.net import Mininet
from mininet.topo import LinearTopo
Linear4 = LinearTopo(k=4)    #四个交换机,分别下挂一个主机
net = Mininet(topo=Linear4)
net.start()
net.pingAll()
net.stop()

对应 --topo single,3

from mininet.net import Mininet
from mininet.topo import SingleSwitchTopo
Single3 = SingleSwitchTopo(k=3)   #一个交换机下挂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()

展示所有的网络信息

添加代码

from mininet.util import dumpNodeConnections
dumpNodeConnections(net.hosts)

pyton 脚本中调起 CLI

添加代码

from mininet.cli import CLI
CLI(net)

交互式操作

CLI中可以进行原生命令和py单行脚本结合的操作。

sudo mn   进入minite的CLI

查看全部链路信息
mininet> net
h1 h1-eth0:s1-eth1
h2 h2-eth0:s1-eth2
s1 lo:  s1-eth1:h1-eth0 s1-eth2:h2-eth0
c0

查看全部节点
mininet> nodes
available nodes are:
c0 h1 h2 s1

查看各节点的信息
mininet> dump
<Host h1: h1-eth0:10.0.0.1 pid=3371>
<Host h2: h2-eth0:10.0.0.2 pid=3373>
<OVSSwitch s1: lo:127.0.0.1,s1-eth1:None,s1-eth2:None pid=3378>
<Controller c0: 127.0.0.1:6653 pid=3364>

添加主机h3
mininet> py net.addHost('h3')
<Host h3:  pid=3831>

添加link
mininet> py net.addLink(s1, net.get('h3'))
<mininet.link.Link object at 0x7fb6d7d02390>

mininet> dump
<Host h1: h1-eth0:10.0.0.1 pid=3371>
<Host h2: h2-eth0:10.0.0.2 pid=3373>
<Host h3: h3-eth0:None pid=3831>
<OVSSwitch s1: lo:127.0.0.1,s1-eth1:None,s1-eth2:None,s1-eth3:None pid=3378>
<Controller c0: 127.0.0.1:6653 pid=3364>

给交换机s1添加端口eth3用于连接h3
mininet> py s1.attach('s1-eth3')

给h3赋予ip 10.0.0.3
mininet> py net.get('h3').cmd('ifconfig h3-eth0 10.3')

h1 ping h3
mininet> h1 ping -c1 10.3
mininet> h1 ping -c1 h3
mininet> h1 ping h3

常用命令总结

help: 默认列出所有命令文档,后面加命令名将介绍该命令用法 dump打印节点信息
gterm: 给定节点上开启gnome-terminal。注:可能导致mn崩溃 xterm给定节点上开启xterm
intfs:列出所有的网络接口
iperf:两个节点之间进行简单的iperf  TCP测试
iperfudp:两个节点之间用制定带宽udp进行测试
net:显示网络链接情况
noecho:运行交互式窗口,关闭回应(echoing)
pingpair:在前两个主机之间互ping测试
source:从外部文件中读入命令
dpctl:在所有交换机上用dptcl执行相关命令,本地为tcp   127.0.0.1:6634
link:禁用或启用两个节点之间的链路
nodes:列出所有的节点信息
pingall:所有host节点之间互ping
py:执行python表达式
sh:运行外部shell命令
quit/exit:退出

参考:

原文地址:https://www.cnblogs.com/xrszff/p/11259004.html

时间: 2024-11-08 14:06:22

3 Mininet命令延伸实验拓展的相关文章

Mininet实验 命令延伸实验扩展

本次实验尝试使用命令行.Python脚本编写.交互式界面创建自定义拓扑. 命令行创建拓扑 1.最小的网络拓扑,一个交换机下挂两个主机 1 sudo mn --topo minimal 2.每个交换机连接一个主机,交换机间相连接.本例:4个主机,4个交换机. 1 sudo mn --topo linear,4 3.每个主机都连接到同一个交换机上.本例:三个主机,一个交换机.  1 sudo mn --topo single,3 4.定义深度和扇形形成基于数的拓扑.本例:深度2,扇出2. 1 sud

操作系统-命令解释程序(拓展)

实验一  命令解释程序的编写(拓展) 一.目的和要求 1. 实验目的 (1)掌握命令解释程序的原理: (2)*掌握简单的DOS调用方法: (3)掌握C语言编程初步. 2.实验要求 编写类似于DOS,UNIX的命令行解释程序 (1)自行定义系统提示符 (2)自定义命令集(8-10个) (3)用户输入HELP以查找命令的帮助 (4)列出命令的功能,区分内部还是外部命令 (5)用户输入QUIT退出 (6)内部命令有dir, cd, md, rd, cls, date, time, ren, copy等

Floodlight+Mininet的SDN实验平台搭建初探

平台环境说明: Cpu:Intel Core 2 Duo T6570 Mem:4.00GB Os :Ubuntu 14.04 1.Floodlight Floodlight是一个比较成熟的sdn控制器实现,其中opendaylight项目中也采用了它的很多实现方法,官方网站:http://www.projectfloodlight.org/floodlight/.本文采用它作为控制器,采用包含mininet的虚拟机作网络拓扑,两者结合模拟显示网络. Floodlight安装: A. $ sudo

命令解释程序实验

一.目的和要求 1. 实验目的 (1)掌握命令解释程序的原理: (2)掌握简单的DOS调用方法: (3)掌握C语言编程初步. 2.实验要求 编写类似于DOS,UNIX的命令行解释程序 (1)自行定义系统提示符 (2)自定义命令集(8-10个) (3)用户输入HELP以查找命令的帮助 (4)列出命令的功能,区分内部还是外部命令 (5)用户输入QUIT退出 (6)内部命令有dir, cd, md, rd, cls, date, time, ren, copy等. 二.实验内容 根据教师指定的实验课题

iptables命令,实验笔记

四表tables,五链 chain tables:raw > mangle > nat > filter chain:PREROUTING, INPUT, OUTPUT , FORWARD , POSTROUTING iptables [-t tables] COMMAND CHAIN 匹配标准 -j target 查看命令 COMMAND : -A:添加为最后一条 -I:默认添加为第一条,或者在CHAIN后指定位置. -D:删除第几条规则 -R:修改第几条规则 -L:查看iptable

SDN实验---Mininet的相关命令(待补充完善)

一:补充 (一)推文 openvswitch的原理和常用命令 https://blog.csdn.net/ten_sory/article/details/79593554 (二)回顾:sudo mn --test pingall 测试的是一个mininet自带的简单网络拓扑的连通性问题,这个简单的网络拓扑结构包含一个交换机s1,两个主机h1,h2与交换机构成连通网络 1.使用mn命令进入测试网络(上面图中网络) 可以查看信息 2.使用links命令查看链路连通性 3.使用dump查看各个节点信

实验0 了解和熟悉操作系统(操作系统)

实验0  了解和熟悉操作系统 一.目的和要求 1. 实验目的 (1)掌握操作系统的定义和概念: (2)了解各类操作系统的发展历史: 2.实验要求 使用网络搜索了解各类计算机操作系统的知识,并整理成一篇文档. 二.实验内容 了解和掌握内容包括: 计算机操作系统的定义和概念: 操作系统的分类: 常用几种操作系统的优缺点分析:Linux,Windows 三.实验拓展思考 IOS和Android属于什么类型的操作系统? 了解和熟悉操作系统 操作系统是管理和控制计算机硬件与软件资源的计算机程序,是直接运行

LINUX基础实验报告

实验一:主要是介绍Linux系统概况,无运行代码. 实验二:Linux的基本操作 重要知识点 [Tab] 使用Tab键来进行命令补全,Tab键一般键盘是在字母Q旁边,这个技巧给你带来的最大的好处就是当你忘记某个命令的全称时你可以只输入它的开头的一部分然后按下Tab键就可以得到提示或者帮助完成,当然不止补全命令,补全目录,补全命令参数都是没问题的. Ctrl+c键 用来强行终止当前程序. 一些其他常用快捷键 按键 作用 Ctrl+d 键盘输入结束或退出终端 Ctrl+s 暂定当前程序,暂停后按下任

8.10 shell特殊符号cut命令 8.11 sort_wc_uniq命令 8.12 tee_tr_split命令 8.13 shell特殊符号下

8.10 shell特殊符号cut命令 8.11 sort_wc_uniq命令 8.12 tee_tr_split命令 8.13 shell特殊符号下 # 8.10 shell 特殊符_cut命令 --- - * 任意个任意字符 - ?任意一个字符 -  井号#注释字符  写命令的时候前面加一个#,那么这条命令就不生效,包括shell脚本里面也是,前面加个#表示这一行不生效,可以加一些注释说明的文字 ``` <[email protected] ~># #ls a.txt <[email