在Mininet中,其自带的控制器是采用是OpenFlow 1.0版本。因此如果在开发中使用mininet内置的控制器(使用端口6653),即使拓扑构建和ovs自定义时声明使用openflow13,但是由于采用的控制器版本受限,ovs与控制器协商后也只能采用1.0版本交互
 。因此,我们在进行实际开发和实践的时候为了使用方便,一般都是采用独立的控制器,如ryu,但是ryu控制器中,也有一些app实例是用openflow1.0版本,比如
 root@zmq-virtual-machine:/usr/lib/python3/dist-packages/ryu/app# ryu-manager simple_switch.py
 这里的实例 simple_switch.py是使用1.0(也就是openflow v1)
如果项目需要流表用openflow13,则要用对应的控制器实例,如simple_switch_13.py:
 root@zmq-virtual-machine:/usr/lib/python3/dist-packages/ryu/app# ryu-manager simple_switch_13.py
一,以下是基于openflow13的协议原理实践
1、启动RYU控制器
 root@zmq-virtual-machine:/usr/lib/python3/dist-packages/ryu/app# ryu-manager simple_switch_13.py
 2、编写要构建的拓扑代码(或用mininet启动时自带的,s1 h1 h2
3、启动wireshark ,选择lo口,做好监听准备(在root权限下)
 4、运行mn命令(默认拓扑)
 mn --controller=remote,ip=127.0.0.1,port=6633 --switch=ovs,protocols=OpenFlow13
 操作截图:
 
 图1
  图2
图2
OVS与RYU控制器的数据交互截图(由截图可见是openflow13版本,,v1(open flow1.0)v4
 
 图3
 二、扩展(使用自定义拓扑的方式)
 1 拓扑定义(以下代码topo_37_ryu_of13.py)
class MyTopo(Topo):
    def __init__(self):
        # Initialize topology 以下建立的是有环的拓扑,将可以观察到网络的广播风暴(openflow包风暴)
        Topo.__init__(self)
        # Add hosts
        h1 = self.addHost('h1')
        h2 = self.addHost('h2')
        h3 = self.addHost('h3')
        # Add switches
        s1 = self.addSwitch('s1')
        s2 = self.addSwitch('s2')
        s3 = self.addSwitch('s3')
        s4 = self.addSwitch('s4')
        s5 = self.addSwitch('s5')
        # Add links
        self.addLink(h1, s1)
        self.addLink(h2, s1)
        self.addLink(h3, s5)
        self.addLink(s1, s2)
        self.addLink(s1, s3)
        self.addLink(s2, s4)
        self.addLink(s3, s4)
        self.addLink(s4, s5)
topos = {'mytopo':( lambda: MyTopo() )}
2、启动mininet命令
 root@zmq-virtual-machine:/home/zmq/Desktop# mn --custom=/mnt/hgfs/vmshare/topo_37_ryu_of13.py --topo=mytopo --controller=remote,ip=127.0.0.1,port=6633 --switch=ovs,protocols=OpenFlow13
 启动控制器:root@zmq-virtual-machine:/usr/lib/python3/dist-packages/ryu/app# ryu-manager simple_switch_13.py
3测试结果:
 在运行控制器的终端可以看到大量的packet包(风暴),注意这里不是ping等数据包(还没有业务数据)网络建立阶段已经有风暴导致无法正常转发数据业务包,如ping不通(图5)
 
 图4
 
 图5
 4、排除安全故障
 在软件定义网络中,广播风暴有可能是协议本身的漏洞导致的,但是一些人为的因素也会导致网络异常,主要是要解决环路问题。
 我们可以通过自定义控制器的方式,或采用 simple_switch_stp_13.py 实例控制器观察效果
 操作过程:
 (1)在mininet中使用exit强行退出网络
 (2)在运行控制器的终端使用使用ctrl+c中断控制网络
 (3)在运行控制器的终端使用root@zmq-virtual-machine:/usr/lib/python3/dist-packages/ryu/app# ryu-manager simple_switch_stp_13.py 重新启动命令
 (4)启动mininet命令
 root@zmq-virtual-machine:/home/zmq/Desktop# mn --custom=/mnt/hgfs/vmshare/topo_37_ryu_of13.py --topo=mytopo --controller=remote,ip=127.0.0.1,port=6633 --switch=ovs,protocols=OpenFlow13
 (5)观察过程:
 从运行结果可以看到stp的生成过程,在生成树稳定后,网络将达到正常的数据转发效果

 启动控制器:root@zmq-virtual-machine:/usr/lib/python3/dist-packages/ryu/app# ryu-manager simple_switch_stp_13.py



















