mininet入门
Abstract
介绍mininet的基本使用方法
**参考链接**:[**SDN(软件定义网络)初体验----Mininet**](https://zhuanlan.zhihu.com/p/30935141)
# sudo mn
最简单的命令,创建一台交换机(switch)——s1,两台主机(host)——h1,h2,一个控制器;创建两条链路,(h1,s1),(h2.s1)。
# mininet几个重要的option
1. --topo= 指定mininet创建的网络类型
- minimal-即sudo mn 指令,
- single,X-一个交换机,下面直连X个主机
- 
- linear,X-创建X个链表状链路的交换机,每个交换机下面直连一个主机
- 
- tree,X-树状形拓扑,有X个fanout(扇出,每个树节点有X个子结点)
- tree,3如下图所示
- 
- torus,X,Y - 二维平面拓扑结构,行和列会成环
2. --switch= 创建不同类型的交换机
- ovsk - mininet默认自带的Open vSwitch
- user - 比ovsk慢
3. --controller= 即SDN Controller
- ovsc - mininet默认自带的OVS Controller
- nox - NOX controller
- remote - 不创建Controller,尝试连接外部Controller,例如Ryu控制器
4. --mac 创建自定义的MAC地址
# 常用指令
```bash
(venv_ryu) yu@yu-System-Product-Name:~/桌面/simple66$ sudo mn
*** No default OpenFlow controller found for default switch!
*** Falling back to OVS Bridge
*** Creating network
*** Adding controller
*** Adding hosts:
h1 h2
*** Adding switches:
s1
*** Adding links:
(h1, s1) (h2, s1)
*** Configuring hosts
h1 h2
*** Starting controller
*** Starting 1 switches
s1 ...
*** Starting CLI:
```
## 查看网络节点
```bash
mininet> nodes
available nodes are:
h1 h2 s1
```
## 查看物理拓扑
```bash
mininet> net
h1 h1-eth0:s1-eth1
h2 h2-eth0:s1-eth2
s1 lo: s1-eth1:h1-eth0 s1-eth2:h2-eth0
```
## 查看各个节点的信息
```bash
mininet> dump
<Host h1: h1-eth0:10.0.0.1 pid=3439465>
<Host h2: h2-eth0:10.0.0.2 pid=3439467>
<OVSBridge s1: lo:127.0.0.1,s1-eth1:None,s1-eth2:None pid=3439472>
```
## ping测试
```bash
mininet> h1 ping h2
PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=0.253 ms
64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=0.031 ms
64 bytes from 10.0.0.2: icmp_seq=3 ttl=64 time=0.025 ms
64 bytes from 10.0.0.2: icmp_seq=4 ttl=64 time=0.038 ms
^C
--- 10.0.0.2 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3091ms
rtt min/avg/max/mdev = 0.025/0.086/0.253/0.096 ms
```
## 退出Cli
```bash
mininet> exit
```
## 清空创建的节点和链路
```bash
sudo mn -c
```
> 强烈建议每次运行退出后,运行清空指令
# 脚本模式
## 基础
> 下面的脚本创建的拓扑,等价sudo mn 指令
>
> 控制器需要显式添加
```python
from mininet.net import Mininet
from mininet.node import Controller # 1. 引入 Controller 类
from mininet.cli import CLI
# 2. 初始化网络
net = Mininet()
# 3. 显式添加控制器
# 我们创建一个名为 'c0' 的控制器实例
c0 = net.addController('c0', controller=Controller)
# 4. 添加主机和交换机
h1 = net.addHost('h1')
h2 = net.addHost('h2')
s1 = net.addSwitch('s1')
# 5. 添加链路
net.addLink(h1, s1)
net.addLink(h2, s1)
# 6. 启动网络
# 注意:net.start() 会自动启动刚才添加的 c0 控制器
net.start()
CLI(net)
net.stop()
```
1. h1,h2之间可以互相ping通
2. 不能用交换机去ping主机
评论
使用 GitHub 登录参与讨论,评论公开可见。
评论加载失败,请刷新页面重试。
在 GitHub 查看讨论 ↗