《实战录》导语

云端卫士《实战录》栏目定期会向粉丝朋友们分享一些在开发运维中的经验和技巧,希望对于关注我们的朋友有所裨益。本期分享人为云端卫士安全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协议的抓包分析相关推荐

  1. 互联网协议IP抓包分析 -- wireshark

    互联网协议IP抓包分析 – wireshark 互联网协议IP是Internet Protocol的缩写,中文缩写是网协 互联网协议也就是为计算机相互连接进行通信而设计的协议. IP地址协议报文首部 ...

  2. ICMP协议及其抓包分析

    ICMP协议及其抓包分析 Internet消息控制协议(ICMP)指定了多种消息类型,其目的就是管理网络. ICMP的消息分为错误信息.请求信息和响应消息. 一般ICMP数据包格式 ICMP数据包类型 ...

  3. 抓包红色_抓包三部曲 WebSocket 协议原理抓包分析

    这篇文章通过抓包分析 WebSocket 协议的细节,学习一下 WebSocket 执行流程. 1.WebSocket 流程说明 (1)客户端和服务器之间完成三次握手建立 TCP 连接(TLS/SSL ...

  4. 接口协议之抓包分析 TCP 协议

    TCP 协议是在传输层中,一种面向连接的.可靠的.基于字节流的传输层通信协议. 环境准备 对接口测试工具进行分类,可以如下几类: 网络嗅探工具:tcpdump,wireshark 代理工具:fiddl ...

  5. iOS 之 Bonjour 协议简单抓包分析

    引子 因在学习iOS编程之bonjour编程的过程中,对bonjour产生了一些些的好奇,因此就查阅了各种资料以及自己抓包分析该协议. 注:文章作为个人学习记录,不一定准确,如有错误请多多指教,共同进 ...

  6. DHCP和PPPoE协议以及抓包分析

    目录 一.DHCP协议学习 1.1 定义 1.1.1 使用DHCP的优点 1.2 DHCP客户端 1.3 DHCP服务器 1.4 端口 1.5 DHCP中继 1.6 报文格式及其类型 1.7 DHCP ...

  7. tcpdump抓包ftp协议_tcpdump抓包分析详解

    简介 用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具. tcpdump可以将网络中传送的数据包的 ...

  8. java实现FTP协议:wireshark抓包解析

    本节我们看看ftp协议的数据包格式,同时使用代码加以实现.首先我们现在机器上安装ftp服务器,我在自己的机器上安装了QuickFTP Server,它是我随便找来的一款Mac ftp服务器,如下图所示 ...

  9. hls二次加密 m3u8_HLS实战之Wireshark抓包分析

    0.引言 Wireshark(前称Ethereal)是一个网络封包分析软件.网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料.Wireshark使用WinPCAP作为接口,直 ...

最新文章

  1. RCP中Perspective中,设置各个view的大小比例
  2. 调试css的新装备--IETester
  3. 【数字信号处理】基本序列 ( 正弦序列 | 数字角频率 ω | 模拟角频率 Ω | 数字频率 f | 模拟频率 f0 | 采样频率 Fs | 采样周期 T )
  4. 训练指南第二章-基础问题
  5. 一套模块化数据中心培训资料
  6. error LNK2019: unresolved external symbol __imp__ func@20 referenced in function..
  7. JavaScript实现ShellSort希尔排序算法(附完整源码)
  8. c# 中关键字_C#中的“使用”关键字
  9. 雷军晒3亿估值,意欲“收编”台湾硬件创业者?
  10. 你需要administrators提供的权限才能删除_终于解决了:你需要来自XXX的权限才能对此文件进行更改
  11. 深度优先搜索——单词接龙(洛谷 P1019)
  12. MP288MP280清零软件
  13. 装微软原版win10系统
  14. VS2017 激活密钥
  15. 前端原生Html免费模板网站总结(带网址)
  16. 随机数生成器【欧拉常数】
  17. 小端格式和大端格式(Little-EndianBig-Endian)
  18. python爬取某站上海租房图片
  19. 【Matlab】自定义函数的几种方法
  20. 如何清除浏览器缓存?

热门文章

  1. EV录屏软件操作方法
  2. 一款免费的容器安全 SaaS 平台使用记录
  3. APP产品的数据分析体系
  4. 大话西游手游服务端可开服
  5. metabase使用教程
  6. [推荐系统]基于个性化推荐系统研究与实现(1)
  7. ZRender (Canvas)简单使用(拖拽、缩放、旋转、文字、层级)
  8. 故宫学系列之紫禁城:从皇宫到博物院
  9. 诞生272年后,这个看似简单的数学问题终求得闭式解
  10. 基于python实现去除视频的水印