Openflow
OpenFlow是一种用于软件定义网络(SDN)的开放通信协议,旨在通过将网络的控制平面与数据平面分离,实现网络的灵活性和可编程性。OpenFlow协议允许SDN控制器直接与网络设备(如交换机和路由器)通信,并通过发送特定的控制消息来配置和管理网络流量转发规则。
在传统网络中,网络设备的控制平面和数据平面是紧密耦合的,交换机和路由器内部自行决定如何转发流量。而在SDN中,控制器可以通过OpenFlow协议向网络设备下发流表规则,指示网络设备如何处理数据包,从而实现更灵活和动态的网络配置。
流表规则就类似于传统交换机的MAC地址表,但具有更高级的功能和灵活性,区别如下:
- 灵活性:流表规则比MAC地址表更加灵活和可编程。传统交换机的MAC地址表仅根据数据包的源MAC地址来学习转发端口,而流表规则可以根据更多的匹配条件来决定如何处理数据包,例如源IP地址、目的IP地址、协议类型、VLAN标记等。
- 中央控制:流表规则是由SDN控制器中央控制的,而传统交换机的MAC地址表是由交换机本身动态学习的。SDN控制器可以根据网络需求动态地配置流表规则,实现对网络流量的灵活控制。
- 数据平面与控制平面分离:在SDN中,控制器和交换机之间通过OpenFlow协议通信,实现数据平面和控制平面的分离。这使得网络管理更加灵活和可编程。而传统交换机的MAC地址表在数据平面内部实现,并与控制平面紧密耦合。
OVS
虚拟交换机要做到的事情:传递虚拟机之间的流量,以及实现虚拟机和外界网络的通信
OVS(Open vSwitch)是一个开源的、多层次的虚拟交换机,它可以在不同的虚拟化平台中使用,例如KVM、Xen、VMware和Docker等。
OVS流表
下图是一个进入OVS的数据包(Packet)被流表处理的过程。OVS中可以有一个或者多个流表(flow table),每个流表包括多条流表项(Flow entry),每条流表项主要包含多个匹配字段(match fields)、匹配成功后要执行的指令集(action set)和统计信息。
满足前面条件的去actions,某些表约定俗成干一些特定的事情
对于没有满足任何条件的数据包,通常会采取默认操作,这可以在流表中定义。例如,您可以设置一个默认规则,用于捕获未匹配到任何其他规则的数据包,并根据需要执行特定的操作,如丢弃、记录或转发到特定端口。
控制器和OVS使用OpenFlow协议进行通信
- 控制器与OVS建立连接:控制器与OVS交换机建立TCP连接,使用OpenFlow协议进行通信。
- 控制器下发流表规则:控制器向OVS下发流表规则,每条规则包含匹配条件和动作。
- 数据包匹配和处理:当数据包到达OVS时,OVS会根据流表规则逐一匹配数据包。它将数据包的头部字段与流表中的匹配条件进行比较,找到与数据包匹配的第一条规则。
- 执行动作:一旦找到匹配的规则,OVS会根据规则定义的动作来处理数据包。动作可能包括转发数据包到指定端口、丢弃数据包、修改数据包的字段等。
- 数据包转发:根据执行的动作,OVS将数据包转发到相应的目的地,实现网络通信和数据包的传输。
- 控制器维护流表:控制器可以动态地更新和维护流表规则,根据网络流量和策略需求调整规则,从而实现网络的灵活和优化。
OVS和Openflow的具体关系
OpenFlow是一个开放的通信协议规范,定义了控制器和交换机之间信息交互的格式与内容。
而OVS(Open vSwitch)是一种虚拟交换机软件,它实现了OpenFlow协议的相关功能,可以工作于OpenFlow环境中。
具体来说:
- OpenFlow协议规定了控制器下发流表的方式、交换机请求指令的方式等。
- OVS根据这一协议规范,实现了交换机端对应用流表进行数据面转发的功能。
- OVS也实现了接收控制器指令,上报请求等控制面功能。
- 通过支持OpenFlow协议,OVS可以集成到一个SDN环境中,由控制器集中进行流量管理。
所以,OpenFlow是一套协议和机制规范,OVS则是一种具体实现这套规范的软件交换机。两者关系是:
OpenFlow : 协议规范 :: OVS : 具体实现
OpenFlow是开源的用于管理交换机流表的协议,OpenFlow在OVS中的地位可以参考上面架构图,它是Controller和ovs-vswitched间的通信协议。需要注意的是,OpenFlow是一个独立的完整的流表协议,不依赖于OVS,OVS只是支持OpenFlow协议,有了支持,我们可以使用OpenFlow控制器来管理OVS中的流表,OpenFlow不仅仅支持虚拟交换机,某些硬件交换机也支持OpenFlow协议