实战录 | 基于openflow协议的抓包分析
《实战录》导语
云端卫士《实战录》栏目定期会向粉丝朋友们分享一些在开发运维中的经验和技巧,希望对于关注我们的朋友有所裨益。本期分享人为云端卫士安全SDN工程师宋飞虎,将带来基于openflow协议的抓包分析。
一、什么是openflow协议
OpenFlow起源于斯坦福大学的Clean Slate项目组 ,使用类似于API进程配置网络交换机的协议。OpenFlow的思路很简单,网络设备维护一个FlowTable,并且只通过FlowTable对报文进行处理,FlowTable本身的生成、维护、下发完全由外置的Controller来实现。
OpenFlow交换机将原来完全由交换机/路由器控制的报文转发过程转化为由OpenFlow交换机(OpenFlow Switch)和控制服务器(Controller)来共同完成,从而实现了数据转发和路由控制的分离。控制器可以通过事先规定好的接口操作来控制OpenFlow交换机中的流表,从而达到控制数据转发的目的。
OpenFlow交换机与控制器交互图
OpenFlow交换机包含安全通道,多级流表和组表。通过安全通道,OpenFlow交换机可以和控制器建立OpenFlow连接;流表用来匹配OpenFlow交换机收到的报文;组表用来定义流表需要执行的动作。
本文从搭建实验环境并整合OpenFlow、Mininet、ONOS等开源软件,通过使用wireshark抓包为新手讲解OpenFlow1.3协议的报文交互过程。
二、搭建环境
2.1.ONOS环境
2.1.1.环境依赖
硬件环境:
Centos 7 3.10.0-123.e17.x86_64
10G MEM
8 CPUS
软件依赖:
Java 8 JDK (Oracle Java recommended; OpenJDK is not as thoroughly tested)
Apache Maven 3.3.9
Apache Karaf 3.0.5
Git
bash (for packaging & testing)
2.1.2.安装启动流程
源码下载: git clone https://gerrit.onosproject.org/onos
配置全局参数:vi ~/.bashrc
添加此行: export ONOS_ROOT=~/Applications/onos
设置启动参数:source $ONOS_ROOT/tools/dev/bash_profile
编译安装: mvn clean install
第一次启动ok clean 或 onos-karaf clean
后续启动ok
2.2.mininet环境
2.2.1.环境依赖
硬件环境:VMWare、Ubuntu、3G Mem 4CPUS 50G硬盘
软件依赖:无
2.2.2.安装
源码下载:git clone git://github.com/mininet/mininet
建立编译目录:mkdir mini-build
编译安装所有功能(-a):./mininet/util/install.sh -s mini-build –a
测试安装是否成功:sudo mn --test pingall
在ONOS上建立拓扑:sudo mn –topo single,2 –-mac –switch ovsk,
protocols=OpenFlow13 –controller remote,ip=192.168.6.253,port=6633
打通链路:pingall
2.3.实验步骤
2.3.1.启动ONOS
编译安装完ONOS之后,在ONOS根目录下执行ok clean,然后进入如下界面,就表示ONOS已经启动。
2.3.2.启动mininet
2.3.3.实验拓扑环境
当ONOS和mininet都启动之后,打开链接http://IP:8181/onos/ui(IP为ONOS的IP地址),账号密码是karaf/karaf。可以看到如下建立的拓扑。
2.3.4.在ONOS上抓包
在ONOS虚拟机上面使用以下命令进行抓包
tcpdump -i ens3 -w centec.pcap
把抓到的报文取出,放到windows系统的目录下,使用Wireshark打开文件,输入openflow_v4 (openflow1.3版本)进行筛选。
三、报文分析
OpenFlow协议支持三种消息类型:controller-to-switch,asynchronous(异步)和symmetric(对称)。OpenFlow通过这三种消息,来保持controller和OpenFlow交换机之间的通信。每种类型包含的消息如下图所示:
常用的消息主要是Hello消息、Feature消息,Echo消息,以及Packet_in、Packet_out和Flow_mod等。其中Hello、Feature、Echo消息分别包含REQUEST与REPLY消息,每一个消息REQUEST与REPLY的Transaction ID相同。
3.1.hello消息
控制器与交换机建立连接时由其中某一方发起OFPT_HELLO消息给对方,该消息携带支持的最高协议版本号,接受方将采用双方都支持的最低协议版本进行通信。一旦发现共同支持的协议版本,则连接建立,否则发送OFPT_ERROR消息,描述失败原因,并中断连接。
hello消息
3.2.Echo消息
交换机和控制器均可以向对方发出OFPT_ECHO_REQUEST,OFPT_ECHO_REQUEST只有OpenFlow报文头部。接收者需要回复OFPT_ECHO_REPLY。该消息用来测量延迟、是否连接保持等。
OFPT_ECHO_REQUEST消息
OFPT_ECHO_REPLY消息
3.3.Feature消息
Features消息是由控制器发送给OpenFlow交换机,OpenFlow交换机需要应答自身支持的功能。OFPT_FEATURES_REQUEST消息类型是5,只有OpenFlow报文头,没有报文实体。
OFPT_FEATURES_REQUEST消息
OFPT_FEATURES_REPLY消息类型是6,消息体如下图所示。其中n_buffers表示一次最多缓存的数据包数量;n_tables表示交换机支持的流表数量;capabilities表示交换机所支持的功能。
OFPT_FEATURES_REPLY消息
3.4.Packet-in消息
交换机发送Packet_in消息给控制器有以下两种情况:
报文没有匹配到流表项;
流表项的action要求发给控制器。
一般将数据包缓存在交换机中,把有效的数据包信息(默认的128字节)和缓存id发送给控制器,不过,如果交换机不支持缓存或者内存用光了,那么就把整个数据包放在数据部分发给控制器,并且缓存id设置为-1。
Packet_in的TABLE_MISS消息
Packet_in的ACTION消息
3.5.Packet-out消息
当控制器希望交换机发送某个数据包,就使用Packet_out消息。例子:arp在广播的时候,在交换机中不能直接将arp广播,而是,将其封装在Packet_out里面,交换机泛洪的是Packet_out。
Packet_out消息
3.6.Flow_mod消息
Flow_mod这个消息是OpenFlow中最重要的消息,用来添加、删除、修改OpenFlow交换机的流表信息。当交换机收到一个无法处理的数据包,封装到Packet_in消息转发给控制器后,控制器可以发送一个Flow_mod消息下发一个流表到交换机,并且指定该数据包按照此流表项的action处理。
Flow_mod消息包含四个部分:OpenFlow报文头、Flow_mod固定字段、Match字段和Instruction字段。分别用来标识该消息的类型、流表项的内容等。
Flow_mod消息
四、总结
OpenFlow通过网络创新开启了一条新道路。如果OpenFlow得到广泛的应用和推广,则未来的网络将如曾经的计算机一样取得日新月异的发展。本文通过搭建环境并抓包,展示了常用的OpenFlow报文消息。
实战录 | 基于openflow协议的抓包分析的更多相关文章
- SMB协议原理抓包分析
SMB协议原理抓包分析 目录: 1.SMB概述 2.SMB原理 3.SMB配置 一.SMB概述 SMB(全称是Server Message Block)是一个协议名,可用于在计算机间共享文件.打印机. ...
- Wireshark简单协议的抓包分析
一.实验目的 HTTP.TCP.UDP.ICMP.ARP.IP.FTP.TELNET查询分析 基本掌握查询命令的使用方法 二.实验环境 硬件环境:一台Windows7系统,一台XP系统 软件环境:VM ...
- 简述http协议及抓包分析
1:HTTP请求头和响应头的格式 1:HTTP请求格式:<request-line><headers><blank line>[<request-body&g ...
- OpenFlow1.3协议wireshark抓包分析
OpenFlow v1.0 v1.0协议消息列表如下: 分为三类消息:Controller-to-switch,asynchronous和symmertric. v1.0(包含至少一个流表,每个流表包 ...
- SMB协议利用之ms17-010-永恒之蓝漏洞抓包分析SMB协议
SMB协议利用之ms17-010-永恒之蓝漏洞抓包分析SMB协议 实验环境: Kali msf以及wireshark Win7开启网络共享(SMB协议) 实验步骤: 1.查看本机数据库是否开启,发现数 ...
- Wireshark数据抓包分析——网络协议篇
Wireshark数据抓包分析--网络协议篇 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGF4dWViYQ==/ ...
- Http实战之Wireshark抓包分析
Http实战之Wireshark抓包分析 Http相关的文章网上一搜一大把,所以笔者这一系列的文章不会只陈述一些概念,更多的是通过实战(抓包+代码实现)的方式来跟大家讨论Http协议中的各种细节,帮助 ...
- wireshark 抓包分析 TCPIP协议的握手
wireshark 抓包分析 TCPIP协议的握手 原网址:http://www.cnblogs.com/TankXiao/archive/2012/10/10/2711777.html 之前写过一篇 ...
- 网络协议抓包分析——TCP传输控制协议(连接建立、释放)
前言 TCP协议为数据提供可靠的端到端的传输,处理数据的顺序和错误恢复,保证数据能够到达其应到达的地方.TCP协议是面向连接的,在两台主机使用TCP协议进行通信之前,会先建立一个TCP连接(三次握手) ...
随机推荐
- Hadoop学习12-配置集群环境
由于之前虚拟机都是用的桥接方式,有时候没有网络可用,想学习的时候,就狠不方便. 于是研究了一下,希望搭建一个多台虚机组成一个局域网的集群,即host-only方式 1.安装VM,网络选择“host-o ...
- 【uTenux实验】写在开始实验之前
1.使用的uTenux内核代码:http://www.uloong.cc/cn/download/uTenux_V1.6.00r180.zip 2.uTenux的特性: 1.微内核 2.开放源码.完 ...
- SQL SERVER安装序列号
MICROSOFT SQL SERVER 2012 DEVELOPER 版 序列号:YQWTX-G8T4R-QW4XX-BVH62-GP68Y MICROSOFT SQL SERVER 2012 EN ...
- Qt 环境下的activex控件编程-------1
本人第一次接触这种activeX控件的东西,参考了网上很多的教程,终于耗时三个多小时初步理解并编写了一个小demo,现在分享给大家,希望大家少走弯路.步骤如下: 1>像平常创建项目一样创建一个d ...
- The first day!!!
我的小院子开通啦,开始记录自己的学习历程,加油!!!
- [简单]docx4j常用方法小结
http://53873039oycg.iteye.com/blog/2194479?utm_source=tuicool&utm_medium=referral —————————————— ...
- 离线安装VS 2013开发工具的方法!
目前微软已正式发布了VS 2013的开发工具,但安装VS 2013开发工具前必须安装或升级到IE10,否则无法进行安装.本文主要介绍在Windows Server 2008 R2 SP1下离线安装IE ...
- [纯小白学习OpenCV系列]官方例程01:Load and Display an Image
Version: OpenCV 2.4.9 IDE : VS2010 OS : Windows --------------------------------------------- ...
- linq 对Sum()函数的支持
首先看一段SQL语句: SELECT SUM(TASKAPPR) AS APPRCOUNT, SUM(TASKLOCKED) AS LOCKEDCOUNT, SUM(TASKCHECKED) AS C ...
- Python延迟打印字符
我想让python打印类似“正在加载...”,每个句号打印出来与它们之间的睡眠时间0.5秒间隔 实现方法: 1 2 3 4 5 6 7 8 9 10 11 #!/bin/env python # -* ...