OpenFlow协议抓包分析.doc_第1页
OpenFlow协议抓包分析.doc_第2页
OpenFlow协议抓包分析.doc_第3页
OpenFlow协议抓包分析.doc_第4页
OpenFlow协议抓包分析.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

OpenFlow协议抓包分析1 什么是openflow协议OpenFlow起源于斯坦福大学的Clean Slate项目组 ,使用类似于API进程配置网络交换机的协议。OpenFlow的思路很简单,网络设备维护一个FlowTable,并且只通过FlowTable对报文进行处理,FlowTable本身的生成、维护、下发完全由外置的Controller来实现。OpenFlow交换机将原来完全由交换机/路由器控制的报文转发过程转化为由OpenFlow交换机(OpenFlow Switch)和控制服务器(Controller)来共同完成,从而实现了数据转发和路由控制的分离。控制器可以通过事先规定好的接口操作来控制OpenFlow交换机中的流表,从而达到控制数据转发的目的。OpenFlow交换机包含安全通道,多级流表和组表。通过安全通道,OpenFlow交换机可以和控制器建立OpenFlow连接;流表用来匹配OpenFlow交换机收到的报文;组表用来定义流表需要执行的动作。2 报文分析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相同。2.1 Hello控制器与交换机建立连接时由其中某一方发起OFPT_HELLO消息给对方,该消息携带支持的最高协议版本号,接受方将采用双方都支持的最低协议版本进行通信。一旦发现共同支持的协议版本,则连接建立,否则发送OFPT_ERROR消息,描述失败原因,并中断连接。/* Header on all OpenFlow packets. */struct ofp_header uint8_t version; /* OFP_VERSION. */uint8_t type; /* One of the OFPT_ constants. */uint16_t length; /* Length including this ofp_header. */uint32_t xid; /* Transaction id associated with this packet.Replies use the same id as was in the requestto facilitate pairing. */;OFP_ASSERT(sizeof(struct ofp_header) = 8);Hello消息如下:1. Version:OpenFlow版本,低位为版本号,如上所示。2. Type:OpenFlow消息类型。 2.2 Feature消息TLS会话一建立,控制器就会向交换机发送一个ofpt_feature_request消息,该消息只有of包头,如下所示。交换机会回复一条ofpt_feature_reply消息。ofpt_feature_request如图:(有时候会发现一个数据包中有多个request,并且后面会有一一对应的reply包。)ofpt_feature_reply如图:2.3 Packet_in消息当交换机碰到新数据包不知道如何处理,或者action要求发送给控制器,那么交换机就会用packet_in消息发送给控制器。一般将数据包缓存在交换机中,将有效的数据包信息(默认的128字节,如果原因是 “send to controller” action,那么长度由action_out的max_len决定;如果是原因table miss,那么长度由set_config消息中的miss_send_len决定。)和缓存id发送给控制器,不过,如果交换机不支持缓存或者内存用光了,那么就把整个数据包放在数据部分发给控制器,并且缓存id为-1。Packet_in消息如下:Packet_in消息结构如下:/* Packet received on port (datapath - controller). */struct ofp_packet_in struct ofp_header header;uint32_t buffer_id; /* ID assigned by datapath. */uint16_t total_len; /* Full length of frame. */uint16_t in_port; /* Port on which frame was received. */uint8_t reason; /* Reason packet is being sent (one of OFPR_*) */uint8_t pad;uint8_t data0; /* Ethernet frame, halfway through 32-bit word,so the IP header is 32-bit aligned. The amount of data is inferred from the length field in the header. Because of padding, offsetof(struct ofp_packet_in, data) = sizeof(struct ofp_packet_in) - 2. */ ;OFP_ASSERT(sizeof(struct ofp_packet_in) = 20);1. buffer_id:数据通道分配的缓存id,标志数据包存在交换机中的位置,如果没有缓存在交换机中则buffer_id则为-1。2. total_len:整个数据帧的长度。3. in_port:接收数据帧的端口。4. reason:将数据包发送给控制器的原因,一般有俩原因,一是没有匹配到流表项,二是动作要求发给控制器。2.4 Packet_out消息当控制器希望交换机发送某个数据包,就使用packet_out消息。Packet_out消息如下所示:Packet_out消息结构如下:/* Send packet (controller - datapath). */struct ofp_packet_out struct ofp_header header;uint32_t buffer_id; /* ID assigned by datapath (-1 if none). */uint16_t in_port; /* Packets input port (OFPP_NONE if none). */uint16_t actions_len; /* Size of action array in bytes. */struct ofp_action_header actions0; /* Actions. */* uint8_t data0; */ /* Packet data. The length is inferredfrom the length field in the header.(Only meaningful if buffer_id = -1.) */;OFP_ASSERT(sizeof(struct ofp_packet_out) = 16);buffer_id:与packet_in中给的一样,如果为-1就表明数据包附在数据数组中。2.5 Configuration消息控制器可以发送OFPT_SET_CONFIG / OFPT_GET_CONFIG_REQUEST消息设置/查询交换机配置参数,交换机只需响应OFPT_GET_CONFIG_REQUEST消息即可。OFPT_SET_CONFIG消息如下所示:OFPT_GET_CONFIG_REQUEST消息没有消息主体,OFPT_SET_CONFIG 、OFPT_GET_CONFIG_reply的消息结构如下所示:/* Switch configuration. */struct ofp_switch_config struct ofp_header header;uint16_t flags; /* OFPC_* flags. */uint16_t miss_send_len; /* Max bytes of new flow that datapath shouldsend to the controller. */;OFP_ASSERT(sizeof(struct ofp_switch_config) = 12);1. Flags:配置类型flags,主要包括:2.6 Stats消息交换机和控制器连接后,控制器会不断发送stats消息询问交换机的状态,就好像两个打电话的人,一方不断询问“你在吗?”另一方不断回答“在呀!”抓到的stats消息如下所示:2.7 Flow_modFlow_mod这个消息是OpenFlow中最重要的消息,用来添加、删除、修改OpenFlow交换机的流表信息。当交换机收到一个无法处理的数据包,封装到Packet_in消息转发给控制器后,控制器可以发送一个Flow_mod消息下发一个流表到交换机,并且指定该数据包按照此流表项的action处理。Flow_mod消息包含四个部分:OpenFlow报文头、Flow_mod固定字段、Match字段和Instruction字段。分别用来标识该消息的类型、流表项的内容等。控制器与交换机建立连接后,控制器会自发给交换机发送一组flow_mod消息,抓到的消息如下:flow_mod消息结构:/* Flow setup and teardown (controller - datapath). */struct ofp_flow_mod struct ofp_header header;struct ofp_match match; /* Fields to match */uint64_t cookie; /* Opaque controller-issued identifier. */* Flow actions. */uint16_t command; /* One of OFPFC_*. */uint16_t idle_timeout; /* Idle time before discarding (seconds). */uint16_t hard_timeout; /* Max time before discarding (seconds). */uint16_t priority; /* Priority level of flow entry. */uint32_t buffer_id; /* Buffered packet to apply to (or -1).Not meaningful for OFPFC_DELETE*. */uint16_t out_port; /* For OFPFC_DELETE* commands, require matching entries to include this as an output port. A value of OFPP_NONE indicates no restriction. */uint16_t flags;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论