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

下载本文档

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

文档简介

OpenFlow协议抓包分析1什么是openflow协议OpenFlow起源于斯坦福大学的CleanSlate工程组,使用类似于API进程配置网络交换机的协议。OpenFlow的思路很简单,网络设备维护一个FlowTable,并且只通过FlowTable对报文进行处理,FlowTable本身的生成、维护、下发完全由外置的Controller来实现。OpenFlow交换机将原来完全由交换机/路由器控制的报文转发过程转化为由OpenFlow交换机〔OpenFlowSwitch〕和控制效劳器〔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的TransactionID相同。2.1Hello控制器与交换机建立连接时由其中某一方发起OFPT_HELLO消息给对方,该消息携带支持的最高协议版本号,接受方将采用双方都支持的最低协议版本进行通信。一旦发现共同支持的协议版本,那么连接建立,否那么发送OFPT_ERROR消息,描述失败原因,并中断连接。/*HeaderonallOpenFlowpackets.*/structofp_header{uint8_tversion;/*OFP_VERSION.*/uint8_ttype;/*OneoftheOFPT_constants.*/uint16_tlength;/*Lengthincludingthisofp_header.*/uint32_txid;/*Transactionidassociatedwiththispacket.Repliesusethesameidaswasintherequesttofacilitatepairing.*/};OFP_ASSERT(sizeof(structofp_header)==8);Hello消息如下:Version:OpenFlow版本,低位为版本号,如上所示。Type:OpenFlow消息类型。2.2Feature消息TLS会话一建立,控制器就会向交换机发送一个ofpt_feature_request消息,该消息只有of包头,如下所示。交换时机回复一条ofpt_feature_reply消息。ofpt_feature_request如图:〔有时候会发现一个数据包中有多个request,并且后面会有一一对应的reply包。〕ofpt_feature_reply如图:2.3Packet_in消息当交换机碰到新数据包不知道如何处理,或者action要求发送给控制器,那么交换机就会用packet_in消息发送给控制器。一般将数据包缓存在交换机中,将有效的数据包信息〔默认的128字节,如果原因是“sendtocontroller〞action,那么长度由action_out的max_len决定;如果是原因tablemiss,那么长度由set_config消息中的miss_send_len决定。〕和缓存id发送给控制器,不过,如果交换机不支持缓存或者内存用光了,那么就把整个数据包放在数据局部发给控制器,并且缓存id为-1。Packet_in消息如下:Packet_in消息结构如下:/*Packetreceivedonport(datapath->controller).*/structofp_packet_in{structofp_headerheader;uint32_tbuffer_id;/*IDassignedbydatapath.*/uint16_ttotal_len;/*Fulllengthofframe.*/uint16_tin_port;/*Portonwhichframewasreceived.*/uint8_treason;/*Reasonpacketisbeingsent(oneofOFPR_*)*/uint8_tpad;uint8_tdata[0];/*Ethernetframe,halfwaythrough32-bitword,sotheIPheaderis32-bitaligned.Theamountofdataisinferredfromthelengthfieldintheheader.Becauseofpadding,offsetof(structofp_packet_in,data)==sizeof(structofp_packet_in)-2.*/};OFP_ASSERT(sizeof(structofp_packet_in)==20);buffer_id:数据通道分配的缓存id,标志数据包存在交换机中的位置,如果没有缓存在交换机中那么buffer_id那么为-1。total_len:整个数据帧的长度。in_port:接收数据帧的端口。reason:将数据包发送给控制器的原因,一般有俩原因,一是没有匹配到流表项,二是动作要求发给控制器。2.4Packet_out消息当控制器希望交换机发送某个数据包,就使用packet_out消息。Packet_out消息如下所示:Packet_out消息结构如下:/*Sendpacket(controller->datapath).*/structofp_packet_out{structofp_headerheader;uint32_tbuffer_id;/*IDassignedbydatapath(-1ifnone).*/uint16_tin_port;/*Packet'sinputport(OFPP_NONEifnone).*/uint16_tactions_len;/*Sizeofactionarrayinbytes.*/structofp_action_headeractions[0];/*Actions.*//*uint8_tdata[0];*//*Packetdata.Thelengthisinferredfromthelengthfieldintheheader.(Onlymeaningfulifbuffer_id==-1.)*/};OFP_ASSERT(sizeof(structofp_packet_out)==16);buffer_id:与packet_in中给的一样,如果为-1就说明数据包附在数据数组中。2.5Configuration消息控制器可以发送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的消息结构如下所示:/*Switchconfiguration.*/structofp_switch_config{structofp_headerheader;uint16_tflags;/*OFPC_*flags.*/uint16_tmiss_send_len;/*Maxbytesofnewflowthatdatapathshouldsendtothecontroller.*/};OFP_ASSERT(sizeof(structofp_switch_config)==12);Flags:配置类型flags,主要包括:2.6Stats消息交换机和控制器连接后,控制器会不断发送stats消息询问交换机的状态,就好似两个打的人,一方不断询问“你在吗?〞另一方不断答复“在呀!〞抓到的stats消息如下所示:2.7Flow_modFlow_mod这个消息是OpenFlow中最重要的消息,用来添加、删除、修改OpenFlow交换机的流表信息。当交换机收到一个无法处理的数据包,封装到Packet_in消息转发给控制器后,控制器可以发送一个Flow_mod消息下发一个流表到交换机,并且指定该数据包按照此流表项的action处理。Flow_mod消息包含四个局部:OpenFlow报文头、Flow_mod固定字段、Match字段和Instruction字段。分别用来标识该消息的类型、流表项的内容等。控制器与交换机建立连接后,控制器会自发给交换机发送一组flow_mod消息,抓到的消息如下:flow_mod消息结构:/*Flowsetupandteardown(controller->datapath).*/structofp_flow_mod{structofp_headerheader;structofp_matchmatch;/*Fieldstomatch*/uint64_tcookie;/*Opaquecontroller-issuedidentifier.*//*Flowactions.*/uint16_tcommand;/*OneofOFPFC_*.*/uint16_tidle_timeout;/*Idletimebeforediscarding(seconds).*/uint16_thard_timeout;/*Maxtimebeforediscarding(seconds).*/uint16_tpriority;/*Prioritylevelofflowentry.*/uint32_tbuffer_id;/*Bufferedpackettoapplyto(or-1).NotmeaningfulforOFPFC_DELETE*.*/uint16_tout_port;/*ForOFPFC_DELETE*commands,requirematchingentriestoincludethisasanoutputport.AvalueofOFPP_NONEindicatesnorestriction.*/uint16_tflags;/*

温馨提示

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

最新文档

评论

0/150

提交评论