《虚拟化和云计算》实验报告——MININET实践SDN

素颜马尾好姑娘i 2022-10-15 13:49 239阅读 0赞

MiniNet

由一些虚拟的终端节点(end-hosts)、交换机、路由器连接而成的一个网络仿真器,支持0penflow协议,可以用它来实践SDN。

MiniNet安装

源码安装

  1. git clone git://github.com/mininet/mininet

在这里插入图片描述

  1. cd mininet/util
  2. ./install.sh -a

在这里插入图片描述

直接安装

  1. apt install mininet

安装测试

  1. sudo mn # 会显示mn的默认网络拓扑
  2. pingall # 使用pingall测试,会显示主机h1和h2可以ping通
  3. nodes #其他命令测试
  4. net

在这里插入图片描述
在这里插入图片描述

singe,3

  1. sudo mn --topo singe,3
  2. pingall
  3. nodes
  4. net

在这里插入图片描述
在这里插入图片描述

linear,3

  1. sudo mn --topo linear,3
  2. pingall
  3. nodes
  4. net

在这里插入图片描述
在这里插入图片描述

tree,2

  1. sudo mn --topo tree,2
  2. pingall
  3. nodes
  4. net

在这里插入图片描述
在这里插入图片描述

cutsom

  1. cd mininet/custom
  2. ll
  3. mn --custom topo-2sw-2host.py --topo mytopo
  4. pingall
  5. nodes
  6. net

在这里插入图片描述
在这里插入图片描述

custom修改

  1. vim topo-2sw-2host.py
  2. mn --custom topo-2sw-2host.py --topo mytopo
  3. pingall
  4. nodes
  5. net
  6. from mininet.topo import Topo
  7. class MyTopo( Topo ):
  8. "Simple topology example."
  9. def build( self ):
  10. "Create custom topo."
  11. # Add hosts and switches
  12. leftHost = self.addHost( 'h1' )
  13. midHost = self.addHost( 'h3' )
  14. rightHost = self.addHost( 'h2' )
  15. leftSwitch = self.addSwitch( 's1' )
  16. midSwitch = self.addSwitch( 's3' )
  17. rightSwitch = self.addSwitch( 's2' )
  18. # Add links
  19. self.addLink( leftHost, leftSwitch )
  20. self.addLink( leftSwitch, midSwitch)
  21. self.addLink( midHost, midSwitch )
  22. self.addLink( midSwitch, rightSwitch )
  23. self.addLink( rightSwitch, rightHost )
  24. topos = { 'mytopo': ( lambda: MyTopo() ) }

在这里插入图片描述
在这里插入图片描述

Ryu

RYU是一款基于python的控制器,你可用Ryu实现各种想要实现的网络功能,它可以下发或接收流表进行各种路由运算。

Ryu 安装

  1. apt-get update
  2. apt install python3-pip
  3. pip3 install ryu

Ryu 测试

  1. ryu-manager

在这里插入图片描述

Ryu 简单使用

Test 1

Terminal 1

  1. ryu-manager

在这里插入图片描述
Terminal 2

  1. mn --controller=remote,ip=127.0.0.1,port=6653
  2. pingall
  3. h1 ping h2

在这里插入图片描述
无法ping通

Test2

Terminal 1

  1. ryu-manager ryu.app.simple_switch

在这里插入图片描述

Terminal 2

  1. mn --controller=remote,ip=127.0.0.1,port=6653
  2. pingall
  3. h1 ping h2

在这里插入图片描述

Ryu Restful 控制

官方文档:https://ryu.readthedocs.io/en/latest/app/ofctl\_rest.html

构建

  1. ryu-manager ryu.app.ofctl_rest

在这里插入图片描述
Terminal 2

  1. mn --controller=remote,ip=127.0.0.1,port=6653
  2. pingall
  3. h1 ping h2

在这里插入图片描述
无法ping通

获取信息

GET 192.168.30.134:8080/stats/desc/1

在这里插入图片描述

获取交换机流表

获取dpid为1的交换机流表

GET 192.168.30.134:8080/stats/flow/1

在这里插入图片描述

增加流表表项

POST 192.168.30.134:8080/stats/flowentry/add

  1. {
  2. "dpid": 1,
  3. "match": {
  4. "in_port": 1
  5. },
  6. "actions": [
  7. {
  8. "type": "OUTPUT",
  9. "port": 2
  10. }
  11. ]
  12. }
  13. {
  14. "dpid": 1,
  15. "match": {
  16. "in_port": 2
  17. },
  18. "actions": [
  19. {
  20. "type": "OUTPUT",
  21. "port": 1
  22. }
  23. ]
  24. }

ping通

删除流表表项

POST 192.168.30.134:8080/stats/flowentry/clear/1

无法ping通

参考文章

发表评论

表情:
评论列表 (有 0 条评论,239人围观)

还没有评论,来说两句吧...

相关阅读