ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、视频、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
本节描述ONOS内部如何表示其控制的基础设施。 ### 概述 为了管理网络基础设施,ONOS必须维护并跟踪关于网络基础设施的信息(拓扑,安装的流等),并向应用程序提供上述信息。更重要地,应用程序必须屏蔽协议的细节,即使网络状态信息是通过协议相关的方法收集的。 作为一种方案,ONOS维护协议无关(protocol-agnostic)和协议相关(protocol-specific)网络元素和状态表示。这种表示可以从一种类型转化为另一种类型。前者是内核层级(core tier)的结构体,称为模型对象(Model Objects),后者是特定provider的结构体。例如,`DeviceStore`将网络设备看作是一个普通设备(Device),`而OpenFlowDeviceProvider`将网络设备看作一个`OpenFlowSwitch`。这两种表示通过中间转换为一个`DeviceDescription`来连接provider和内核层。模型对象是ONOS暴露给其应用程序的。 另外,如果可能的话,某些自定义的富数据类型(rich data types)用于替换Java原语以避免歧义和混淆。例如,IP地址可由`IPAddress` 类描述,而不是一个`int`型变量。类似地,Mac地址有`MACAddress`类描述,而不是一个`byte[]`或者`long`型。本节剩余部分将聚焦于模型对象。 ### 模型对象类型 这些模型对象的接口定义和实现可以在多个程序包[`org.onlab.onos.net.*`]中看到。虽然不正式,隐含的对象分类也在这些包的组织结构中呈现出来。下面我们套路ONOS中主要的模型对象。 #### 网络拓扑 许多模型对象具有图形类似物,就像ONOS将网络表示为有向图。 * 设备(`device`):一种网络基础设施元素,例如,交换机,路由器,访问点(access-point),或者中间设备(middlebox)。设备包含接口/端口(interfaces/ports)集合,以及一个`DeviceId`。设备是网络图中的内部节点(interior vertices)。 * 端口(`port`):设备上的一种网络接口。一个端口和DeviceId对形成一个接入点(ConnectPoint),代表一个图的边(graph edge)的一端。 * 主机(`Host`):网络端实体,具有IP地址,Mac地址,VLAN ID,以及一个`ConnectPoint`。主机网络图的外部节点 (exterior vertices),也就是,叶子节点。 * 链路(`Link`):两个基础设施的设备之间的有向链路,或者说两个ConnectPoints之间的有向链路。链路是网络图中的内部边(interior edges)。 * 边缘链路(`edgeLink`):一个连接主机和设备的特定链路。边缘链路是网络图的外部边(exterior edges)。 * 路径(`Path`):相邻链路的列表,包括边缘链路。如果边缘链路出现在了路径中,那么它只能是一个外部链路(列表的起点或终点)。 * 拓扑(`topology`):一个表示网络的可遍历图的快照(snapshot)。基于该图的路径计算可以使用任意图遍历算法完成,例如,BFS,Dijkstra,或者Bellman-Ford。 #### 网络控制 在应用层,网络指令被表达成高级流规则,给定准则(匹配,match)和处理(动作,action)对。一个ONOS实例相对于某设备来说具有某种角色(role)。该角色决定了实例的指令是否能够应用到设备上。 * FlowRule:给定一个匹配和一个动作的高级流规则。动作可以是一个组合的动作。该抽象不同于OpenFlow中的流规则的概念,例如,流表和OF match-action对的数量。 * 意图Intent:一个高层次的意图,影响网络的配置或连接的网络流量的子集。它允许应用程序指明期望什么事情会发生,而不是指定如何让期望的事情发生。 * RoleValue:对于一个设备,一个ONOS实例的角色。 对于操作网络逻辑的深入讨论将在意图框架(Intent Framework)一节中讨论,而角色的解释将在集群协同(Cluster Coordination)一节详细讨论。 #### 网络报文 来自网络流量的报文,以及注入到网络中的报文,与OpenFlow PacketIn和PacketOut类似。 * `OutboundPacket`:一个合成报文的协议无关表示被发送到网络中。它包括有关在哪里发送这个数据包的信息。 * `InboundPacket`:由一个设备发送到控制器的协议无关表示的报文。在响应式报文处理中,它将PacketIns传递到providers和应用程序中,例如,主机跟踪(host tracking)和链路检测(link detection)。 #### 网络对象依赖 一些对象依赖于其它对象的存在,正如端口,不可能脱离设备而独自存在。类似地,链路也一样。如果没有端口,拓扑也不可能存在。因此,在ONOS的网络表示中,我们将设备看作一等(first-class)对象。