OpenDaylight与Mininet应用实战之OpenFlow1.0协议分析

继本专题基本环境搭建(一)之后,本文在此基础上熟悉平台操作,以及通过wireshark抓包工具分析OpenFlow(以下简写为OF)协议。具体的OF官方协议及白皮书可在资料库栏目中下载阅读。注:此文涉及的环境仅支持OF1.0版本,对于OF1.2、OF1.3版本可用其他平台测试,后续会另做专题讨论。

1 打开wireshark并创建拓扑

按照章节一搭建平台,启动ODL,并打开wireshark。进入装有Mininet的VM,通过mn命令指定网络拓扑及指定此ODL控制器。

Mininet创建网络拓扑命令:

此命令通过Mininet模拟创建一个含有两个交换机(Open vSwitch,以下简写为OVS)和两个主机的网络拓扑,其中192.168.5.203为ODL的IP,6633为ODL的默认端口,网络拓扑如下图所示:

2 查看网络

在Mininet中通过操作网络命令,可以查看OVS间及OVS与主机间的连接关系,也可以查看Mininet是否远程连接控制器。

例如,通过nodes命令可以查看网络中所有的节点。

通过net命令可以查看并确认网络连接关系是否与预期一致以及节点信息,且可以了解具体的连接端口信息。

通过下面的dump命令可以看出,交换机通过远程方式连接到控制器,且能看到控制器的IP和PORT。

3 抓包并分析协议

通过wireshark抓包可以直接看到控制器与OVS交换机的通信过程,下面分析该流程中的OF消息。此专题应用的是直接支持OpenFlow协议的wireshark官网Stable Release (1.12.1)版本。

3.1建立连接

控制器与交换机之间的OpenFlow协议是应用于TCP传输层上,所以解析应用层。他们首先发送hello消息,建立初始化连接,协商使用的OpenFlow协议版本。由下图可知,ODL与Mininet之间应用的是OpenFlow1.0版本协议(其他1.2、1.3协议会在协议OpenFlow后面标识)。

3.2 能力请求响应

该消息主要响应能力请求feature request消息,回复连接此控制器的交换机的一些基本设置信息,包括交换机的能力以及它的一些端口的信息等。

3.3 config请求回应

get config reply消息用于回应get config request消息,交换机通过该消息回应配置信息,一般是交换机的接口配置等信息。

3.4 stats状态信息

stats reply消息用于回应stats request信息,主要是交换机回应给控制器的状态信息。

3.5 flow mod消息

flow mod消息涉及到流表项的匹配信息等,下图显示的flow mod匹配项的类型信息。

3.6 packet_in、packet_out消息

在这部分流程中,当交换机收到数据包后查找流表无匹配项时,将数据包封装在packet_in消息发给controller,由controller通过packet_out消息下发决策,使发送和接收数据包的两主机间进行通信。

以上几种消息类型,可以参照OpenFlow标准协议中的类型,如下图:

我们可以用 wireshark 观察到当第一次有 ping 包从h1发到h2时,控制器如何自动添加相应的表项到交换机。

同时,可以进入ODL的web界面查看发现设备的拓扑,如图所示:

4 总结

本文基于本专题前一篇文章介绍的实验平台,通过Mininet搭建拓扑结构熟悉其基本操作,同时通过支持OpenFlow协议的wireshark抓包工具熟悉并分析相关的OpenFlow协议。具体的关于SDN控制器下发流表,主要是通过控制器ODL下发流表使主机间通信的流程操作,将在本专题下一篇文章进行详细输出。

本文来源于SDNLAB,可点击此阅读原文。如果您对本文感兴趣,可参与以下互动方式与作者近距离交流。

(1)微博

(2)微信(SDNLAB)

QQ交流群

SDN研究群(214146842)

OpenDaylight研究群(194240432)

时间: 2024-12-15 04:56:57

OpenDaylight与Mininet应用实战之OpenFlow1.0协议分析的相关文章

OpenDayLight(硼Boron版本)实战开发入门

   OpenDayLight(硼Boron版本)实战开发入门 OpenDayLight[1](简写为ODL)的硼Boron(0.5.0)版本于2016-09-16这几天刚刚发布.作为一款开源SDN网络控制器,依托于强大的社区支持以及丰富的功能特性,ODL成为了目前主流的SDN网络控制器开发平台.不仅为开发者提供了大量的网络管理功能,而且藉由AD-SAL(API驱动的服务层)和MD-SAL(模型驱动的服务层),给独立的网络应用提供了完善的二次开发接口.由于OpenDaylight架构的复杂性

实战Java内存泄漏问题分析 -- hazelcast2.0.3使用时内存泄漏 -- 1

公司当年有一个自己缓存集群用户session的Java library,是基于hazlcast2.0.3实现的,最近在customer site集群环境中某个blade报了Out of Memory Exception, 其他blades都正常,马上用jrockit jrcmd命令dump了堆和线程进行分析. printf "##################### heap ##################\n" su -p occas -c "/opt/jrocki

实战Java内存泄漏问题分析 -- hazelcast2.0.3使用时内存泄漏 -- 2

hazelcast 提供了3中方法调用startCleanup: 第一种是在ConcuurentMapManager的构造函数中,通过调用node的executorManager中的ScheduledExecutorService来创建每秒执行一次cleanup操作的线程(代码如下).由于这是ConcuurentMapManager构造函数的代码,所以这种调用startCleanup的操作是默认就会有的. node.executorManager.getScheduledExecutorServ

实战:ADFS3.0单点登录系列-集成Exchange

本文将介绍如何将Exchange与ADFS集成,从而实现对于Exchange的SSO. 目录: 实战:ADFS3.0单点登录系列-总览 实战:ADFS3.0单点登录系列-前置准备 实战:ADFS3.0单点登录系列-ADFS3.0安装配置 实战:ADFS3.0单点登录系列-集成SharePoint 实战:ADFS3.0单点登录系列-集成MVC 实战:ADFS3.0单点登录系列-集成Exchange 实战:ADFS3.0单点登录系列-自定义ADFS样式 实战:ADFS3.0单点登录系列-问题汇总 一

实战:ADFS3.0单点登录系列-ADFS3.0安装配置

本文为系列第三章,主要讲下ADFS3.0的安装和配置.本文和前面的文章是一个系列,因此有些地方是有前后关联,比如本文中使用的通配符证书就是第二篇讲解的,因此需要连贯的进行阅读. 全文目录如下: 实战:ADFS3.0单点登录系列-总览 实战:ADFS3.0单点登录系列-前置准备 实战:ADFS3.0单点登录系列-ADFS3.0安装配置 实战:ADFS3.0单点登录系列-集成SharePoint 实战:ADFS3.0单点登录系列-集成MVC 实战:ADFS3.0单点登录系列-集成Exchange 实

IT帮《Scrum实战》第0次课作业

<Scrum实战>第0次课作业 课程名称:如何学习敏捷 1组 孟帅 孟帅: http://www.cnblogs.com/mengshuai1982/p/7096338.html 2组 善任 3组 糖-影 4组 [email protected] 甄双伟 http://blog.sina.com.cn/s/blog_c2aba0e60102xbi3.html 李潘 http://www.cnblogs.com/wing011203/p/7095404.html 5组 俊达 吴俊达: http:

实战:ADFS3.0单点登录系列-总览

本系列将以一个实际项目为背景,介绍如何使用ADFS3.0实现SSO.其中包括SharePoint,MVC,Exchange等应用程序的SSO集成. 整个系列将会由如下几个部分构成: 实战:ADFS3.0单点登录系列-总览 实战:ADFS3.0单点登录系列-前置准备 实战:ADFS3.0单点登录系列-ADFS3.0安装配置 实战:ADFS3.0单点登录系列-集成SharePoint 实战:ADFS3.0单点登录系列-集成MVC 实战:ADFS3.0单点登录系列-集成Exchange 实战:ADFS

实战MYSQL 8.0.12 主主复制配置过程

实战MYSQL 8.0.12 主主复制配置过程 搭建环境: Server name IP mysql1 192.168.200.1 mysql2 192.168.200.2 服务器版本:CentOS Linux release 7.5.1804 (Core)MYSQL版本:8.0.12 # 采用源码安装方式, 此过程略,或者参考 http://blog.51cto.com/snowlai/2140451 由于MYSQL采用的是源码安装方式,没有生成 /etc/my.cnf 文件,需要手动创建,创

对openflow 1.0协议的扩展

通过这几天对openvswitch代码的分析,以及项目的需要,需要对openflow 1.0进行一定的扩展,发现网上没有这方面的教程,虽然在搞懂ovs代码架构,floodlight controller中利用的事件驱动模型之后,会觉得并不是难事,但是对于刚入门SDN的同学来说,需要一番折腾,这里简单记录一下,希望帮助到其他人.环境配置:2host + 1 OVS + floodlight软件版本: openvswitch 1.9.0 , floodlight0.85  在尝试对ovs中的open