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


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

实验步骤

一、安装 Ryu

二、 tcpdump 验证 Ryu 控制器的 L2Switch

  • 根据官方文档第一节的 L2Switch 的 python 代码创建文件并运行 Ryu
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)
  • h1 ping h2,h2 和 h3 都接收到 h1 发送的 ICMP 报文

  • h1 ping h3,h2 和 h3 都接收到 h1 发送的 ICMP 报文

个人总结

  • 本次实验与实验 5 类似,不过使用的是不同的控制器。实验中遇到的一个困惑是 POX 控制器实践时,h1 ping h2 会先发送 ARP 报文。然而 Ryu 实践时居然没看见 ARP 报文,直接发送了 ICMP 报文,刚开始时还以为是 Ryu 和 POX的不同之处,后来搜索了资料,并没有相关内容,遂使用 arp -a 命令查看,发现 h1 上已经有了 h2 和 h3的 ip/mac 缓存,可能就是这个原因。清除缓存以后重试,发现 ARP 报文。思考了一下,问题在于我在完成 POX 实践以后并没有马上退出 mininet 命令行,导致拓扑被复用,原来设置的 ip/mac 缓存映射表也被保留了下来,这才有了上述不发送 ARP 报文而直接发送ICMP报文的情况。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM