版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
OpenFlow控制器与OpenFlow交换机之间的通信1.建⽴安全通道OpenFlow控制器是通过安全通道和OpenFlow交换机进⾏通信的,安全通道由控制⾯⽹络建⽴,不受OpenFlow交换机中的流表项OpenFlow中,安全通道通过TLS来实现,控制器与交换机之间通过服务器证书和客户机证书进⾏认证。在⼀些OpenFlow版本中(1.1及以上),控制器和交换机之间的连接有时也会通过TCP明⽂来实现。OpenFlow控制器启动后,对指定端⼝进⾏监听,默认的TCP端⼝为6633,后更改为6653。通过三次握⼿后,连接建⽴。2.消息OpenFlow消息由64⽐特(8字节)组成,所有的OpenFlow消息都是从OpenFlow头开始,图2-1为OpenFlow头格式。图2-1.png各字段及其含义字段⽐特数内容versiontype8OpenFlow的协议版本号消息类型(见2.1)8lengthxid1632该头中包含的⼋位字节数分配给数据包的id2.1OpenFlow消息类型表2-1(参考1.3版本)类型名称OFPT_HELLOHello消息OFPT_ERRORError消息OFPT_ECHO_REQUESTOFPT_ECHO_REPLYEcho请求消息Echo响应消息OFPT_EXPERIMENTEROFPT_FEATURES_REQUESTOFPT_FEATURES_REPLYExperimenter消息Features请求消息Features响应消息OFPT_GET_CONFIG_REQUEST类型GET_CONFIG请求消息GET_CONFIG响应消息SET_CONFIG消息Packet-In消息名称OFPT_GET_CONFIG_REPLYOFPT_SET_CONFIGOFPT_PACKET_INOFPT_FLOW_REMOVEDOFPT_PORT_STATUSFlow-Remove消息Port-Status消息OFPT_PACKET_OUTPacket-Out消息OFPT_FLOW_MODFlow-Mod消息OFPT_GROUP_MODGROUP_MOD消息PORT-MOD消息OFPT_PORT_MODOFPT_TABLE_MODTABLE_MOD消息MULTIPART请求消息MULTIPART响应消息BARRIER请求消息BARRIER响应消息OFPT_MULTIPART_REQUESTOFPT_MULTIPART_REPLYOFPT_BARRIER_REQUESTOFPT_BARRIER_REPLYOFPT_QUERU_GET_CONFIG_REQUESTOFPT_QUEUE_GET_CONFIG_REPLYOFPT_ROLE_REQUESTOFPT_ROLE_REPLEQUERU_GET_CONFIG请求消息QUERU_GET_CONFIG响应消息Role请求消息Role响应消息OFPT_GET_ASYNC_REQUESTOFPT_GET_ASYNC_REPLYOFPT_SET_ASYNCGET_ASYNC请求消息GET_ASYNC响应消息SET_ASYNC消息OFPT_METER_MODMETER消息OFPT_HELLO消息OpenFlow交换机与OpenFlow控制器建⽴安全通道后,会相互发送hello包。hello消息仅有OpenFlow头构成。且由交换机连向路由⽬的:⽤于OpenFlow协议版本的协商。内容:发送双⽅各⾃⽀持的最⾼版本协议。结果:选择双⽅⽀持的最低协议版本。成功:建⽴连接。失败:发送OFPT_ERROR,终⽌连接。Features消息(握⼿过程)通过互发hello消息建⽴连接后,执⾏控制器和交换机之间的握⼿过程。控制器通过握⼿过程了解交换机的相关配置信息,即可以对交换机进⾏控制。
发送数据:OFPT_FEATURES_REQUEST(Features请求)接收数据:OFPT_FEATURES_REPLY(Features响应)Features请求消息type=5只包含openflow头Features响应消息type=6Features响应消息格式(如图2-2所⽰)图2-2.png各个字段的含义字段datapath_idn_buffersn_tablespad⽐特数内容64OpenFlow中将各交换机称为datapath,datapath_id是唯⼀识别datapath的ID32交换机可以同时缓存的数据包的最⼤个数交换机中⽀持的流表数量⽤于64位对其的填充824capabilitiesactions32⽀持的容量32⽀持的⾏动ports长度可变OpenFlow1.3之后废除,在此不再介绍对于Features消息,每⼀次交换机连接到控制器,都会收到控制器的features_request,当交换机将features_reply回复给控制器后,控制器就会对交换机有了全⾯的了解,从⽽为交换机提供控制信息。OFPT_PACKET_IN消息为了将到达OpenFlow交换机的数据包发送⾄控制器,使⽤Packet-In消息,当存在:不存在与流表项⼀致,即没有流表进⾏匹配时(Table-miss)匹配的流表项存在发送⾄控制器的⾏为时可发送Packet-In消息,包含在Packet-In中的数据可能是很多种类型,ARP和ICMP为最常见类型。如果是⼴播包,控制器就会将其包装,封装成Packet-Out数据包,将其发送给交换机,让其进⾏泛洪处理(flood),即将数据包发往除in_port之外的所有端⼝。OFPT_PACKET_OUT消息作⽤:通过控制器发送交换机希望发送的数据例⼦:当⼀个没有匹配上流表项的数据上报控制器时,控制器可以下发packet_out,指定交换机对该数据包做泛洪或丢弃动作。若OpenFlow交换机的缓存中已存在数据包,⽽OpenFlow控制器发出发送数据包的命令时,该消息指定表⽰响应数据包的buffer_id。使⽤Packet-out还可以将OpenFlow控制器创建的数据包发送给交换机,此时,buffer_id设置为-1.在Packet-out消息后添加数据包数据。OFPT_FLOW_MOD消息Flow-Mod消息是由OpenFlow控制器对OpenFlow交换机设置流表项的消息。可对流表项进⾏添加、删除、变更设置等操作。Flow体命令种类如下:名称内容OFPFC_ADD添加流表项OFPFC_MODIFY变更匹配的流表项设置(OpenFlow1.2版本以上删除此项)仅变更完全匹配的流表项设置OFPFC_MODIFY_STRICTOFPFC_DELETE删除匹配的流表项OFPFC_DELETE_STRICT仅删除完全匹配的流表项ofp_flow_mod_command={0:"OFPFC_ADD",#Newflow1:"OFPFC_MODIFY",#Modifyallmatchingflows2:"OFPFC_MODIFY_STRICT",#Modifyentrystrictlymatchingwildcards3:"OFPFC_DELETE",#Deleteallmatchingflows4:"OFPFC_DELETE_STRICT"}#StrictlymatchwildcardsandpriorityOFPT_FLOW_MOD由header+match+flow_mod+action构成。flow_mod=of.ofp_header(type=14,length=72)/of.ofp_flow_wildcards(OFPFW_NW_TOS=1,OFPFW_DL_VLAN_PCP=1,OFPFW_NW_DST_MASK=0,OFPFW_NW_SRC_MASK=0,OFPFW_TP_DST=1,OFPFW_TP_SRC=1,OFPFW_NW_PROTO=1,OFPFW_DL_TYPE=1,OFPFW_DL_VLAN=1,OFPFW_IN_PORT=1,OFPFW_DL_DST=1,OFPFW_DL_SRC=1)\/of.ofp_match(in_port=msg.payload.payload.payload.in_port,dl_src=pkt_parsed.src,dl_dst=pkt_parsed.dst,dl_type=pkt_parsed.type,dl_vlan=pkt_parsed.payload.vlan,nw_tos=pkt_parsed.payload.tos,nw_proto=pkt_to,nw_src=pkt_parsed.payload.src,nw_dst=pkt_parsed.payload.dst,tp_src=0,tp_dst=0)\/of.ofp_flow_mod(cookie=0,command=0,idle_timeout=10,hard_timeout=30,out_port=msg.payload.payload.payload.payload.port,buffer_id=buffer_id,flags=1)OFP_HEADER见2.消息中OpenFlow头结构。MATCH(数据包匹配)这个数据结构会出现在⼏乎所有重要的数据包中,因为他存的就是控制信息。如有packet_in引发的下发流表,则match部分应对应填上对应的数据,这样下发的流表才是正确的。但是在下发的时候还需要注意许多细节,⽐如:并不是所有的数据包都有vlan_tag。如0x0800就是纯IP,并没有携带vlan_tag,所以填充式应根据packet_in的具体情况填充。并不是所有的数据都有四层端⼝,所以四层的源端⼝,⽬的端⼝都不是任何时候都能由packet_in去填充的。不去管就好了,默认的会填充⼀个默认值,匹配的时候不去匹配4层端⼝就没有问题。WILDCARDS(通配符)在of1.0中这⾥的0,1意义跟我们平时接触的如⼦⽹掩码等意义相反,如OFPFW_NW_DST_MASK=0则表⽰全匹配⽬标IP。如果为63,则表⽰不匹配IP。在1.3的时候,这个逻辑改成了正常与的逻辑。即1为使能匹配,0为默认不匹配。因匹配字段在1.2版本之后变化较⼤,请⾃⾏查看OpenFlow协议。Flow-Mod消息的⾏动信息Flow-Mod消息的⾏动信息结构如图2-3所⽰:图2-3.png相关代码如下:classofp_flow_mod(Packet):name="OpenFlowFlowModify"fields_desc=[BitField("cookie",0,64),#Opaquecontroller-issuedidentifierShortEnumField("command",0,ofp_flow_mod_command),ShortField("idle_timeout",60),ShortField("hard_timeout",0),ShortField("priority",0),IntField("buffer_id",0),ShortField("out_port",0),#flagsareimportant,the1<<0bitisOFPFF_SEND_FLOW_REM,sendOFPT_FLOW_REMOVED#1<<1bitisOFPFF_CHECK_OVERLAP,checkingiftheentries'fieldoverlaps(amongsamepriority)#1<<2bitisOFPFF_EMERG,usedonlyswitchdisconnectedwithcontroller)ShortField("flags",0)]各字段及其含义:⽐特字段内容数command16表⽰Flow-Mod消息动作的ofp_flow_mod_command(具体参看上表具体命令)如果与流表项匹配的数据包超过idle_timeout的时间还未到,则删除流表项idle_timeo16uthard_time16out流表项添加的时间超过hard_timeout则删除priority1632多个流表项与数据包匹配时的优先级buffer_idOpenFlow交换机⼀侧保存的数据包的缓存ID仅在DELETE及DELETE_STRICT命令中使⽤,该值已指定时,仅删除⾏动中描述了与该数值⼀致的输出物理端⼝的流表项out_portflags1616标志。长度可变actions⾏动描述部分例如:如果要添加⼀条新流,command=0。两个时间参数idle_timeout&hard_timeout:idle_timeout:如值为20,则某条流在20秒之内没有被匹配,则删除。hard_timeout:如值为30,则30秒到达的时候,⼀定删除这条流,即使他还活跃,能被匹配。priority:priority是流的优先级的字段,字数越⼤则优先级越⾼,存放在号数越⼩的table中。buffer_id:由交换机指定的buffei_id,准确的说是由dpid指定的。如果是⼿动下发的流,buffer_id应填-1,即0xffff,告诉交换机这个数据包并没有缓存在队列中。out_port:指定流的出⼝,有⼀些端⼝是很特殊的,如flood,local等。具体分类如下:ofp_port={0xff00:"OFPP_MAX",0xfff8:"OFPP_IN_PORT",0xfff9:"OFPP_TABLE",0xfffa:"OFPP_NORMAL",0xfffb:"OFPP_FLOOD",0xfffc:"OFPP_ALL",0xfffd:"OFPP_CONTROLLER",0xfffe:"OFPP_LOCAL",0xffff:"OFPP_NONE"}如果不清楚端⼝是多少,最好填写flood,即0xfffb。flags:若⽆特殊⽤途,置为1,这样可以让交换机在删除⼀条流时给交换机上报flow_removed信息。action:每⼀条流都必须指定action,若没有指定,交换机会默认执⾏drop操作。action的两种类型⾏动。1.必备⾏动:Forward,Drop2.选择⾏动:Set-Queue,Set-Field等。具体action类型如下:ofp_action_type={0:"OFPAT_OUTPUT",1:"OFPAT_SET_VLAN_VID",2:"OFPAT_SET_VLAN_PCP",3:"OFPAT_STRIP_VLAN",4:"OFPAT_SET_DL_SRC",5:"OFPAT_SET_DL_DST",6:"OFPAT_SET_NW_SRC",7:"OFPAT_SET_NW_DST",8:"OFPAT_SET_NW_TOS",9:"OFPAT_SET_TP_SRC",10:"OFPAT_SET_TP_DST",11:"OFPAT_ENQUEUE"}各字段及其含义:名称内容OFPAT_OUTPUT输出⾄交换机物理端⼝设置802.1Q的VLANid设置802.1Q的PCP清除802.1Q的头OFPAT_SET_VLAN_VIDOFPAT_SET_VLAN_PCPOFPAT_STRIP_VLANOFPAT_SET_DL_SRCOFPAT_SET_DL_DSTOFPAT_SET_NW_SRCOFPAT_SET_NW_DSTOFPAT_SET_NW_TOSOFPAT_SET_TP_SRCOFPAT_SET_TP_DSTOFPAT_ENQUEUE设置发送源以太⽹地址设置发送⽬标以太⽹地址设置发送源IPV4地址设置发送⽬标IPV4地址设置IPV4的TOS字段设置TCP/UDP的发送源端⼝号或ICMP类型\设置TCP/UDP的⽬标端⼝号或ICMP代码输出⾄队列Flow-Removed消息如果flow-mod的flags置为1,则在该流表失效后会回复控制器OFPT_LFOW_REMOVED消息。结构如图2-4所⽰:图2-4.png作⽤:在流失效的时候回复控制器,并携带若⼲统计数据。classofp_flow_removed(Packet):name="OpenFlowflowremoved"fields_desc=[BitField("cookie",0,64),#在控制器中使⽤,与flow-mod消息数值相同。BitField("priority",0,16),#流表项的优先级,与flow-mod相同。BitField("reason",0,8),#流表项删除理由。ByteField("pad",None),#⽤于32位对齐。BitField("duration_sec",0,32),#流表项有效时间。BitField("duration_nsec",0,32),#流表项有效时间。BitField("idle_timeout",0,16),#idle超时时间。ByteField("pad",0),#⽤于64位对齐。BitField("packet_count",0,64),#与流表项匹配的数据包数。BitField("byte_count",0,64),#匹配的数据包总字节数。]Error消息Error消息的作⽤是通知出现了某种错误,OpenFlow交换机和OpenFlow控制器都可以发送Error消息。错误消息类型:名称(type)内容OFPET_HELLO_FAILEDOFPET_BAD_REQUESTOFPET_BAD_ACTIONHello协议失败⽆法解读请求⾏动的描述中包含错误变更流表项时发⽣错误Port-Mod请求失败队列操作失败OFPET_FLOW_MOD_FAILEDOFPET_PORT_MOD_FAILEDOFPET_QUEUE_OP_FAILED具体的type与其对应的相关代码:ofp_hello_failed_code={0:"OFPHFC_INCOMPATIBLE",1:"OFPHFC_EPERM"}ofp_bad_request_code={0:"OFPBRC_BAD_VERSION",1:"OFPBRC_BAD_TYPE",2:"OFPBRC_BAD_STAT",3:"OFPBRC_BAD_VENDOR",4:"OFPBRC_BAD_SUBTYPE",5:"OFPBRC_EPERM",6:"OFPBRC_BAD_LEN",7:"OFPBRC_BUFFER_EMPTY",8:"OFPBRC_BUFFER_UNKNOWN"}ofp_bad_action_code={0:"OFPBAC_BAD_TYPE",1:"OFPBAC_BAD_LEN",2:"OFPBAC_BAD_VENDOR",3:"OFPBAC_BAD_VENDOR_TYPE",
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030年中国休闲女包市场运行现状及投资发展前景预测报告
- 2025-2030年中国丙纶纤维行业发展现状及投资前景规划研究报告
- 2025-2030年中国三异丁基铝市场十三五规划与投资风险评估报告
- 浙江2024年浙江省海洋地质调查大队选调工作人员笔试历年典型考点(频考版试卷)附带答案详解
- 2025-2030年中国CG行业运营状况与发展潜力分析报告
- 2024版冷藏车租赁合同
- 2024版供应链管理补充协议:增项部分版B版
- 2025年人教版高二英语上册阶段测试试卷含答案
- 河南2024年河南工业和信息化职业学院招聘博士研究生2人笔试历年典型考点(频考版试卷)附带答案详解
- 2025年外研版九年级科学上册月考试卷含答案
- 猎聘-2024高校毕业生就业数据报告
- 2024年公务员考试必背常识大全
- 劳工与人权管理核心制度
- 北师大版数学五年级上册第三单元《倍数与因数》大单元整体教学设计
- 中药灌肠方法
- 医美整形美容医院眼部抗衰品牌课件
- 软件研发安全管理制度
- 大学暑假假期社会实践心得体会3篇
- 科普产业发展现状调查报告
- 2024湖南湘电集团有限公司招聘笔试参考题库附带答案详解
- 新课标人教版小学四年级体育与健康下册全册教案设计及教学反思
评论
0/150
提交评论