SDN 教程[2]-SDN基础操作

实验二:SDN 基础操作学习

  1. Mininet 可视化工具创建拓扑
  2. Mininet 拓扑动态更改
  3. Mininet 连接控制器
  4. 流表操作

Mininet 可视化工具创建拓扑

Mininet 2.2.0 以上版本自带

1. 进入 mininet/example 

在~目录下操作

cd ~
cd mininet/example

2. 启动 miniedit.py 

sudo ./miniedit.py

界面如下:

《SDN 教程[2]-SDN基础操作》
3. 自定义拓扑:拖拽设备到画布 
《SDN 教程[2]-SDN基础操作》
4. 配置 Mininet 设备属性 
① 设置控制器属性
长按右键控制器图标-选择「Properties」
修改 Controller Type
《SDN 教程[2]-SDN基础操作》
点击OK,开启 miniedit 的终端变化:
《SDN 教程[2]-SDN基础操作》
② 配置交换机属性
填写 16位 DPID,更改 Switch Type
《SDN 教程[2]-SDN基础操作》
③ 配置主机属性
设置主机 IP 地址
《SDN 教程[2]-SDN基础操作》
④ 配置全局属性
菜单栏 – Edit – Preferences
勾选:Start CLI 和 OpenFlow 1.3
《SDN 教程[2]-SDN基础操作》

IP Base 默认设置了网段,刚才第③步骤可以不填。

5. 点击左下角 Run 

观察打开 miniedit.py 的终端变化

《SDN 教程[2]-SDN基础操作》
6. mininet 基础命令 
① 使用 dump 命令查看网络节点信息
② 使用 net 命令查看链路端口对应信息
③ 使用 nodes 查看节点信息
④ 使用 links 查看链路连接状态
《SDN 教程[2]-SDN基础操作》
7. 保存拓扑图 

菜单栏选择:File – Export Level 2 Script 保存

《SDN 教程[2]-SDN基础操作》
创建好后,终端 CTRL+C 关闭 miniedit
8. 验证下次使用 

打开新的终端Ctrl+Alt+T

cd mininet/examples
sudo python sdnsy.py

9. 退出mininet 

exit

10. 如果再次使用Mininet报错,RTENETLINK answers:File exists 

sudo mn -c

清空一下缓存再使用。

mininet 拓扑动态更改

已经启动 mininet 拓扑条件下

1. 增加主机

py net.addHost('h4')

2. 增加链路(主机h4和交换机s2

py net.addLink(s2,net.get('h4'))

3. 交换机新增端口,连接主机

py s2.attach('s2-eth3')

4. 新增主机配置 IP 地址

py net.get('h4').cmd('ifconfig h4-eth0 10.4')

5. links 查看结果
《SDN 教程[2]-SDN基础操作》

mininet 连接控制器

1. 启动控制器

开启终端1

启动 Ryu 应用(二层交换)

ryu-manager ryu/app/simple_switch.py

《SDN 教程[2]-SDN基础操作》
2. 启动 mininet 拓扑

再开启终端2, 用刚才自己创建的拓扑

cd mininet/examples
sudo python sdnsy.py

3. Ryu 接收到 PACKET-IN 消息
《SDN 教程[2]-SDN基础操作》
4. mininet 测试连通性

在mininet 终端页面

pingall

《SDN 教程[2]-SDN基础操作》
5. mininet 测试带宽

iperf h1 h2

《SDN 教程[2]-SDN基础操作》

流表操作

1. 启动控制器

在 ryu 文件夹内操作

cd ryu/ 
ryu-manager ryu/app/simple_switch.py

2. 启动mininet

打开新的终端Ctrl+Alt+T

cd mininet/examples
sudo python sdnsy.py

3. mininet 查看当前流表

网络拓扑刚创建,没有数据流传输,初始流表为空

dpctl dump-flows

《SDN 教程[2]-SDN基础操作》
4. pingall 产生PACKET-IN数据包

simple_switch 应用会处理 Packet-in 并下发流表

pingall

5. 再次查看流表

dpctl dump-flows

《SDN 教程[2]-SDN基础操作》
6. 删除所有流表

dpctl del-flows

《SDN 教程[2]-SDN基础操作》
7. 查看流表,验证删除结果

dpctl dump-flows

《SDN 教程[2]-SDN基础操作》
8. 手动添加流表,实现数据转发

dpctl add-flow in_port=1,ations=output:2
dpctl add-flow in_port=2,ations=output:1

《SDN 教程[2]-SDN基础操作》
9. 查看流表,验证添加结果

dpctl dump-flows

观察到两个交换机均添加了这两条流
《SDN 教程[2]-SDN基础操作》
10. ping,验证流表

h1 ping h2

可以 ping 通

h1 ping h3

由于流表匹配项是in_port=1,执行的action是转发到端口2,所以h1 ping h3时,流表匹配,全部转发到端口2,到达不了h3,ping不通
《SDN 教程[2]-SDN基础操作》
11. 数据包丢弃的流表操作

交换机丢弃所有端口2传入的数据包

① 手动添加流表

dpctl add-flow in_port=2,actions=drop

② 查看流表结果

dpctl dump-flows

《SDN 教程[2]-SDN基础操作》
③ ping 查看流表是否作用

pingall

发现 ping 不通,流表项起作用

《SDN 教程[2]-SDN基础操作》
12. 流表优先级
① 先删除所有流表

dpctl del-flows

② pingall 通过应用:simple_switch 下发流

pingall

③ 添加数据包丢弃流表

dpctl add-flow in_port=2,actions=drop

④ 查看流表结果

dpctl dump-flows

《SDN 教程[2]-SDN基础操作》
⑤ 验证pingall 是否仍然连通

pingall

结果仍然能够 ping 通

思考:为什么这次主机间还可以通信?不是已经添加 drop 了么?

13. 删除指定流表

删除交换机 s1 条件字段中包含 in_port=1 的所有流表,并查看当前流表

sh ovs-ofctl del-flows s1 in_port=2 
dpctl dump-flows
    原文作者:Neal
    原文地址: https://segmentfault.com/a/1190000015818645
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞