• 使用mininet创建网络拓扑,使ryu、ovs、主机连接


    实验拓扑

    控制器:RYU
    交换机:s1,s2
    主机:h1,h2,h3,h3
    联通性(直连):
    h1<->s1;h2<->s1
    h3<->s2;h4<->s2
    s1<->s2
    拓扑代码如下:

    #!/user/bin/env python
    from mininet.topo import Topo
    class MyTopo(Topo):
        def build(self):
            left=[]
            left.append(self.addHost("h1"))
            left.append(self.addHost("h2"))
            right=[]
            right.append(self.addHost("h3"))
            right.append(self.addHost("h4"))
            switchs=[]
            switchs.append(self.addSwitch("s1"))
            switchs.append(self.addSwitch("s2"))
    
            self.addLink(left[0],switchs[0])
            self.addLink(left[1],switchs[0])
            self.addLink(right[0],switchs[1])
            self.addLink(right[1],switchs[1])
            self.addLink(switchs[0],switchs[1])
    
    
    topos={'mytopo':(lambda : MyTopo())}

    mininet/custom 中有一个示例文件topo-2sw-2host.py.。可以按照该文件的内容进行相应地修改,定义自己的拓扑结构。

    将自定义的网络拓扑写好后放到该custom目录下即可。

    启动RYU

    cd RYUPATH/ryu/app/         #首先进入到RYU的安装目录的app目录下,里面有相应的模块
    sudo ryu-manager ofctl_rest.py simple_switch.py
    # 启动ofctl_rest.py模块以及simple_switch.py交换机,这个是openflow1.0的交换机
    

    启动mininet

    sudo mn --controller=remote,ip=127.0.0.1,port=6653 --custom ~/Desktop/mininet/custom/1.py --topo mytopo
    

    在这里ryu和mininet是在一台机器上的,所以ip地址为127.0.0.1,也可以写成controller=remote预设是在本机的ip 若是controller在其他机器的话则在后面加上ip=xxx.xxx.xx.xx
    例如 --controller=remote,ip=192.168.10.11 

    其中 1.py是刚刚定义的拓扑python文件, mytopo是 最后两行

    topos={'mytopo':(lambda : MyTopo())} 中指定的拓扑名
    

      

    实验细节
     
    1. 在mininet 检查网络联通性
     
    mininet> pingall
    *** Ping: testing ping reachability
    h1 -> h2 h3 h4
    h2 -> h1 h3 h4
    h3 -> h1 h2 h4
    h4 -> h1 h2 h3
    *** Results: 0% dropped (12/12 received)1234567
    结论:4台主机 两两互通
    得到指定交换机的所有flow的状态信息
    {
      "1": [
        {
          "actions": [
            "OUTPUT:3"
          ],(动作,转发到3 号端口)
          "idle_timeout": 0,(空闲后存活时间)
          "cookie": 0,
          "packet_count": 2,(包计数)
          "hard_timeout": 0,(存活时间)
          "byte_count": 140,(比特计数)
          "duration_nsec": 111000000,
          "priority": 32768,(优先级)
          "duration_sec": 985,(已经存活时间)
          "table_id": 0,(在流表1)
          "match": (匹配字段)
          {
            "dl_dst": "02:28:7c:93:27:af",(主机h3的地址)(过滤目的地址为02:28:7c:93:27:af的包,就是去主机3的包)
            "in_port": 2(从2号口子来的)
          }
          (作用:从2号口子来的,要到h3的报文都从3号口子出去哈)
        },
        {
          "actions": [
            "OUTPUT:2"
          ],
          "idle_timeout": 0,
          "cookie": 0,
          "packet_count": 7,
          "hard_timeout": 0,
          "byte_count": 518,
          "duration_nsec": 113000000,
          "priority": 32768,
          "duration_sec": 985,
          "table_id": 0,
          "match": {
            "dl_dst": "d2:3e:55:89:f3:a1",
            "in_port": 3
          }
          (作用:从3号口子来的,发往h2的包都从2号口子出去哈)
        },
        {
          "actions": [
            "OUTPUT:3"
          ],
          "idle_timeout": 0,
          "cookie": 0,
          "packet_count": 2,
          "hard_timeout": 0,
          "byte_count": 140,
          "duration_nsec": 155000000,
          "priority": 32768,
          "duration_sec": 985,
          "table_id": 0,
          "match": {
            "dl_dst": "02:28:7c:93:27:af",
            "in_port": 1
          }
          (作用:从1号口子来的,发往h3的的包都从3号口子出去哈
        },
        {
          "actions": [
            "OUTPUT:1"
          ],
          "idle_timeout": 0,
          "cookie": 0,
          "packet_count": 3,
          "hard_timeout": 0,
          "byte_count": 238,
          "duration_nsec": 171000000,
          "priority": 32768,
          "duration_sec": 985,
          "table_id": 0,
          "match": {
            "dl_dst": "fe:3b:25:cc:04:97",
            "in_port": 2
          }
          (作用:从2号口子来的,发往h1的包都从1号口子出去哈)
        },
        {
          "actions": [
            "OUTPUT:2"
          ],
          "idle_timeout": 0,
          "cookie": 0,
          "packet_count": 2,
          "hard_timeout": 0,
          "byte_count": 140,
          "duration_nsec": 169000000,
          "priority": 32768,
          "duration_sec": 985,
          "table_id": 0,
          "match": {
            "dl_dst": "d2:3e:55:89:f3:a1",
            "in_port": 1
          }
          (从1号口子来的,发给h2的包都从2号口子出去哈
        },
        {
          "actions": [
            "OUTPUT:3"
          ],
          "idle_timeout": 0,
          "cookie": 0,
          "packet_count": 2,
          "hard_timeout": 0,
          "byte_count": 140,
          "duration_nsec": 137000000,
          "priority": 32768,
          "duration_sec": 985,
          "table_id": 0,
          "match": {
            "dl_dst": "ba:94:88:a1:55:63",
            "in_port": 1
          }
          (从1号口子来的,发往h4的,从3号口子出去哈)
        },
        {
          "actions": [
            "OUTPUT:1"
          ],
          "idle_timeout": 0,
          "cookie": 0,
          "packet_count": 7,
          "hard_timeout": 0,
          "byte_count": 518,
          "duration_nsec": 157000000,
          "priority": 32768,
          "duration_sec": 985,
          "table_id": 0,
          "match": {
            "dl_dst": "fe:3b:25:cc:04:97",
            "in_port": 3
          } 
          (作用:从3号口子来的,发给h1的包都从1号口子出去哈)
        },
        {
          "actions": [
            "OUTPUT:3"
          ],
          "idle_timeout": 0,
          "cookie": 0,
          "packet_count": 2,
          "hard_timeout": 0,
          "byte_count": 140,
          "duration_nsec": 92000000,
          "priority": 32768,
          "duration_sec": 985,
          "table_id": 0,
          "match": {
            "dl_dst": "ba:94:88:a1:55:63",
            "in_port": 2
          }
          (从2号口子来的,发给h4的都从3号口子出去哈)
        }
      ]
    }
    

    由上面,我们可以分析出:
    第一个交换机一个有3个端口
    端口1与h1直连
    端口2与h2直连
    端口3负责与另外一个交换机直连
    另一个交换机也是类似的作法  

    
    
  • 相关阅读:
    学习完vue指令 做的一个学生信息录入系统
    vue常用指令总结
    vue介绍以及相关概念理解大全
    class类
    javascript闭包详解
    前端必看网站(一直更新中)
    微信小程序wx.getUserInfo获取用户信息
    微信小程序自定义组件注意事项
    微信小程序自定义选项卡
    uni-app开发注意事项及常用样式
  • 原文地址:https://www.cnblogs.com/manmanchanglu/p/11833982.html
Copyright © 2020-2023  润新知