实验5 开源控制器实践——POX
实验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的更多相关文章
- 实验5:开源控制器实践——POX
一.实验目的 1.能够理解 POX 控制器的工作原理: 2.通过验证POX的forwarding.hub和forwarding.l2_learning模块,初步掌握POX控制器的使用方法: 3.能够运 ...
- 实验4:开源控制器实践——OpenDaylight
实验4:开源控制器实践--OpenDaylight 一.实验目的 能够独立完成OpenDaylight控制器的安装配置: 能够使用Postman工具调用OpenDaylight API接口下发流表. ...
- 实验6:开源控制器实践——RYU
实验目的 能够独立部署RYU控制器 能够理解RYU控制器实现软件定义的集线器原理 能够理解RYU控制器实现软件定义的交换机原理 二.实验环境 下载虚拟机软件Oracle VisualBox或VMwar ...
- 【DevOps敏捷开发动手实验】开源文档 v2015.2 stable 版发布
Team Foundation Server 2015 Update 2版本终于在2周前的//Build 2016大会上正式发布了,借这个东风,小编也完成了[DevOps敏捷开发动手实验]开源文档的第 ...
- 20155317王新玮《网络对抗技术》实验8 WEB基础实践
20155317王新玮<网络对抗技术>实验8 WEB基础实践 一.实验准备 1.0 实验目标和内容 Web前端HTML.能正常安装.启停Apache.理解HTML,理解表单,理解GET与P ...
- 20145314郑凯杰《网络对抗技术》实验8 WEB基础实践
20145314郑凯杰<网络对抗技术>实验8 WEB基础实践 一.实验准备 1.0 实验目标和内容 Web前端HTML.能正常安装.启停Apache.理解HTML,理解表单,理解GET与P ...
- 8月自动化测试课程 - Selenium开源自动化测试实践
8月自动化测试课程 - Selenium开源自动化测试实践 http://gdtesting.cn/news.php?id=35
- 从 Spark 到 Kubernetes — MaxCompute 的云原生开源生态实践之路
2019年5月14日,喜提浙江省科学技术进步一等奖的 MaxCompute 是阿里巴巴自研的 EB 级大数据计算平台.该平台依托阿里云飞天基础架构,是阿里巴巴在10年前做飞天系统的三大件之分布式计算部 ...
- 实验6:开源控制器实———RYU
一.实验目的 1.能够独立部署RYU控制器: 2.能够理解RYU控制器实现软件定义的集线器原理: 3.能够理解RYU控制器实现软件定义的交换机原理. 二.实验环境 Ubuntu 20.04 Deskt ...
- 拯救你的文档 – 【DevOps敏捷开发动手实验】开源文档发布
今天上海的天气真是不错,风和日丽.再次来到微软上海紫竹研发中心,心情很是愉快,喜欢这里的大草坪,喜欢这里的工程气氛,更喜欢今天来陪我的小伙伴们. 这次动手实验培训与以往最大的不同就是采用了开源文档的方 ...
随机推荐
- JavaScript的原型和原型链
说到JavaScript的原型和原型链,相关文章已有不少,但是大都晦涩难懂.本文将换一个角度出发,先理解原型和原型链是什么,有什么作用,再去分析那些令人头疼的关系. 一.引用类型皆为对象 原型和原型链 ...
- 使用nvm安装不同版本的NodeJS
下载及安装 下载地址:https://github.com/coreybutler/nvm-windows/releases 配置nodejs的镜像地址 nvm node_mirror https:/ ...
- Idea下载指南之几个选项
通常我们在下载idea等一些图形编译器时,都会有很多选项供您选择,下面我们来看下这几个英文选项吧. create desktop Shortcut Update Path variable(resta ...
- 我和Java这些年的故事(六)
从2006年开始,我就在建设自己的网站,从2008年到2011年,我托管了四年自己的服务器,那时阿里云还没有兴起,只能自己买服务器,放到托管商机房里去,他们给你一个IP.机器全部是自己运维. IBM内 ...
- Visual Studio NuGet的地址(记录)
NuGet源地址 : https://nuget.org/api/v2/ https://api.nuget.org/v3/index.json (推荐)
- spring boot整合druid
其实网上有很多例子可供参考,主要是在整合的过程中遇到了一些问题,方便记录下.另外例子可参考以下两个链接: https://www.jianshu.com/p/e3cd2e1c2b0c https:// ...
- spring-boot 引入redis
1.引入redis <dependency> <groupId>org.springframework.boot</groupId> <artifactId& ...
- TODOList小黄条
TODOList http://www.yynote.cn/ 总结 windows中的神器
- css如何将content、background、background-image生成的背景进行翻转
方法 transform: scaleX(-1); 本例是水平翻转180度,方向可修改X为Y/Z. 注意如果是content,需要设置display: inline-block/block;
- cadence报错because the library part is newer than the part in the design cache.Select the part in the cache and choose Design-Update Cache,and then place the part again.
cadence报错because the library part is newer than the part in the design cache.Select the part in the ...