【每日播报】OpenDaylight与Mininet应用实战之复杂网络验证(五)
1 多交换机的测试
Mininet中本身就支持多交换机网络拓扑的模拟创建,可通过Python API自定义拓扑创建满足使用者在仿真过程中的多方位需求。
下面举出具体示例验证多交换机支持:
sudo mn --topo tree,depth=2,fanout=2 --switch ovsk --controller=remote,ip=192.168.5.203,port=6633
执行此条命令后,查看ODL的Web界面显示的网络拓扑。界面拓扑显示如下:
对所有的虚拟host之间进行互ping操作,通过pingall命令,验证主机间的连通性,继而可验证支持多交换机的功能。
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 (0/12 lost)
由pingall显示的结果可看出,主机间能够互相通信,且将数据包的流转发给交换机,并由交换机上报给ODL控制器来下发流表使主机通信。
主机通信过程中可查看交换机的流表信息及本身信息。
mininet> s1 dpctl dump-flows tcp:127.0.0.1:6634
stats_reply (xid=0x2dcf5888): flags=none type=1(flow)
cookie=0, duration_sec=89s, duration_nsec=436000000s, table_id=0, priority=1, n_packets=3, n_bytes=294, idle_timeout=0,hard_timeout=0,ip,nw_dst=10.0.0.3,actions=output:2
cookie=0, duration_sec=89s, duration_nsec=292000000s, table_id=0, priority=1, n_packets=1, n_bytes=98, idle_timeout=0,hard_timeout=0,ip,nw_dst=10.0.0.4,actions=output:2
cookie=0, duration_sec=89s, duration_nsec=550000000s, table_id=0, priority=1, n_packets=7, n_bytes=686, idle_timeout=0,hard_timeout=0,ip,nw_dst=10.0.0.1,actions=output:1
cookie=0, duration_sec=89s, duration_nsec=528000000s, table_id=0, priority=1, n_packets=4, n_bytes=392, idle_timeout=0,hard_timeout=0,ip,nw_dst=10.0.0.2,actions=output:1
mininet> s2 dpctl dump-flows tcp:127.0.0.1:6635
stats_reply (xid=0xbd1dd43c): flags=none type=1(flow)
cookie=0, duration_sec=109s, duration_nsec=734000000s, table_id=0, priority=1, n_packets=3, n_bytes=294, idle_timeout=0,hard_timeout=0,ip,nw_dst=10.0.0.3,actions=output:3
cookie=0, duration_sec=109s, duration_nsec=579000000s, table_id=0, priority=1, n_packets=2, n_bytes=196, idle_timeout=0,hard_timeout=0,ip,nw_dst=10.0.0.4,actions=output:3
cookie=0, duration_sec=109s, duration_nsec=865000000s, table_id=0, priority=1, n_packets=11, n_bytes=1078, idle_timeout=0, hard_timeout=0, ip,nw_dst=10.0.0.1, actions=mod_dl_dst:e2:8f:79:f1:85:0f,output:1
cookie=0, duration_sec=109s, duration_nsec=817000000s, table_id=0, priority=1, n_packets=5, n_bytes=490,idle_timeout=0,hard_timeout=0,ip,nw_dst=10.0.0.2,actions=mod_dl_dst:aa:c7:91:48:7b:44,output:2
mininet> s1 dpctl show tcp:127.0.0.1:6634
features_reply (xid=0x79dcc54b): ver:0x1, dpid:1
n_tables:255, n_buffers:256
features: capabilities:0xc7, actions:0xfff
1(s1-eth1): addr:f6:74:57:8e:0d:1a, config: 0, state:0
current: 10GB-FD COPPER
2(s1-eth2): addr:42:0a:ce:a5:aa:c2, config: 0, state:0
current: 10GB-FD COPPER
LOCAL(s1): addr:0e:e6:79:c3:f3:4a, config: 0x1, state:0x1
get_config_reply (xid=0xbf45bbb3): miss_send_len=0
mininet> s2 dpctl show tcp:127.0.0.1:6635
features_reply (xid=0x9810d1f4): ver:0x1, dpid:2
n_tables:255, n_buffers:256
features: capabilities:0xc7, actions:0xfff
1(s2-eth1): addr:02:e0:74:49:fc:7a, config: 0, state:0
current: 10GB-FD COPPER
2(s2-eth2): addr:26:a3:88:e1:a2:71, config: 0, state:0
current: 10GB-FD COPPER
3(s2-eth3): addr:4a:7d:55:df:1a:55, config: 0, state:0
current: 10GB-FD COPPER
LOCAL(s2): addr:ae:ea:cc:5e:19:45, config: 0x1, state:0x1
get_config_reply (xid=0x12ad9f2d): miss_send_len=0
由交换机流表信息显示可知,控制器通过策略将流表下发到交换机中,使主机发出的数据包转发到下一目的地址。每个交换机查看信息的端口都不同,从第一个交换机端口号为6634开始,以后每一个交换机依次在之前交换机端口号的基础上加1,如第二个交换机的端口为6635。其他交换机的流表信息及自身设备信息可根据此说明进行查看。
2 多控制器的测试
多控制器验证支持测试包括两种情况:
- OpenFlow网络中多个同一类型的控制器;
- OpenFlow网络中多个不同类型的控制器;
2.1 多个同一类型的控制器验证
测试OpenFlow网络中多个同一类型的controller,比如OpenDaylight,多个ODL之间通过OpenFlow1.0协议标准交互。
通过Mininet验证,在Mininet中模拟创建的OvS交换机不能指定连接多个控制器,且在同一个Mininet中创建的多个交换机不能指定不同的控制器。所以在验证交换机被多个同一类型的控制器管控时,不能通过用Mininet来验证,但是可通过真实交换机来验证。
如,在真实交换机中设置连接此文中的ODL控制器及另一个ODL控制器,命令为:
ovs-vsctl set-controller br0 tcp:192.168.5.203:6633 tcp:192.168.5.111:6633
连接两个相同类型的ODL控制器,其中192.168.5.203为上述实验使用的控制器,192.168.5.111为另外安装使用的ODL控制器。通过执行如下命令查看交换机连接的控制器信息。
ubuntu@ubuntu:~$ sudo ovs-vsctl show
c1f1ec21-92d6-418d-9d82-34fc82a586a4
Bridge "br0"
Controller "tcp:192.168.5.203:6633"
is_connected: true
Controller "tcp:192.168.5.111:6633"
is_connected: true
Port "br0"
Interface "br0"
type: internal
is_connected:true表示交换机都成功连接上控制器。交换机连接到这两个控制器后,控制器通过设备拓扑管理也可以发现此交换机,同时控制器管控存在主备关系,但控制器都可对交换机进行管控、下发流表等操作。
通过真实OpenFlow交换机连接多个控制器,可以实施,且已经验证,控制器和控制器之间存在主备关系,多控制器都可以对连接的交换机进行管控。
2.2 多个不同类型的控制器验证
在OpenFlow网络中多个不同类型的controller,比如同时存在NOX和ODL,它们之间如果遵循OpenFlow协议标准的话,也是能够协作工作的。多个不同类型的控制器管控交换机与2.1小节是同样的道理。
如,在真实交换机中设置连接此文中的ODL控制器及其他另一个不同类型的控制器,如POX,命令为:
ovs-vsctl set-controller br0 tcp:192.168.5.203:6633 tcp:192.168.5.111:6633
连接两个不同控制器,其中192.168.5.203为上述实验使用的控制器,192.168.5.111为另外安装使用的POX控制器。经试验验证,ODL与POX都遵循OF1.0版本的协议标准,所以在复杂网络多控制器情况下,只要控制器遵循相同的标准规范,控制器之间可进行对网络的通信管理等。此处实验结果与2.1节一致。交换机连接这两个控制器后,控制器管控存在主备关系,但控制器都可对交换机进行管控、下发流表等操作。
3 总结
本文主要对复杂网络多交换机及多控制器的支持验证。因Mininet现在无法模拟多控制器管控一个交换机的情况,所以本专题还是侧重对多交换机的管控实验。至此,OpenDaylight与Mininet应用实战专题将结束,有介绍不到位或者有疑问的地方请多多指教,互相交流。谢谢!
- MySQL备份恢复第一篇(r5笔记第5天)
- 经典面试问题: Top K 之 -- 海量数据找出现次数最多或,不重复的
- Java多线程详解4【面试+工作】
- Java多线程详解5【面试+工作】
- Java多线程详解6【面试+工作】
- MySQL备份恢复第二篇(r5笔记第6天)
- SpringMVC 中配置 Swagger 插件.
- MySQL和Oracle对比学习之事务(r5笔记第4天)
- 【面试宝典】Java如何打印数组
- MySQL数据导入导出牛刀小试(r5笔记第3天)
- SpringMVC 异常处理.
- 一条简单的sql在11g和12c中的不同(r5笔记第2天)
- 浅析 SpringMVC 原理和配置.
- 使用impdp不当导致的数据丢失问题(r5笔记第1天)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- maven 中的版本依赖冲突问题
- Manual for Ubuntu Installation
- 修改自定义站点监控页面的样式
- 快速建站“新玩具”—glitch.me
- 踩坑记 | Flutter升级影响了NestedScrollView?
- Android | xml和view的那些事
- Android | 资源冲突覆盖的一些思考
- 如何用脚本自动转化,一个protobuf文件到json格式
- 聊聊dubbo-go的forkingCluster
- 还在用 map[string]interface{} 处理 JSON?告诉你一个更高效的方法——jsonvalue
- 聊聊dubbo-go的failsafeCluster
- 【HDFS】distcp报错Check0sum mismatch
- ffmpeg转换多媒体文件,真香
- 静态库与动态库的那些事
- 云服务器网络延迟与丢包问题定位(mtr工具)