实验6:开源控制器实践——RYU
实验6:开源控制器实践——RYU
一、实验目的
1.能够独立部署RYU控制器;
2.能够理解RYU控制器实现软件定义的集线器原理;
3.能够理解RYU控制器实现软件定义的交换机原理。
二、实验环境
1.下载虚拟机软件Oracle VisualBox或VMware;
2.在虚拟机中安装Ubuntu 20.04 Desktop amd64,并完整安装Mininet;
三、实验要求
(一)基本要求
1.完成Ryu控制器的安装。
2.搭建下图所示SDN拓扑,协议使用Open Flow 1.0,并连接Ryu控制器。
-
搭建拓扑
-
链接Ryu控制器
3.通过Ryu的图形界面查看网络拓扑。
4.阅读Ryu文档的The First Application一节,运行并使用 tcpdump 验证L2Switch,分析和POX的Hub模块有何不同。
通过以下命令创建.py文件
touch L2Switch.py
然后在/ryu文件下打开相应文件,并输入相应代码。
(二)进阶要求
1.阅读Ryu关于simple_switch.py和simple_switch_1x.py的实现,以simple_switch_13.py为例,完成其代码的注释工作,并回答下列问题:
a) 代码当中的mac_to_port的作用是什么?
b) simple_switch和simple_switch_13在dpid的输出上有何不同?
c) 相比simple_switch,simple_switch_13增加的switch_feature_handler实现了什么功能?
d) simple_switch_13是如何实现流规则下发的?
e) switch_features_handler和_packet_in_handler两个事件在发送流规则的优先级上有何不同?
(三)实验报告
1.请用Markdown排版;
2.将Ryu的安装目录设定为:/home/用户名/学号,所有实验相关代码文件(如有)保存在目录/home/用户名/学号/lab6/中;
3.(一)需要提交在Ryu安装目录下执行ryu --version 结果截图,以及tcpdump的验证过程截图和附图说明,其余文字请勿赘述;
-
ryu --version 结果截图
-
h1 ping h2
-
h1 ping h3
由上述结果可知,相比于POX的Hub模块,L2Switch的相同之处在于:
二者实现的都是洪泛发送ICMP报文,所以在h2和h3可以看到都有抓到数据包。
不同之处在于:Ryu中,L2Switch下发的流表无法查看;而POX中Hub则可以查看。
4.(二)不做必须要求,有完成的同学请提交相关代码和运行结果,以及tcpdump的验证过程,代码保存目录同要求2,形式不限。
5.个人总结,包括但不限于实验难度、实验过程遇到的困难及解决办法,个人感想,不少于200字。
遇到的问题
本次实验难度,有实验5基础,相对较为顺利进行。但过程中仍旧会遇到一些问题:
1)安装Ryu的时候,输入安装依赖命令时进行不顺利的情况。
sudo apt install gcc python-dev libffi-dev libssl-dev libxml2-dev libxslt1-dev
zlib1g-dev
有了上次的经验,很有可能是“l”与“1”搞混掉,遂将pdf内的命令行复制到其他显示设备上,果不其然是在pdf文档显示中字母l与数字1相像导致命令输入不准确。有了上次的经验后,再排查起来就很快速。
2)安装Ryu时,第(5)安装 Ryu,在 ryu 目录允许命令,漏掉最后面的“ .”,导致第一次提示错误。
sudo pip install .
要细心核对输入,不能有所遗漏。特别是代码输入,除了技法娴熟、代码命令积累足够运用熟练外,保证精确度准确度也是很有必要的,需要确保足够的细心。
3)安装Ryu时,第(6)查看版本,输入命令行,提示“ryu:error:the following arguments are required: subcommand,subcommand_args”
ryu -version
老师提供的pdf命令行有误,缺少一个“-”,正确的命令应为:ryu -–version
4)连接Ryu控制器时,直接在ryu目录下输入pdf文件中的命令,提示不存在文件;复查后发现已经是在ryu目录下进行操作,因此直接照搬命令,等于是多输入了一层ryu文件夹,才导致命令执行对应的文件夹找寻不到。
5)阅读Ryu文档的The First Application一节,创建L2Switch.py文件
使用touch命令创建py文件,后方可输入代码
个人感想:
本次实验较上次相对顺利,但在安装等过程中仍出现不够细心的情况。特别是像在连接Ryu控制器时,照搬了目录没有仔细观察,但好在及时就发现问题并解决。而在验证switch时,创建新的.py文件,并没有找到命令,需要再在网上搜索相关命令。