欢迎来到天天文库
浏览记录
ID:49530978
大小:224.14 KB
页数:11页
时间:2020-03-02
《OpenFlow协议抓包分析.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、OpenFlow协议抓包分析1什么是openflow协议OpenFlow起源于斯坦福大学的CleanSlate项目组,使用类似于API进程配置网络交换机的协议。OpenFlow的思路很简单,网络设备维护一个FlowTable,并且只通过FlowTable对报文进行处理,FlowTable本身的生成、维护、下发完全由外置的Controller来实现。OpenFlow交换机将原来完全由交换机/路由器控制的报文转发过程转化为由OpenFlow交换机(OpenFlowSwitch)和控制服务器(Controller)来共同完成,从而实现了数据转发和路由控制的分离。控制器可以通过事先
2、规定好的接口操作来控制OpenFlow交换机中的流表,从而达到控制数据转发的目的。OpenFlow交换机包含安全通道,多级流表和组表。通过安全通道,OpenFlow交换机可以和控制器建立OpenFlow连接;流表用来匹配OpenFlow交换机收到的报文;组表用来定义流表需要执行的动作。2报文分析OpenFlow协议支持三种消息类型:controller-to-switch,asynchronous(异步)和symmetric(对称)。OpenFlow通过这三种消息,来保持controller和OpenFlow交换机之间的通信。常用的消息主要是Hello消息、Feature消
3、息,Echo消息,以及Packet_in、Packet_out和Flow_mod等。其中Hello、Feature、Echo消息分别包含REQUEST与REPLY消息,每一个消息REQUEST与REPLY的TransactionID相同。2.1Hello控制器与交换机建立连接时由其中某一方发起OFPT_HELLO消息给对方,该消息携带支持的最高协议版本号,接受方将采用双方都支持的最低协议版本进行通信。一旦发现共同支持的协议版本,则连接建立,否则发送OFPT_ERROR消息,描述失败原因,并中断连接。/*HeaderonallOpenFlowpackets.*/structo
4、fp_header{uint8_tversion;/*OFP_VERSION.*/uint8_ttype;/*OneoftheOFPT_constants.*/uint16_tlength;/*Lengthincludingthisofp_header.*/uint32_txid;/*Transactionidassociatedwiththispacket.Repliesusethesameidaswasintherequesttofacilitatepairing.*/};OFP_ASSERT(sizeof(structofp_header)==8);Hello消息如下
5、:1.Version:OpenFlow版本,低位为版本号,如上所示。2.Type:OpenFlow消息类型。2.2Feature消息TLS会话一建立,控制器就会向交换机发送一个ofpt_feature_request消息,该消息只有of包头,如下所示。交换机会回复一条ofpt_feature_reply消息。ofpt_feature_request如图:(有时候会发现一个数据包中有多个request,并且后面会有一一对应的reply包。)ofpt_feature_reply如图:2.3Packet_in消息当交换机碰到新数据包不知道如何处理,或者action要求发送给控制器
6、,那么交换机就会用packet_in消息发送给控制器。一般将数据包缓存在交换机中,将有效的数据包信息(默认的128字节,如果原因是“sendtocontroller”action,那么长度由action_out的max_len决定;如果是原因tablemiss,那么长度由set_config消息中的miss_send_len决定。)和缓存id发送给控制器,不过,如果交换机不支持缓存或者内存用光了,那么就把整个数据包放在数据部分发给控制器,并且缓存id为-1。Packet_in消息如下:Packet_in消息结构如下:/*Packetreceivedonport(datapa
7、th->controller).*/structofp_packet_in{structofp_headerheader;uint32_tbuffer_id;/*IDassignedbydatapath.*/uint16_ttotal_len;/*Fulllengthofframe.*/uint16_tin_port;/*Portonwhichframewasreceived.*/uint8_treason;/*Reasonpacketisbeingsent(oneofOFPR_*)*/uint8_tpad;uin
此文档下载收益归作者所有