031902518王佳明

导航

 

实验6:开源控制器实践——RYU

(一)基本要求

  1. 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,纠结了很长时间,后来通过向老师和同学请教问题得到解决,在这里对老师和同学表示感谢。
  • 个人感想
    这次实验相比上次难度差不多,基本要求的过程大同小异,尤其是在做完了实验五的实践之后,再完成实验六的普通要求的过程中显得更加得心应手,做完实验后感受到收获颇多,学习到了更多的知识。
posted on 2021-10-10 14:12  031902518王佳明  阅读(149)  评论(0编辑  收藏  举报