实验6:开源控制器实践——RYU
(一)基本要求
- Ryu安装目录下执行ryu –version 结果截图
2.tcpdump的验证过程截图和附图说明
-
h1 ping h2
-
h1 ping h3
3.阅读Ryu文档的The First Application一节,运行并使用 tcpdump 验证L2Switch,分析和POX的Hub模块有何不同
from ryu.base import app_manager
from ryu.controller import ofp_event
from ryu.controller.handler import MAIN_DISPATCHER
from ryu.controller.handler import set_ev_cls
from ryu.ofproto import ofproto_v1_0
class L2Switch(app_manager.RyuApp):
OFP_VERSIONS = [ofproto_v1_0.OFP_VERSION]
def __init__(self, *args, **kwargs):
super(L2Switch, self).__init__(*args, **kwargs)
@set_ev_cls(ofp_event.EventOFPPacketIn, MAIN_DISPATCHER)
def packet_in_handler(self, ev):
msg = ev.msg
dp = msg.datapath
ofp = dp.ofproto
ofp_parser = dp.ofproto_parser
actions = [ofp_parser.OFPActionOutput(ofp.OFPP_FLOOD)]
data = None
if msg.buffer_id == ofp.OFP_NO_BUFFER:
data = msg.data
out = ofp_parser.OFPPacketOut(
datapath=dp, buffer_id=msg.buffer_id, in_port=msg.in_port,
actions=actions, data = data)
dp.send_msg(out)
相同之处:
1.Hub和L2Switch实现的都是洪泛发送ICMP报文
2.h1 ping h2时,h1发送给h2的ICMP报文,h3也会收到
不同之处:
L2Switch下发的流表无法查看,而Hub可以查看。
(二)个人总结
- 难度:较难
- 实验过程遇到的困难及解决办法
1.在使用ryu控制器可视化拓扑时出现了问题,看不到拓扑,花了一上午的时间也未找到解决的办法(情况如下图)
2.在看pdf时由于粗心,认为拓扑的默认端口是8080,后来在拓扑之后没办法pingall,纠结了很长时间,后来通过向老师和同学请教问题得到解决,在这里对老师和同学表示感谢。 - 个人感想
这次实验相比上次难度差不多,基本要求的过程大同小异,尤其是在做完了实验五的实践之后,再完成实验六的普通要求的过程中显得更加得心应手,做完实验后感受到收获颇多,学习到了更多的知识。