zoukankan      html  css  js  c++  java
  • 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)一样带有集群功能,不过好在较为方便,直观。
    然后,继续努力吧。

  • 相关阅读:
    JavaEE思维导图
    JAVA EE期末项目-企业论坛
    RPC
    SQL、HQL、JPQL、CQL的对比
    eqauls和hashCode的对比
    关于JSON
    JavaServer Faces标准请求/响应周期
    Applets
    Ajax
    Async分析
  • 原文地址:https://www.cnblogs.com/NiftyChen/p/11930813.html
Copyright © 2011-2022 走看看