实验5 开源控制器实践——POX

一、实验目的

1.能够理解 POX 控制器的工作原理;

2.通过验证POX的forwarding.hub和forwarding.l2_learning模块,初步掌握POX控制器的使用方法;

3.能够运用POX控制器编写自定义网络应用程序,进一步熟悉POX控制器流表下发的方法。

二、实验环境

Ubuntu 20.04 Desktop amd64

三、实验要求

(一)基本要求

1.搭建下图所示SDN拓扑,协议使用Open Flow 1.0,控制器使用部署于本地的POX(默认监听6633端口)

使用命令sudo mn --topo=single,3 --mac --controller=remote,ip=127.0.0.1,port=6633 --switch ovsk,protocols=OpenFlow10

2.阅读Hub模块代码,使用 tcpdump 验证Hub模块;

开启pox,运行hub模块:./pox.py log.level --DEBUG forwarding.hub

使用命令mininet> xterm h2 h3开启主机终端

在h2主机终端中输入tcpdump -nn -i h2-eth0

在h3主机终端中输入tcpdump -nn -i h3-eth0

h1 ping h2



h1 ping h3



由上图可以看出无论是h1 ping h2还是h1 ping h3,h2和h3都能同时接收到数据包。结果验证Hub模块的作用:Hub模块采用洪泛转发,每个交换机上都安装泛洪通配符规则,将数据包广播转发,此时交换机等效于集线器。所以在ping某个主机时,会在另一台主机上接收到。

3.阅读L2_learning模块代码,画出程序流程图,使用 tcpdump 验证Switch模块。



(2)使用 tcpdump 验证Switch模块

开启pox,运行L2_learning模块:./pox.py log.level --DEBUG forwarding.l2_learning

h1 ping h2



h1 ping h3



由上图可以看出,当h1 ping 某个主机时,只有相应主机可以接收到数据包,其他主机接收不到。验证了Switch模块的功能:让OpenFlow交换机实现L2自学习。所以只有目的主机可以接收到数据包。

(二)进阶要求

1.重新搭建(一)的拓扑,此时交换机内无流表规则,拓扑内主机互不相通;编写Python程序自定义一个POX模块SendFlowInSingle3,并且将拓扑连接至SendFlowInSingle3(默认端口6633),实现向s1发送流表规则使得所有主机两两互通。

(1)重新搭建(一)的拓扑,并使用命令dpctl del-flows删除流表,执行该命令后,所有主机都无法ping通



(2)Python程序自定义一个POX模块SendFlowInSingle3

from pox.core import core
import pox.openflow.libopenflow_01 as of class SendFlowInSingle3(object):
def __init__(self):
core.openflow.addListeners(self)
def _handle_ConnectionUp(self, event):
msg = of.ofp_flow_mod() # 使用ofp_flow_mod()方法向交换机下发流表
msg.priority = 1
msg.match.in_port = 1 # 使数据包进入端口1
msg.actions.append(of.ofp_action_output(port=2)) # 从端口2转发出去
msg.actions.append(of.ofp_action_output(port=3)) # 从端口3转发出去
event.connection.send(msg) msg = of.ofp_flow_mod() # 使用ofp_flow_mod()方法向交换机下发流表
msg.priority = 1
msg.match.in_port = 2 # 使数据包进入端口2
msg.actions.append(of.ofp_action_output(port=1)) # 从端口1转发出去
msg.actions.append(of.ofp_action_output(port=3)) # 从端口3转发出去
event.connection.send(msg) msg = of.ofp_flow_mod() # 使用ofp_flow_mod()方法向交换机下发流表
msg.priority = 1
msg.match.in_port = 3 # 使数据包进入端口3
msg.actions.append(of.ofp_action_output(port=1)) # 从端口1转发出去
msg.actions.append(of.ofp_action_output(port=2)) # 从端口2转发出去
event.connection.send(msg) def launch():
core.registerNew(SendFlowInSingle3)

可以发现,运行SendFlowInSingle3模块后,所有主机两两互通

四、个人总结

本次实验验证了POX的forwarding.hub和forwarding.l2_learning模块,初步掌握了POX控制器的使用方法,并且进一步熟悉POX控制器流表下发的方法。

在此次实验中无法将SendFlowInSingle3.py放入pox目录下或直接在pox目录下创建,可以通过在lab5目录下创建,并用```sudo cp SendFlowInSingle3.py ../pox 成功复制到pox目录下

在运行自定义POX模块时,使用./pox.py log.level --DEBUG forwarding.SendFlowInSingle3命令,终端提示找不到相应的py文件。仔细检查后,发现自定义模块的py文件文件名命名有问题,改为SendFlowInSingle3.py后,自定义POX模块运行成功。

进阶部分通过此次实验,我了解了如何通过编写代码实现下发流表功能,颇有收获。

实验5 开源控制器实践——POX的更多相关文章

  1. 实验5:开源控制器实践——POX

    一.实验目的 1.能够理解 POX 控制器的工作原理: 2.通过验证POX的forwarding.hub和forwarding.l2_learning模块,初步掌握POX控制器的使用方法: 3.能够运 ...

  2. 实验4:开源控制器实践——OpenDaylight

    实验4:开源控制器实践--OpenDaylight 一.实验目的 能够独立完成OpenDaylight控制器的安装配置: 能够使用Postman工具调用OpenDaylight API接口下发流表. ...

  3. 实验6:开源控制器实践——RYU

    实验目的 能够独立部署RYU控制器 能够理解RYU控制器实现软件定义的集线器原理 能够理解RYU控制器实现软件定义的交换机原理 二.实验环境 下载虚拟机软件Oracle VisualBox或VMwar ...

  4. 【DevOps敏捷开发动手实验】开源文档 v2015.2 stable 版发布

    Team Foundation Server 2015 Update 2版本终于在2周前的//Build 2016大会上正式发布了,借这个东风,小编也完成了[DevOps敏捷开发动手实验]开源文档的第 ...

  5. 20155317王新玮《网络对抗技术》实验8 WEB基础实践

    20155317王新玮<网络对抗技术>实验8 WEB基础实践 一.实验准备 1.0 实验目标和内容 Web前端HTML.能正常安装.启停Apache.理解HTML,理解表单,理解GET与P ...

  6. 20145314郑凯杰《网络对抗技术》实验8 WEB基础实践

    20145314郑凯杰<网络对抗技术>实验8 WEB基础实践 一.实验准备 1.0 实验目标和内容 Web前端HTML.能正常安装.启停Apache.理解HTML,理解表单,理解GET与P ...

  7. 8月自动化测试课程 - Selenium开源自动化测试实践

    8月自动化测试课程 - Selenium开源自动化测试实践 http://gdtesting.cn/news.php?id=35

  8. 从 Spark 到 Kubernetes — MaxCompute 的云原生开源生态实践之路

    2019年5月14日,喜提浙江省科学技术进步一等奖的 MaxCompute 是阿里巴巴自研的 EB 级大数据计算平台.该平台依托阿里云飞天基础架构,是阿里巴巴在10年前做飞天系统的三大件之分布式计算部 ...

  9. 实验6:开源控制器实———RYU

    一.实验目的 1.能够独立部署RYU控制器: 2.能够理解RYU控制器实现软件定义的集线器原理: 3.能够理解RYU控制器实现软件定义的交换机原理. 二.实验环境 Ubuntu 20.04 Deskt ...

  10. 拯救你的文档 – 【DevOps敏捷开发动手实验】开源文档发布

    今天上海的天气真是不错,风和日丽.再次来到微软上海紫竹研发中心,心情很是愉快,喜欢这里的大草坪,喜欢这里的工程气氛,更喜欢今天来陪我的小伙伴们. 这次动手实验培训与以往最大的不同就是采用了开源文档的方 ...

随机推荐

  1. Kubernetes学习笔记(一)

    参考: kubectl Cheat Sheet | Kubernetes Kubernetes kubectl 命令表 _ Kubernetes(K8S)中文文档_Kubernetes中文社区 Pla ...

  2. anr查看的一种方法

    看系统日志,系统日志里会看到system_server频繁进行GC,应该就是内存占用满了,然后看kernel log,会看到lowmemorykiller在频繁杀进程主要看RSS 搜utc,可以看到系 ...

  3. 解决Maven下载依赖慢的问题

    参考:https://blog.csdn.net/web15085599741/article/details/126459039 <repositories> <repositor ...

  4. Quartus II 17.1新建一个流水灯

    诸图排序:从左到右,从上到下 一.软件设置 1.新建工程并添加FPGA芯片 2.新建.v文件并添加至顶层实体 3.元器件特性设置 4.分析与阐述(生成网表文件) 5.引脚分配 6.编译(包含分析与综合 ...

  5. Chrome 中的 JavaScript 断点设置和调试技巧--转自hanguokai.com

    你是怎么调试 JavaScript 程序的?最原始的方法是用 alert() 在页面上打印内容,稍微改进一点的方法是用 console.log() 在 JavaScript 控制台上输出内容.嗯~,用 ...

  6. fiddler 调试

    如果本地代理js发现跨域,需要手动修改自定义规则 1 static function OnBeforeResponse(oSession: Session) { 2 if (m_Hide304s &a ...

  7. IOS z-index失效

    经查资料,有说加了 body{ -webkit-overflow-scrolling: unset;} 就会好,但是我们的并没有.后来发现,去掉父元素的 perspective:150px 属性后,子 ...

  8. Qt的QString转换问题

    之前是写C#的,涉及类型转换要么是强转,类似(String)这样,要么是用Converter提供的转换方法,但是今天开发qt界面的时候,使用(QString)强转int类型的时候出现了乱码: 后来研究 ...

  9. Vmware 虚拟机Ubuntu系统,解决忘记用户名和密码解决办法

    1.在开机界面按住shift,会加载grub的启动界面,找到Advaced options for Ubuntu选项.按"e" 进入编辑模式. 2.光标移动至ro,改为rw,(Li ...

  10. alertmanger告警配置

    钉钉告警: 需先安装 Ding talk 配置 webhook vim docker-compose.yaml webhook-dingtalk: image: timonwong/prometheu ...