环境
- Ubuntu 14.04.6 LTS
- ryu-manager 4.13
- mininet 2.1.0
安装交换机
- 更新源
1 | $ apt-get update |
- 安装 mininet
1 | $ sudo apt-get install -y mininet |
- 查看版本
1 | $ mn --version |
- 启动 mininet
1 | $ sudo mn |
mininet指令
- 查看所有节点的相关信息
1 | mininet> dump |
- 查看有哪些节点
1 | mininet> nodes |
- 查看节点网络的连接
1 | mininet> net |
- 查看 h1 节点的网络配置
1 | mininet> h1 ifconfig |
- h1 和 h2 互 ping
1 | mininet> h1 ping -c 2 h2 |
- 为 h1 节点单独开启一个终端
1 | mininet> xterm h1 |
- 测试所有节点的联通性
1 | mininet> pingall |
- 关闭开启 switch 与 h1 之间的网络连接
1 | mininet> link s1 h1 down |
- 测试网络节点间 TCP 连接
1 | mininet> iperf |
- 测试网络节点间 UDP 连接
1 | mininet> iperfudp |
- 查看交换机的一些基本信息
1 | mininet> dpctl show |
- 查看 h1 的 IP 地址
1 | mininet> py h1.IP() |
- 查看帮助
1 | mininet> help |
mininet自定义拓扑
- 通过参数模拟
拓扑结构类型 |
---|
linear |
minimal |
reversed |
single |
torus |
tree |
1 | # 树形结构的拓扑创建 |
这里创建的树形结构其深度为3,扇出节点数为2,所以应该是这样的一个结构:
- 通过脚本模拟
1 | from mininet.topo import Topo |
创建 topo.py,代码如上,然后执行
sudo mn --custom=topo.py --topo firsttopo
创建 topo 结构。
- 通过 miniedit GUI 工具
执行
sudo python mininet/examples/miniedit.py
打开。
安装控制器
- 安装 ryu
1 | $ sudo pip install ryu |
- 查看版本
1 | $ ryu-manager --version |
Ryu的使用
- 在外部启动,通过指定 ip 地址、端口来连接
1 | # 启动ryu-manager |
- 直接指定 ryu 控制器
1 | # 直接通过controller来指定ryu |
- 在 xterm 中连接控制器
1 | # 启动mininet |
Ryu的API使用
- 启动网络拓扑结构
1 | $ sudo mn --controller=remote -x --mac |
- 设置 s1 交换机使用的协议
1 | $ ovs-vsctl set Bridge s1 protocols=OpenFlow13 |
- 启动 ryu 控制器,同时运行 simple_switch_rest_13
1 | $ ryu-manager --verbose ryu.app.simple_switch_rest_13 |
- 查看 s1 交换机的 datapath id 值
1 | $ ovs-ofctl -O openflow13 show s1 |
0000000000000001就是 s1 的 datapath id 值。
- 为 s1 交换机插入 Mac 地址
1 | $ curl -v -X PUT -d '{"mac" : "00:00:00:00:00:01", "port" : 1}' http://127.0.0.1:8080/simpleswitch/mactable/0000000000000001 |
- 查看 s1 交换机的 Mac 地址表
1 | $ curl -X GET http://127.0.0.1:8080/simpleswitch/mactable/0000000000000001 |