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

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

一、实验目的

  1. 能够独立部署RYU控制器;
  2. 能够理解RYU控制器实现软件定义的集线器原理;
  3. 能够理解RYU控制器实现软件定义的交换机原理。

二、实验环境

Ubuntu 20.04 Desktop amd64

三、实验要求

(一)基本要求

  1. 搭建下图所示SDN拓扑,协议使用Open Flow 1.0,并连接Ryu控制器,通过Ryu的图形界面查看网络拓扑。

  2. 阅读Ryu文档的The First Application一节,运行当中的L2Switch,h1 ping h2或h3,在目标主机使用 tcpdump 验证L2Switch,分析L2Switch和POX的Hub模块有何不同。

    L2Switch代码

    h1 ping h2

    h1 ping h3

    L2Switch和POX的Hub模块有何不同?

    L2Switch模块

    POX的Hub模块

  3. 编程修改L2Switch.py,另存为L2xxxxxxxxx.py,使之和POX的Hub模块的变得一致?(xxxxxxxxx为学号)

(二)进阶要求

  1. 阅读Ryu关于simple_switch.py和simple_switch_1x.py的实现,以simple_switch_13.py为例,完成其代码的注释工作,并回答下列问题:


    a) 代码当中的mac_to_port的作用是什么?

    答:mac_to_port的作用是保存mac地址到交换机端口的映射。


    b) simple_switch和simple_switch_13在dpid的输出上有何不同?

    答:simple_switch直接输出dpid,simple_switch_13对dpid进行了格式化,并填充为16位数字,会在不满16位的dpid前补0直到满16位。


    c) 相比simple_switch,simple_switch_13增加的switch_feature_handler实现了什么功能?

    答:实现了交换机以特性应答消息来响应特性请求的功能。


    d) simple_switch_13是如何实现流规则下发的?

    答:在接收到packetin事件后,首先获取包学习,交换机信息,以太网信息,协议信息等。如果以太网类型是LLDP类型,则不予处理。如果不是,则获取源端口目的端口,以及交换机id,先学习源地址对应的交换机的入端口,再查看是否已经学习目的mac地址,如果没有则进行洪泛转发。如果学习过该mac地址,则查看是否有buffer_id,如果有的话,则在添加流动作时加上buffer_id,向交换机发送流表。


    e) switch_features_handler和_packet_in_handler两个事件在发送流规则的优先级上有何不同?

    答:switch_features_handler下发流表的优先级比_packet_in_handler的优先级高。

  2. 编程实现和ODL实验的一样的硬超时功能。

(三)个人总结

本次实验偏难,花费的时间也较多,通过这次实验学习了一些ryu的基础知识,过ryu的使用,明白了ryu与pox转发的流表的区别,pox是直接向交换机发送流表项的,而ryu要经过处理packet_in事件后,才向交换机下发流表,稍微理解了ryu和pox的一些区别,对ryu的理解还不是很深入还需要更多的学习。
    posted @ 2022-10-26 18:25  212106630王锦峰  阅读(85)  评论(0)    收藏  举报