实验目的

  • 掌握多数据中心网络拓扑的构建
  • 掌握多数据中心数据交换过程

实验原理

主机间发送消息上报给交换机,交换机对收到的报文信息进行分析判断,如果交换机中存在此消息相对应的流表,则交换机直接下发流表,将报文消息转发给目的主机;如果交换机中没有相对应的流表,交换机将此发送消息给控制器,控制器根据消息分析关键字段内容,进行流表下发决策,交换机再将消息发送给目的主机,实现主机间通信的目的。


实验任务

创建一个虚拟网络,虚网中包括一台floodlight虚拟机和Mininet虚拟机,使用Mininet设计模拟一个多数据中心网络,主要是用Mininet中的OpenFlow交换机和floodlight控制器进行测试,帮助在真实数据中心和仿真测试床数据中心提供有用的信息评估不同数据中心的网络应用性能。

一个简单的基于两个数据中心的网络拓扑,如下图所示:

图中c1和c2为核心交换机,a1-a4为聚合交换机,e1-e4为边缘交换机,h1-h8为主机。本实验主要测试及验证交换机下挂主机间的连通性以及主机间通信收发数据包的速度。Mininet中自带的iperf性能测试工具可以测试不同主机间通信的性能带宽质量,在此例中,主要是对相同边缘交换机下的主机间、相同聚合交换机下不同边缘交换机间、相同核心交换机不同聚合交换机下的主机间进行测试。


实验内容

启动Floodlight

之前已经安装过floodlight,是通过java来启动。

  1. java -jar targer/floodlight.jar

然后终端会出现一大堆的信息,然后打开浏览器,输入http://localhost:8080/ui/index.html(这里我在本地,依然localhost使用127.0.0.1) 得到下图:

创建数据中心

在mininet目录中,创建一个fattree.py的测试脚本,

关于fattree(胖树拓扑结构)

该拓扑网络分为三个层次:如之前的图,自下而上分别为边缘层(edge),汇聚层(aggregate)以及核心层(core),其中汇聚层交换机与边缘层交换机构成一个pod(一种数据结构)。该实验的fattree拓扑为一个二叉胖树。

mininet脚本

  1. #!/usr/bin/python
  2. # 创建网络拓扑
  3. """Custom topology example
  4. Adding the 'topos' dict with a key/value pair to generate our newly defined
  5. topology enables one to pass in '--topo=mytopo' from the command line.
  6. """
  7.  
  8. from mininet.topo import Topo
  9. from mininet.net import Mininet
  10. from mininet.node import RemoteController, CPULimitedHost
  11. from mininet.link import TCLink
  12. from mininet.util import dumpNodeConnections
  13.  
  14. class MyTopo(Topo):
  15. "Simple topology example."
  16.  
  17. def __init__(self):
  18. "Create custom topo."
  19.  
  20. # Initialize topology
  21. Topo.__init__(self)
  22. L1 = 2
  23. L2 = L1 * 2
  24. L3 = L2
  25. c = []
  26. a = []
  27. e = []
  28.  
  29. # add core ovs
  30. for i in range(L1):
  31. sw = self.addSwitch('c{}'.format(i + 1))
  32. c.append(sw)
  33.  
  34. # add aggregation ovs
  35. for i in range(L2):
  36. sw = self.addSwitch('a{}'.format(L1 + i + 1))
  37. a.append(sw)
  38.  
  39. # add edge ovs
  40. for i in range(L3):
  41. sw = self.addSwitch('e{}'.format(L1 + L2 + i + 1))
  42. e.append(sw)
  43.  
  44. # add links between core and aggregation ovs
  45. for i in range(L1):
  46. sw1 = c[i]
  47. for sw2 in a[i // 2::L1 // 2]:
  48. self.addLink(sw2, sw1)
  49.  
  50. # add links between aggregation and edge ovs
  51. for i in range(0, L2, 2):
  52. for sw1 in a[i:i + 2]:
  53. for sw2 in e[i:i + 2]:
  54. self.addLink(sw2, sw1)
  55.  
  56. # add hosts and its links with edge ovs
  57. count = 1
  58. for sw1 in e:
  59. for i in range(2):
  60. host = self.addHost('h{}'.format(count))
  61. self.addLink(sw1, host)
  62. count += 1
  63.  
  64. topos = {'mytopo': (lambda: MyTopo())}

原sdnlab上的代码有一些问题,首先先调整好原本代码的tab缩进的问题。原sdnlab上的代码运行完会报错:

对于该问题,是由于使用python进行矩阵操作,分片操作时候,内部含有除法,产生错误。例如:

  1. for sw2 in a[i / 2::L1 / 2]:

利用/自动产生的类型是浮点型,会出现上述的错误,将/改成//就可以解决问题。

  1. for sw2 in a[i // 2::L1 // 2]:

修改完脚本问题之后用命令:

  1. sudo mn --custom ~/fattree.py --topo mytopo --controller=remote,ip=127.0.0.1,port=6633

请根据实际情况将ip为floodlight所在服务器的ip,添加protocols参数指定OpenFlow协议版本。 mn为mininet启动命令。

  • --mac指定虚拟主机的mac地址顺序编号,若不带此参数则随机编号
  • --controller指定of交换机的控制器
  • --switch指定虚拟交换机的类型,ovsk表示虚拟交换机为ovs Kernel mode
  • --custom指定自定义拓扑文件
  • --topo指定加载拓扑的名字

连通性以及通信带宽测试

1.测试同一交换机内部主机间的宽带

2.测试相同汇聚交换机下不同边缘交换机的主机间测试

3.测试相同核心交换机下不同汇聚交换机下的主机间测试

4.测试所有主机的连通性验证和宽带测试

添加下列代码进脚本

  1. #在开头补充
  2. from mininet.log import setLogLevel
  3. #测试连通性代码部分
  4. def simpleTest():
  5. "Create and test a simple network"
  6. topo = MyTopo()
  7. net = Mininet( topo, controller=None, host=CPULimitedHost, link=TCLink )
  8. net.addController( 'c0', controller=RemoteController, ip='127.0.0.1', port=6633 )
  9. net.start()
  10. print ("Dumping host connections")
  11. dumpNodeConnections(net.hosts )
  12. print ("Testing network connectivity")
  13. net.pingAll()
  14. print ("Testing bandwidth between h1 with h2, h3, h5")
  15. h1, h2 = net.get( 'h1', 'h2' )
  16. net.iperf( ( h1, h2 ) )
  17. h1, h3 = net.get( 'h1', 'h3' )
  18. net.iperf( ( h1, h3 ) )
  19. h1, h5 = net.get( 'h1', 'h5' )
  20. net.iperf( ( h1, h5 ) )
  21. net.stop()
  22.  
  23. if __name__ == '__main__':
  24. # Tellmininet to print useful information
  25. setLogLevel( 'info' )
  26. simpleTest()

在floodlight web页面中查看网络拓扑信息

Mininet实验 多个数据中心的拓扑网络实现的更多相关文章

  1. SDN实验---Mininet实验(模拟多数据中心带宽实验)

    补充:NameError: name 'buffer' is not defined >>> import sys >>> ,): ... buffer = mem ...

  2. SDN与NFV技术在云数据中心的规模应用探讨

    Neo 2016-1-29 | 发表评论 编者按:以云数据中心为切入点,首先对SDN领域中的叠加网络.SDN控制器.VxLAN 3种重要技术特点进行了研究,接下来对NFV领域中的通用服务器性能.服务链 ...

  3. [转载] Google数据中心网络技术漫谈

    原文: http://www.sdnlab.com/12700.html?from=timeline&isappinstalled=0#10006-weixin-1-52626-6b3bffd ...

  4. MySQL金融应用场景下跨数据中心的MGR架构方案(1)

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 0. 内容提纲 运行环境 部署MGR A&B 部署MGR A.B之间的复制通道 几个注意事项 如何在多个数据中心部 ...

  5. Google数据中心B4网络具体实现

    ① 背景介绍 Google的网络有两种,一种是数据中心内部网络,另外一种是WAN网,其中WAN网又分为两种:一是数据中心之间的互联网络,属于内部网络(G-Scale Network),另外一种是面向I ...

  6. 不使用 ASR 将虚机还原到另一个数据中心

    背景 在 Azure 上可能会遇到一个场景是将一台虚机搬到另一台数据中心,在不借助 ASR 的情况下我们该如何做? 因为 ASR 在云上更多的场景是用于灾备到异地.对于虚机的相关信息主要的是磁盘和网络 ...

  7. 透过微软研究院在“数据中心网络”的重大进展看SIGCOMM 2013

    2013" title="透过微软研究院在"数据中心网络"的重大进展看SIGCOMM 2013"> 编者按:于8月12日至16日在香港举行的SI ...

  8. 虚拟化-SDDC软件定义数据中心

    一.什么是SDDC? SDDC依赖于虚拟化和云计算技术, SDDC的目标是虚拟化数据中心的一切物理资源,通过虚拟化的技术,构建一个由虚拟资源组成的资源池,不仅是对服务器进行虚拟化,还包括存储虚拟化和网 ...

  9. 英特尔® 至强® 平台集成 AI 加速构建数据中心智慧网络

    英特尔 至强 平台集成 AI 加速构建数据中心智慧网络 SNA 通过 AI 方法来实时感知网络状态,基于网络数据分析来实现自动化部署和风险预测,从而让企业网络能更智能.更高效地为最终用户业务提供支撑. ...

随机推荐

  1. Maven DebugConfiguration配置运行内存

    -Xms256M -Xmx512M -XX:PermSize=256m -XX:MaxPermSize=512m

  2. PHP基础4--函数-数组

    主要 函数 数组 常用系统函数 函数 基础 1)定义 function 函数名([$形参1],[$形参2],.....) { //函数体 } 点击查看函数定义形式 2) 调用 函数名([$实参1][, ...

  3. 用for循环求1-100的所有数的和

    2.求1-100的所有数的和 x=0for y in range (1,101): x=x+yprint(x)#Python for循环中可以循环一个列表或者某一个字符串下面是for的基本格式,英文是 ...

  4. 542. 01 Matrix

    class Solution { public: vector<vector<int>> res; int m, n; vector<vector<int>& ...

  5. docker 环境下创建 overlay 网络方案

    一.环境 三台机器,其中一台安装 consul(192.168.1.21), 两台创建网络(192.168.1.32,33) 二.实现步骤 1.构建环境 1)三台机器部署docker环境 2)选择一台 ...

  6. Chrome浏览器保存微信公众号文章中的图片

    用chrome浏览器打开微信公众号文章中时,另存为图片时保存的是640.webp,不是图片本身,用IE则没有此问题.大部分chrome插件也无法保存图片. 经过多番尝试,找到一款插件可以批量保存微信公 ...

  7. 北京Uber优步司机奖励政策(2月18日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  8. SQL注入的原理与预防

    1. 什么是SQL注入? SQL注入是常见的网络攻击方式之一,通过SQL语句实现无账号登录,非法获取甚至篡改数据库中的数据. 2. SQL注入的思路 (1)找到SQL注入位置: (2)判断服务器类型和 ...

  9. rm 删除不掉文件,报错解决 以及 chattr的介绍

    rm 强制删除一个文件 居然删除不掉! 出现这个错误: rm: cannot remove ‘default/.user.ini’: Operation not permitted 原来呀: 然后呢 ...

  10. 抓取Oracle数据快照

    进入到oracle安装目录下的admin(找到这个目录)开启cmd键入sqlplus system/mima@实例名>@awrrpt.sql Would you like an HTML rep ...