实验5:开源控制器实践——POX
第一部分:基本实验
实验步骤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文件目录下开启终端,输入命令:./pox.py log.level --DEBUG forwarding.hub开启hub模块
然后再mininet命令行中输入命令xterm h1 h2 h3开启h1 h2 h3的命令行终端
在h2命令行终端输入命令:tcpdump -nn -i h2-eth0开启h2抓包(抓取eth0端口)、h3类似
之后就在h1命令行终端中输入相应命令来验证hub模块
执行结果:
mininet输入命令 h1 ping h2
h2 h3抓包结果
由抓包结果可知,h2对应10.0.02 h3对于10.0.0.3,因此可以直接在h1命令行终端输入ping 10.0.0.3来代替h1 ping h3,h2 h3抓包结果
无论h1 ping h2还是h3,都可以从h2 h3中抓到数据包,因此验证了hub模块的洪泛转发。
实验步骤3
阅读L2_learning模块代码,画出程序流程图,使用 tcpdump 验证Switch模块。
流程图如下
首先在pox文件目录下开启终端,输入命令:./pox.py log.level --DEBUG forwarding.l2_learning开启switch模块
然后再mininet命令行中输入命令xterm h1 h2 h3开启h1 h2 h3的命令行终端
在h2命令行终端输入命令:tcpdump -nn -i h2-eth0开启h2抓包(抓取eth0端口)、h3类似
之后就在h1命令行终端中输入相应命令来验证switch模块
执行结果:
h1命令行终端输入ping 10.0.0.2抓取h2 h3eth0端口的数据包
h1命令行终端输入ping 10.0.0.3抓包结果
当h1 ping h2时候只有h2有接收到数据包,而当h1 ping h3时候也同样只有h3能接收到数据包,因此验证了switch模块的自学习功能
数据包只会发送给相应的主机
实验总结
实验难度较难
实验过程遇到的难题:
在清除流表之后,发现pingall了以后主机间还是相互连通,想起了之前的理论知识,流表具有存活性,因此需要重启一下虚拟机,才能成功。
在进行第一步hub验证后,接着进行第二部switch验证时发现出错,报错显示 have another controller running。后来发现使用ctrl+c关闭pox运行或者重启虚拟机可解决问题
通过本次实验,使我对pox的使用有了初步的认识与掌握,对hub模块的洪泛转发功能已经switch模块的自学习功能有了深刻的理解,懂得他们的工作方式,学以致用,对我对于sdn这门课的了解,更加深入,能够理解 POX 控制器的工作原理;通过验证POX的forwarding.hub和forwarding.l2_learning模块,初步掌握POX控制器的使用方法;能够运用 POX控制器编写自定义网络应用程序,进一步熟悉POX控制器流表下发的方法。