• 2019 SDN上机第5次作业


    1.浏览RYU官网学习RYU控制器的安装和RYU开发入门教程,提交你对于教程代码的理解,包括但不限于:

    描述官方教程实现了一个什么样的交换机功能?

    Add some features to enable the switch to forward the received packets to all ports.

    控制器设定交换机支持什么版本的OpenFlow?

    OFP_VERSIONS = [ofproto_v1_0.OFP_VERSION]
    

    OpenFlow1.0

    控制器设定了交换机如何处理数据包?

    控制器执行流程如下

     @set_ev_cls(ofp_event.EventOFPPacketIn, MAIN_DISPATCHER)
         //表明当Ryu收到OpenFlow packet_in消息时,将产生事件(调用“packet_in_handler”方法)
        def packet_in_handler(self, ev):
            msg = ev.msg//ev.msg是表示packet_in数据结构的对象。
            dp = msg.datapath//msg.dp是代表数据路径(开关)的对象。
            ofp = dp.ofproto
            ofp_parser = dp.ofproto_parser
               //dp.ofproto和dp.ofproto_parser是代表Ryu和交换机协商的OpenFlow协议的对象。
            actions = [ofp_parser.OFPActionOutput(ofp.OFPP_FLOOD)]
               //动作列表。OFPActionOutput类与packet_out消息一起使用,以指定要从中发送数据包的交换机端口。该应用程序使用OFPP_FLOOD标志来指示应在所有端口上发送数据包。
            out = ofp_parser.OFPPacketOut(
               //OFPPacketOut类用于构建packet_out消息。
                datapath=dp, buffer_id=msg.buffer_id, in_port=msg.in_port,
                actions=actions)
            dp.send_msg(out)
               //datapath类的send_msg方法,Ryu生成联机数据格式并将其发送到交换机。
    

    2.根据官方教程和提供的示例代码(SimpleSwitch.py),将具有自学习功能的交换机代码(SelfLearning.py)补充完整

    感谢贴心的助教和老师,在哪补充,怎么补充都讲得明明白白了。o( ̄▽ ̄)o

    # TODO define OpenFlow 1.0 version for the switch
      OFP_VERSIONS = [ofproto_v1_0.OFP_VERSION]
    
    # TODO send modified message out
      datapath.send_msg(mod)
        
    # TODO define the action for output
      actions = [datapath.ofproto_parser.OFPActionOutput(out_port)]
        
    # TODO define the OpenFlow Packet Out
      out = datapath.ofproto_parser.OFPPacketOut(
          datapath=datapath, 
          buffer_id=msg.buffer_id, 
          in_port=msg.in_port,
          actions=actions, data=data)
      datapath.send_msg(out)
    
    可根据教程理解相关语句,填入对应的标识变量即可。
    

    3.在mininet创建一个最简拓扑,并连接RYU控制器

    如下,创建拓扑,并连接至控制器ip,此时还没开启RYU控制器。

    4.验证自学习交换机的功能,提交分析过程和验证结果

    在mininet中查看此时s1的流表

    开启具有SelfLearning功能的控制器

    进行h1对h2的ping操作

    控制器中显示出预期信息

    此时再次查看s1的流表

    至此,Selflearning简单验证成功

    5.写下你的实验体会

    安装RYU搞得我心态崩了,一会儿是pip版本不对,一会儿是初始化失败,一会儿是py环境不匹配.../(ㄒoㄒ)/
    询问再三后还是痛下决心重装虚拟机呜呜。
    就作业任务而言较为轻松,难处在对RYU控制器框架的理解。
    Ryu是基于Python的控制器,不像java类型的控制器(例如ODL)一样带有集群功能,不过好在较为方便,直观。
    然后,继续努力吧。

  • 相关阅读:
    jmeter HTTP请求之content-type
    MyEclipse10中导入的jquery文件报错(出现红叉叉,提示语法错误)
    MyEclipse使用总结——使用MyEclipse打包带源码的jar包
    MyEclipse使用总结——MyEclipse10安装SVN插件
    Java调用K3Cloud的密码加密算法实现登录密码检验
    Sencha Touch 2 实现跨域访问
    K/3Cloud二次开发基于WebDev附加进程调试
    如何把子单据体的数值合计到单据体上
    移动开发规范概述
    使用HttpWebRequest post数据时要注意UrlEncode
  • 原文地址:https://www.cnblogs.com/NiftyChen/p/11930813.html
Copyright © 2020-2023  润新知