Mininet 相关命令总结

Mininet 是一个进程虚拟化网络仿真器,可以创建由一些虚拟的主机、交换机、控制器和链路的虚拟网络,其交换机支持OpenFlow协议,它采用轻量级的虚拟化技术使得系统可以和真实网络相媲美,考虑到后面还会用mininet做一些实验,故对相关命令做个总结。

我的新书《LangChain编程从入门到实践》 已经开售!推荐正在学习AI应用开发的朋友购买阅读!
LangChain编程从入门到实践

网络构建启动参数

  • –topo

    • 单一拓扑:整个网络拓扑中交换机只有一个,下面可以连接多个主机sudo mn --topo=single,3

      1
      2
      3
      4
      5
      6
      7
                +--+---+
      +-------+ s1 +-------+
      | +--+---+ |
      | | |
      +-+--+ +-+--+ +--+-+
      | h1 | | h2 | | h3 |
      +----+ +----+ +----+
    • 线性拓扑:可以有多个交换机,但是每个交换机下面只是连接一个主机sudo mn -topo=linear,3

      1
      2
      3
      4
      5
      6
      7
      +--+--+     +--+--+     +--+--+
      | s1 +-----+ s2 +-----+ s3 |
      +--+--+ +--+--+ +--+--+
      | | |
      +--+--+ +--+--+ +--+--+
      | h1 | | h2 | | h3 |
      +-----+ +-----+ +-----+
    • 树形拓扑:depth设置树的深度,fanout设置每个节点下的子树个数(广度)sudo mn --topo=tree,depth=2,fanout=2

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
                  +----+
      +----+ s1 +-----+
      | +----+ |
      | |
      +--+-+ +-+--+
      +---+ s2 +-+ +-+ s3 +--+
      | +----+ | | +----+ |
      | | | |
      | | | |
      +-+--+ +--+-+ +-+--+ +--+-+
      | h1 | | h2 | | h3 | | h4 |
      +----+ +----+ +----+ +----+
    • 自定义拓扑(重点):sudo mn --custom mytopo.py --topo mytopo

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      from mininet.topo import Topo
      class MyTopo(Topo):
      def __init__(self):
      Topo.__init__(self)
      h1 = self.addHost('h1')
      h2 = self.addHost('h2')
      s1 = self.addSwitch('s1')
      self.addLink(h1, s1, 1, 1)
      self.addLink(h2, s1, 1, 2)
      topos = {'mytopo': (lambda: MyTopo())}
  • –switch

定义网络拓扑要使用的交换机,后面可以接的参数有:ovsk、ovsbr、ivs、lxbr、user,前面三种均为OVS型交换机,后面两种分别为内核型(linux bridge)和用户型(user)交换机,其中内核型和OVS型的吞吐量比用户型大很多,因此一般采用后两种。用下面的命令测试三者的TCP bandwidth

1
2
3
sudo mn --test iperf   内核型
sudo mn --switch user --test iperf 用户型
sudo mn --switch ovsk --test iperf ovs型
  • –controller

定义要使用的控制器,如果没有指定则使用mininet中默认的控制器

1
sudo mn --controller=remote,--ip=[controller IP],--port=[port]

如果–ip和–port省略的话,则默认使用本地ip地址,端口默认使用6653或6633端口号

  • –mac

设置设备的 MAC 地址

内部交互命令

查看网络设备状态
1
2
3
4
5
6
7
8
9
10
11
net               查看链路信息,两个设备之间的之间连线,称为一个链路,链路是双向的

nodes 查看有哪些可用节点

links 检测链路是否正常工作

pingall   检测各个主机之间的连通性

pingpair    检测前两个主机的连通性

dump    查看节点信息
更改网络结构的命令
  • py命令

执行Python表达式,添加网络设备等

1
2
3
4
5
6
7
8
9
10
11
py net.addHost('h3')                                #给当前网络net添加新的主机h3

py net.addLink(s1,h3) #为主机h3和交换机s1之间添加一条链路

py s1.attach('s1-eth3') #为交换机s1添加一个接口用于与h3相连

py h3.cmd('ifconfig h3-eth0 10.3')       #为主机h3配置端口及改端口的IP地址

h1 ping h3 #重要!!h1知道h3的IP地址,而h3不知道h1的地址,因此需要h1告诉h3的地址

pingall #测试所有主机都是连通的
  • link

设置链路状态,link s1 s2 down/up禁用/开启s1和s2这两个节点之间的链路

  • iperf

iperf h1 h2测试两个主机h1和h2之间的TCP带宽

  • iperfupd

iperfupd bw h1 h2测试两个主机h1和h2之间的UDP带宽

  • dpctl

对所有交换机操作流表,包括流表的显示、添加、修改、删除等

  • xterm

xterm h1打开主机h1的操作窗口

mininet 可视化

从 Mininet2.2.0 开始内置了一个mininet可视化工具miniedit,位于mininet/mininet/examples目录下的miniedit.py脚本,执行脚本后将显示Mininet的可视化界面,在界面上可进行自定义拓扑和自定义设置。使用图形界面设置好拓扑后,可以将其保存为python脚本,以后直接运行python脚本即可重现拓扑。

参考链接

Mininet

Mininet 相关命令总结

https://liduos.com/sdn-mininet.html

作者

莫尔索

发布于

2020-04-14

更新于

2024-05-19

许可协议

评论