Open Virtex官网文档翻译参考以下
通过自己官方文档的阅读,和参考别人的翻译,加深自己的理解。
“渴望新知识,却一直处于皮毛”,深有同感,希望能不懈努力,做一个大神。
整篇文档阅读完暂时总结于以下几点:
1、首先有一个宏观的大概念,OVX逻辑抽象为三层(具体见本文档第二幅图),上层为租户自定义的虚拟网络(租户网络层),下层为对应的基础物理网络,中间为物理网络克隆层,对底层硬件的实例抽象。网络中元素如网络、交换机、端口、链路等,都有一个类与之对应,并根据前缀Physical和OVX用来区别是底层网络存在的还是OVX虚拟建立的。OVX在网络中的位置与交换机和控制器之间,南向通过openflow与物理交换机通信,相当于controller。北向与租户控制器通信。
2、组件的状态机制。网络元素从启动到正常运行会经历几个不同的状态,并且和其他元素相互依赖。如交换机实例关闭时,所拥有的端口和链路也会关闭。有INIT、INACTIVE、ACTIVE、STOPPED,四种状态。
FSM状态转换关系3、组件的一致性。OVX通过数据库存储运行过程中网络元素的信息,从而保证在下次开机时可以直接恢复。
4、OVX对交换机的实例化较为复杂。交换机分为PhysicalSwitch和OVXSwitch,PhysicalSwitch维护流表的表示,和转换OpenFlow消息的XID,同时PhysicalSwitch主动同步虚拟元素和它映射的物理元素的状态。OVXSwitch可以连接到多控制器,直接和用户网络需求相关,维护了虚拟流表和对应PacketIn和PacketOut的缓存映射关系,即buffer ID在实际交换机和OVX虚拟交换机中需要转换。OVXSwitch派生了两个子类:OVXSingSwitch和OVXBigSwitch。两者区别表现为一对一还是一对多的映射关系,前者表示虚拟网络与实际物理网络一对一,而后者表示一对多。
由上图可知,PhysicalSwitch和底层实际交换机之间为一对一映射,而租户网络到PhysicalSwitch可以一对一(OVXSingSwitch)也可以一对多(OVXBigSwitch),租户网络将psw2和psw3映射为一个BVS,而psw2和psw3之间的连接叫做SwitchRoute。
5、端口。端口属性从OpenFlow中继承,同样分为PhysicalPort和OVXPort,PhysicalPort维护两者之间的映射关系。
6、链路。链路具有方向性,双向链路使用一对links,用LinkPair类实现。链路有三种类型:Physical Link,OVXLink,SwitchRoute。前面两个很好理解,要注意一条OVXLink可以映射到一条或多条相邻的PhysicalLink。SwitchRoute是同一个OVXBigSwitch上两个OVXPorts的连接,是一条path,SwitchRoute定义了一条通过该OVXBigSwitch的路径,可以映射到一条或多条相邻的物理链路。被以下两种类型的端点定义(即会经过该两种端点)。
BVS ingress/egress port : OVXPorts visible to the tenant as ports on the switch
SwitchRoute endpoints : PhysicalPorts internal to the BVS at either ends of the chain of PhysicalLinks。
SwitchRoute endpoints 在BVS内部,对租户网络不可见,是PhysicalPorts。
SwitchRoute(OVXSwitch sw,OVXPort in,OVXPort out, int routeid, byte priority)
从函数可以看出,是一个OVX交换机(通常为OVXBigSwitch)之间的一条流量通路,可以指定优先级,即可以配置备份路径。
上图中,vlink1就对应了物理链路l2和l3,并将ps3隐藏,而vlink2对应l5,tanant1中OVX交换机都是OVXSingSwitch。右图vs2是OVXBigSwitch,对应了物理交换机ps2和ps3,vs2的两个OVXPorts之间的通路(包含了l3)就是一条SwitchRoute,由OVXPorts和PhysicalPorts组成。
7、Resilience。通过冗余配置实现网络中的弹性恢复。目前OVX可以配置OVXLinks和SwitchRoute多路径,通过指定优先级确定替换次序,OVX同样可以检测原来失效路径是否恢复,若优先级高则主动替换当前路径。
8、The event loop。OVX事件循环主要完成OpenFlow消息的处理,主要功能有以下三个:1、完成于物理交换机和租户控制器的OF握手;2、OF消息的许你还和去虚拟化;3、处理keep-alives消息。
9、网络拓扑发现和呈现(3.4节)。底层物理网络运行LLDP程序,用于发现拓扑,提出了fast和slow的两种端口类型,以及一些LLDP运行细节(不是很了解,需要查阅LLDP具体实现)。底层物理网络的信息如flow table、拓扑等,会保存到PhysicalSwitch中,通过定期轮询对应的物理交换机存储底层交换机数据。上层租户网络也会运行自己的LLDP程序,通过在虚拟域中运行LLDP可以大大减少物理网络LLDP运行开销。
OVX模拟了网络中包广播和接收过程,从而可以自定义拓扑结构,而不用依赖底层物理网络。
10、网络虚拟化。当消息从底层网络和租户网络之间交互时,就会出发虚拟化和去虚拟化过程。OVX中处理的主要是openflow消息,虚拟化和去虚拟化主要涉及以下三部分操作:1、修改源和目的网络地址;2、OVXSwitch/OVXPort与PhysicalSwitch/PhysicalPort之间的转换。3、丢弃来自或去往无效节点的信息。(实现用户隔离)
从以下三方面理解网络虚拟化的实现过程:
1)交换机表示的转换。
OVXSwitch到PhysicalSwitch转换,OVXSwitch拦截从租户控制器发出的消息,并查询要转换的PhysicalSwitch,可以通过以下两种方式映射:1、通过入口OVXPort,即端口之间的映射可以确定对应交换机之间的映射,对于OVXBigSwitch,没有ingress port信息的消息会被直接忽略,换句话说,该类型交换机只能通过端口映射确定对应的PhysicalSwitch。2、通过OVXMap,对于OVXSingleSwitch,可通过一对一关系直接查找对应的PhysicalSwitch。
PhysicalSwitch到OVXSwitch上行数据映射,首先,Host会根据自己的mac地址查找映射找到自己所属的tenant ID,通过使某一字段具有相同值来区分不同消息中属于同一事务的消息。也涉及到OpenFlow消息中具体字段的重写。
2)OpenFlow字段转换。
OF消息虚拟化和去虚拟化过程中转换的字段主要有Cookies、buffer ID、XID。
为什么需要转换:没有OVX作为中间层时,交换机和控制器之间的信道是唯一的,信息之间不会相互干扰,只要确保一个datapath内XID,buffer ID和cookies是唯一即可。但是,引入虚拟化,来自底层的OF消息在OVX层处理并传入控制器,当由多个物理交换机对应一个OVXSwitch时就会带来混乱,需要重新编号确保唯一性。比如,Reply消息只能根据XID值确定到底属于哪个Request,由于一个OVXBigSwitch对应多个物理交换机,交换机之间可能会引起冲突。但具体实现细节文档中并没有涉及。
完成上述三者转换主要在XidTranslator、OVXFlowTable和OVXSwitch的bufferMap中具体实现。
OVXFlowTable以Map形式存储新的流表项,该map以OVX生成的cookies作为key,待补充
BufferMap,一对packetIn和packetOut中要使用同一个buffer ID,在虚拟化和去虚拟化过程中需要进行转换。
3)地址虚拟化
由于地址虚拟化和用户隔离,每个租户网络可以完全使用地址空间,即使与另一租户网络有重叠,也可以相互不影响。在地址转换中,将物理交换机分为边缘交换机和核心交换机,前者指有host连接,负责完成OVXIPAddress和PhysicalIPAddress之间的地址转换;后者指没有主机相连,和其他交换机相连,主要负责转发和匹配工作。
注意的是,地址转换可以完全通过添加相应流表来完成,通过控制器下发FlowMods消息。过程简单概述为:host给边缘交换机发送消息,生成packetIn给租户控制器,根据已有的网络策略,下发FlowMod消息,生成流表项,完成地址转换和相应转发。到达ps3边缘交换机时,再转换为原来的物理地址,发送给h2。
11、状态同步
1、
As part of this function, OVX acts as a (de)multiplexer for OpenFlow messages that flow between the tenant control planes and the infrastructure. Notably, this process relies on the assumption that each network host belongs to just one virtual network. Host hardware addresses play a key role in associating tenants withtheir network traffic.
网络中的每个主机只能属于一个虚拟租户网络,看似很明显,但还是有点疑惑。
2、在初次学习中,不明白XID translator中XID是什么,XID是openflow中数据包的编号,在openflow消息的头部中包含。用来确定一个OF消息的唯一性,同时,当需要reply时,XID用来确定reply的作用对象。
3、OVXNetwork为该租户网络的每个组件维护一个唯一的标识,以及主机之间流量的标识,维护这种标识具体作用是什么?
OVXMap holds a collection of Java Maps keyed on various Network components or their identifiers。
OVXMap包含一系列以网络组件或其标识为key值得java映射集合。即在进行网络虚拟化时,要将底层网络元素虚拟为OVX租户网络元素,每个租户网络元素对应一个标识符,生成存储映射关系的映射表时该标识符被用到。
后记
SDN路漫漫,刚涉入这个领域不足半年,很多理解难免会有很多不妥之处,希望能相互交流,相互学习~ QQ 441711184
袁其杰,北京邮电大学IsWIT智慧无线移动信息技术研究中心研究生,2016.9月至今
网友评论