个人网站开发用到的技术,陕西营销型网站建设公司,江苏工业互联网公司排名,做推广哪个网站效果好SDN中两个重要元素#xff1a;控制器(掌控全局#xff0c;指挥网络内的设备工作)交换机(转发数据)控制器与网络设备通过OpenFlow协议进行通信OpenFlow交换机内有一个FlowTable#xff0c;交换机按照流表转发数据#xff0c;流表由控制器生成和维护。内有数据包匹配特征和数…SDN中两个重要元素控制器(掌控全局指挥网络内的设备工作)交换机(转发数据)控制器与网络设备通过OpenFlow协议进行通信OpenFlow交换机内有一个FlowTable交换机按照流表转发数据流表由控制器生成和维护。内有数据包匹配特征和数据包处理方法。流表数据包匹配特征的构成1.进入交换机的端口(Ingress Port)2.源MAC地址(Ether Source)、目的MAC地址(Ether dst)、以太网类型(Ether Type)、VLAN标签(VLAN id)、VLAN优先级(VLAN priority)3.源IP(IP src)、目的IP(IP dst)、IP协议字段(IP Proto)、IP服务类型(IP Tosbits)4.TCP/UDP源端口号(TCP/UDP src port)、TCP/UDP目的端口号(TCP/UDP dst port)数据包处理方法转发、修改包头。处理称为ActionOpenFlow协议的消息类型1.控制器to交换机(Controller to Switch 由控制器发出)1)Features获取交换机特征2)Configuration配置交换机3)Modify-State修改交换机状态(修改流表)4)Read-Stats读取交换机状态5)Send-Packet发送数据包6)Barrier阻塞消息2.异步消息(Asynchronous 由交换机发出)1)Packet-in收到数据包后告知控制器、2)Flow-Removed告知控制器交换机流表被删除3)Port-Status告知控制器交换机端口状态更新4)Error告知控制器交换机发生错误3.对称消息(Symmetric 控制器或交换机发出)1)Hello建立OpenFlow连接2)Echo确认交换机与控制器之间的连接状态3)Vendor厂商自定义的消息OpenFlow协议数据包包括包头Header和消息MessageHeader(协议版本、数据包长度等)、Message(具体的数据包内容)OpenFlow通信过程1)控制器与交换机三次握手建立socket连接然后控制器与交换机互发OFPT_Hello消息(只有Headerversion为发送方支持的协议的最高版本双方选择最低的版本的协议作为通信协议若一方不支持OpenFlow协议则发送OFPT_ERROR消息后断开连接否则建立连接成功)2)获取交换机Features。建立连接后控制器获取交换机特性信息(交换机ID、交换机缓冲区数量、交换机端口及端口属性)。控制器发送Features Request消息(只包含Header)交换机收到消息后返回Features Reply消息(包含Header和Message)Features Message结构datapath_id为交换机独一无二的ID号n_buffers为交换机可以同时缓存的最大数据包个数n_tables为交换机的流表数量Capabilities表示交换机支持的特殊功能Actions表示交换机支持的动作(见ofp_action_type)ofp_phy_ports为交换机的物理端口描述列表port_no为物理端口的编号hw_addr为端口的MAC地址name为端口的名称config为端口的配置State为端口状态curr, advertised supported,peer为端口物理属性3)PACKET_in 事件(交换机接收数据包)控制器获取交换机特性后向交换机发送数据包交换机收到数据包后开始处理。若收到的数据包没有匹配流表则交换机将其封装在packet_in中发送给控制器。触发此事件的原因有一、收到数据包若流表中有与数据包包头相匹配的则按所指示的action处理数据包否则封装在Packet_in消息中发回控制器处理此时数据包还缓存在交换机中二、流表中包含转发给控制器的动作(OutputController)此时不会缓存。Packet_in消息格式(uffer_id为packet‐in事件所携带的数据包在交换机中的缓存区ID、total_len为data段的长度、 in_port数据包进入交换机的入接口号、Reason为packet‐in事件产生的原因)packet_in事件后一般会触发两种事件(packet_out、flow_mod)若为广播包则包装为packet_out包让交换机flood(发送给除接收口以外的所有端口)4)OFPT_PACKET_OUT不是所有的数据包都要向交换机中添加一条流表项来匹配处理有数量很少数据包(如ARP、IGMP等)为了节省系统开销控制器可以使用PacketOut消息让交换机做相应处理。5)OFPT_FLOW_MOD流表中无匹配项时触发packet_in事件控制器收到此消息后发送flow_mod消息向交换机添加一个流表项将flow_mod消息中的buffer_id字段设为packet_in中的buffer_id向交换机流表内写入与此数据包有关的流表项并指定action处理。OFPT_FLOW_MOD header(type类型、length整个数据包长度、xid数据包编号)matchflow_mod(添加、删除、修改交换机的流表信息)action[]6)OFPT_ECHO:没有数据包交换时控制器定期发送OFPT_ECHO_REQUEST消息交换机回复OFPT_ECHO_REPLY确保通信顺畅。主要参考了[我对OpenFlow的理解](https://blog.csdn.net/haidalongjuanfeng/article/details/61196489)