实验5:开源控制器实践——POX
实验5:开源控制器实践——POX
一、实验目的
1.能够理解 POX 控制器的工作原理;
2.通过验证POX的forwarding.hub和forwarding.l2_learning模块,初步掌握POX控制器的使用方法;
3.能够运用 POX控制器编写自定义网络应用程序,进一步熟悉POX控制器流表下发的方法。
二、实验环境
1.下载虚拟机软件Oracle VisualBox 或 VMware;
2.在虚拟机中安装Ubuntu 20.04 Desktop amd64;
三、实验要求
(一)基本要求
1.搭建下图所示SDN拓扑,协议使用Open Flow 1.0,控制器使用部署于本地的POX(默认监听6633端口)
- 搭建拓扑
sudo mn --topo=single,3 --mac --copntroller=remote,ip=127.0.0.1,port=6633 --switch ovsk,protocols=OpenFlow10
- 生成拓扑后,开启POX
2.阅读Hub模块代码,使用 tcpdump 验证Hub模块;
- 开启pox,运行hub模块
./pox.py log.level --DEBUG forwarding.hub
- 使用tcpdump验证Hub模块,在h2和h3使用开启抓包(抓取eth0端口)
-
h1 ping h2时,h2 和 h3 都能收到数据包
-
h1 ping h3时,h2 和 h3 都能收到数据包
-
3.阅读L2_learning模块代码,画出程序流程图,使用 tcpdump 验证Switch模块。
-
流程图
-
使用tcpdump验证Switch模块
-
h1 ping h2,命令行终端上显示h2收到数据包,h3没有收到数据包
-
h1 ping h2,命令行终端上显示h3收到数据包,h2没有收到数据包
以上,验证Switch模块:让OpenFlow交换机实现L2自学习,只有目的主机可以接收到数据包。
-
(二)进阶要求
1.重新搭建(一)的拓扑,此时交换机内无流表规则,拓扑内主机互不相通;编写Python程序自定义一个POX模块SendFlowInSingle3,并且将拓扑连接至SendFlowInSingle3(默认端口6633),实现向s1发送流表规则使得所有主机两两互通。
(三)实验报告
1.请用Markdown排版;
2.所有实验相关代码文件(如有)保存在目录/home/用户名/学号/lab5/中;
3.(一)只需要提交h1 ping h2、h2和h3的tcpdump抓包结果截图和附图说明,外加L2_learning模块代码流程图,其余文字请勿赘述;
4.(二)不做必须要求,有完成的同学请提交相关代码和运行结果,以及tcpdump的验证过程,代码保存目录同要求2,形式不限。
5.个人总结,包括但不限于实验难度、实验过程遇到的困难及解决办法,个人感想,不少于200字。
遇到的问题
这次实验还较为顺利,但也碰到一些小问题。
-
Pox打开验证switch模块时,代码行输入错误,细节不够注意。由于上一个hub模块已经操作完成,所以在操作switch实验时,输入完命令回车收看到没细看就去操作命令行终端跟ping测试上。但是按要求操作后,相应主机的命令行终端并没有变化,反复操作了几次,以为是xterm命令跟ping前后的问题,重新操作后还是老问题,于是才回过头认真检查Pox是不是没打开好,才发现问题并解决掉。发现问题后,输入命令,还再一次出现有个字母输入错误的情况。。。输代码要多练习、细心、并多检查确认。及时回头复查。
-
命令行终端窗口不知道怎么打开,一开始文档比较多,里面又涉及到一些Pox的其他操作命令的说明解释,一开始并没有看到验证方法里面xterm的打开命令。后面咨询同学,才回过头好好把pdf文档查看了一遍。
心得感想
- 这次的操作并不会很难,Pox也是在安装mininet时一块安装了的。在lba5里面通过命令建立拓扑结构,前面几个实验已经操作过好几次,并顺便复习了一下命令创建拓扑的几种主要拓扑结构的命令。在进行Pox控制器实验的时候,代码输入上很容易输入错误,特别是对那些比较熟悉的单词,更是容易放下戒心也不会多家关注,但是却很可能因为键盘输入按错按到了隔壁键上。
- 然后在对于控制器的文档阅读上,老师提供的文档涉及的命令和说明比较多,但我们这次实验操作真正有涉及的只有其中两个命令的相关操作,厘清楚后,再网上查阅了一些关于Pox控制器相关内容的分享,对其相应作用区分更清楚一点。但更进一步的使用和操作还需要另外取实践。