veriflow的一些相关翻译

VeriFlow是一个设计用于在软件定义网络(SDN)中实时检查网络不变量的系统。它通过在规则插入、修改或删除时动态验证其影响,实现了对网络错误的即时检测和预防。通过将网络划分为等价类并构建转发图,VeriFlow能够在数百微秒内执行严格检查,从而在不影响网络性能的情况下确保低延迟。该系统支持自定义不变量检查,能够防止诸如环路、次优路由和访问控制违规等问题,有助于提升网络的安全性和正确性。
摘要由CSDN通过智能技术生成

网络是复杂的,容易出错。检查网络配置文件和数据平面状态的现有工具以秒到小时为单位离线运行,并且不能在出现bug时检测或防止它们。随着网络状态的发展,是否有可能实时检查网络范围内的不变量?这里的关键挑战是在检查期间实现极低的延迟,从而不影响网络性能。
在本文中,我们提出了一个设计,VeriFlow,以实现这一目标。VeriFlow是一个介于软件定义的网络控制器和网络设备之间的一层,当每个转发规则被插入、修改或删除时,它动态地检查网络范围内不变的违规行为。VeriFlow支持对多个报头字段的分析,以及一个用于检查自定义不变量的API。基于与NOX OpenFlow控制器集成的原型实现,并由Mininet OpenFlow网络和Route Views跟踪数据驱动,我们发现verflow可以在每条规则插入或删除的数百微秒内执行严格的检查。
在现代网络中,数据包转发是一个复杂的过程,涉及到运行在成百上千种设备上的相互依赖的功能,这些设备包括来自不同厂商的路由器、交换机、防火墙等。因此,需要大量的努力来确保网络的正确性、安全性和容错性。但是,在实际应用中,网络状态经常会出现故障,如环路、次优路由、黑洞、访问控制违规等,导致服务不可用或容易受到攻击(如DDoS攻击)。软件定义网络(SDN)承诺通过一个开放的数据平面接口,通过逻辑上集中的网络可编程性来简化网络应用程序的开发,但由于软件的复杂性将会增加,漏洞可能仍然存在。此外,SDN允许多个应用程序甚至多个用户同时对同一个物理网络进行编程,这可能会导致规则冲突,从而改变一个或多个应用程序[25]的预期行为。一种解决方案是在部署之前严格检查网络软件或配置的bug。符号执行[12]可以通过探索所有可能的代码路径来捕获bug,但是对于大型软件来说通常是不容易处理的。配置文件分析[13,28]是有用的,但不能在路由器软件中找到错误,必须针对特定的配置语言和控制协议进行设计。此外,使用这些方法,想要确保网络正确性的运营商必须能够访问软件和配置,这在SDN网络中可能是不方便的,因为控制器可以由其他各方[25]操作。另一种方法是静态分析全网络数据平面状态的快照[9,10,17,19,27]。但是,前面的这些方法都是离线操作的,因此只有在bug发生后才能发现bug。本文研究的问题是:随着网络的发展,是否有可能实时检查全网的正确性?如果我们可以在转发行为生效前检查每个更改,我们就可以立即发出警报,甚至可以通过阻止违反重要不变式的更改来防止错误。例如,我们可以禁止违反访问控制策略或导致转发循环的更改。
verflow的第一项工作是跟踪每个转发状态更改事件。例如,在OpenFlow[21]等SDN中,由集中式控制器向网络设备下发转发规则,处理用户发起的流。VeriFlow必须拦截所有这些规则,并在它们到达网络之前验证它们。为了实现这一目标,VeriFlow被实现为控制器和网络之间的垫片层,并在任意方向监控所有通信。
对于每条规则插入/删除消息,VeriFlow必须以非常快的速度验证规则在网络上的效果。VeriFlow不能利用过去工作中使用的技术[9,17,19],因为这些技术以秒到小时的时间尺度进行操作。与以前的解决方案不同,我们不希望在每次更改时检查整个网络。我们分三步解决这个问题。首先,使用新规则和任何重叠的现有规则,我们将网络分割成数据包的一组等价类(ECs)(3.1)。每个EC是一组在整个网络中经历相同转发动作的数据包。直观地说,对网络的每一次更改通常只会影响非常少量的ECs(见5.1)。因此,我们找到可以被规则改变操作的ECs集合,并仅在这些类中验证网络不变量。第二,VeriFlow为每个修改后的EC构建单独的转发图,表示网络的转发行为(3.2)。第三,VeriFlow遍历这些图(或运行自定义的用户定义代码)来确定一个或多个不变式的状态(3.3)。下面的小节将详细描述这些步骤。图1显示了verflow在SDN中的位置和操作。
验证网络属性的一种方法是利用当前的数据平面状态建立整个网络的模型,并在该模型上运行查询[9,19]。但是,每次插入新的流规则时都要检查整个网络的状态是一种浪费,而且不能提供实时响应。相反,我们注意到大多数转发规则的改变只影响所有可能包的一小部分。例如,为目的IP字段插入最长前缀匹配规则,只会影响到该前缀的报文的转发。为了将验证活动限制在受影响的数据包集合上,我们根据新规则和与新规则重叠的现有规则将网络分割为一组等价类(ECs)。等价类的定义如下。定义(等价类):等价类(EC)是数据包的集合P,对于任何p1, p2 P和任何网络设备R,将整个数据包空间分割成单独的ECs允许VeriFlow在验证新插入的转发规则时发现问题时精确定位受影响的数据包集。让我们看一个例子。假设有一个OpenFlow交换机,有两条规则分别匹配目的地址前缀为11.1.0.0/16和12.1.0.0/16的报文。如果添加匹配目的地址前缀11.0.0.0/8的新规则,则根据规则优先级值[6],可能会影响11.1.0.0/16范围内的报文(前缀越长,优先级可能越低)。但是,新规则不会影响11.0.0.0/8范围以外的报文,例如12.1.0.0/16。因此,VeriFlow在分析网络属性时,只考虑新的规则(11.0.0.0/8)和现有的重叠规则(11.1.0.0/16)。这两个重叠的规则产生三个ECs(使用目的IP地址字段的下界和上界范围值表示):11.0.0.0到11.0.255.255,11.1.0.0到11.1.255.255,11.2.255.255到11.255.255.255。VeriFlow需要一个高效的数据结构来快速存储新的网络规则,找到重叠的规则,并计算受影响的ECs。为此,我们利用了受传统分组分类算法[26]启发的多维前缀树(trie)。
trie是存储关联数组的有序树数据结构。在我们的例子中,trie将转发规则匹配的数据包集与转发规则本身关联起来。trie中的每一层都对应于转发规则中的一个特定位(等价地,包头中的一个位)。我们的trie中的每个节点都有三个分支,对应于规则可以匹配的三个可能值:0、1和*(通配符)。try可以看作是由几个子try或维度组成的,每个子try或维度对应于一个包报头字段。我们在多维尝试中为OpenFlow 1.1.0.2支持的每个强制匹配和包报头字段维护一个子尝试(注意,我们的实现中的优化使用了在尝试中压缩的字段集
例如,代表IPv4目的地的子trie对应于trie中的32个级别。sub-tries之一(DL SRC在我们设计)出现在顶部,下一个字段年代sub-tries附着在叶子的第一,等等(图2)。特里结构年代的路径之一的根与叶最低的sub-tries因此代表的一组规则匹配的信息包。每个叶子存储匹配这组数据包的规则,以及它们所在的设备(图2)。
当应用程序生成新的转发规则时,我们在尝试中执行查找,逐个维度遍历它,以找到与新规则相交的所有规则。在每个维度上,我们通过使用特定维度的字段值只遍历新规则范围内的那些分支来缩小搜索区域。查找过程的结果是选择最底部维度的一组叶子,每个叶子都有一组转发规则。这些规则共同定义了一组可能受到传入转发规则影响的数据包(特别是它们对应的转发规则)。这个集合可以跨越多个ec。接下来,我们计算各个ECs,如图2所示。对于每个字段,我们会找到一组不相交的范围(下界和上界),这样就不会有规则分割其中的一个范围。然后,通过对每个字段的一个范围的特定选择来定义EC。这并不一定是ECs的最小集合;例如,图2中的ECs 2和ECs 4可以组合成一个EC。但该方法在实际应用中表现良好。3.2用转发图建模转发状态对于上一步计算的每个EC, VeriFlow都会生成一个转发图。每个这样的图都表示一个EC中的包如何通过网络转发。在图中,一个节点代表一个特定网络设备上的EC,有向边代表一个特定(EC,设备)对的转发决策。具体来说,一条边X Y表示,根据节点X的转发表,该EC中的包被转发到Y。为了构建每个EC的图,我们第二次遍历我们的尝试,以找到匹配来自该EC的包的设备和规则。需要第二次遍历来找到所有那些在第一次遍历中不需要计算受影响ECs的规则,但仍然会影响它们的转发行为。例如,对于指定10.0.0.0/8为目的前缀的新规则,现有的0.0.0.0/0规则将不会促进受影响ECs的生成,但可能会影响它们的转发行为,这取决于其优先级。给定EC不同字段的范围值,可以快速地从trie结构中查找匹配规则。在这里,VeriFlow只需要遍过那些具有匹配特定EC包规则的try的分支。
上面,我们描述了VeriFlow如何使用转发图建模网络的行为,仅为那些行为可能已经改变的等价类(ECs)构建转发图。接下来,我们使用这个模型回答查询(检查不变量)。verflow维护一个要检查的不变量列表。当EC被修改时,verflow检查每个(不变的,修改的EC)对。不变量被指定为一个验证函数,该函数将特定EC的转发图作为输入,执行任意计算,并可以触发产生的操作。VeriFlow公开了一个API(应用程序编程接口),其实现在4.3中描述,以便可以编写和插入新的不变量。
转发图在一定程度上是对网络转发行为的精确表示。因此,不变模可以检查关于网络行为的大量不同条件。例如
基本可达性:验证函数遍历转发图中的有向边(在我们的实现中使用深度优先搜索),以确定包是否将被发送到规则中指定的目的地址。无环路:验证函数遍历给定的EC转发图,检查它是否包含环路
一致性:假设两台(预先指定的)路由器R1和R2有相同的转发ing操作,验证函数遍历从R1和R2开始的转发图,以测试两种情况下数据包的命运是否相同。(任何差异都可能表明存在bug。)

进一步的例子包括探测黑洞数据包丢在哪里,确保多个vlan的隔离,验证访问控制策略,检查是否一个新的规则与现有的冲突规则,检查是否有电子商务改变下一个跃点由于插入/删除规则,确保数据包穿越防火墙,等等。对于什么不变量可以被可行地实现有两个关键的限制。首先,verflow的转发图构造必须包含必要的信息。例如,我们目前的VeriFlow实现没有包含对于某些性能不变量所必需的缓冲区大小的信息。(然而,并没有任何根本原因导致VeriFlow不能使用这种元数据进行扩充。)其次,不变检查必须以上述增量方式实现,在每一步中只考虑修改后的ECs。如果验证函数发现了一个被违反的不变量,它可以选择在VeriFlow中触发进一步的操作。两种明显的做法是,删除正在插入网络的规则,或安装规则但向运营商发出警报。例如,操作人员可以选择删除导致安全违规的规则(例如数据包泄漏到受保护的VLAN中),但只产生黑洞警报。由于验证函数是任意的代码,它们也可以采取其他操作,例如维护统计数据(例如,转发行为变化的速率)或写入日志。
3.4验证时间长VeriFlow将验证活动限制在新转发规则安装时受影响的网络区域内,从而实现实时响应。一般来说,这种方法的有效性将取决于许多因素,如验证功能的复杂性,网络的大小,数量的规则在网络、独特的ECs的数量由一个新的规则,头字段用于匹配数据包的数量由一个新的规则,等等。然而,也许总结验证时间最重要的因素是修改的ECs数量。正如我们后面的实验将显示的那样,VeriFlow的验证时间在这个数字中大致是线性的。换句话说,VeriFlow很难在一次操作中改变网络转发行为的大范围时实时验证不变量。当这种破坏性事件发生时,verflow可能需要在网络中安装新的规则,而无需等待验证,并并行运行验证过程。在有问题的规则进入网络之前,我们失去了阻止它们的能力,但我们注意到几个可以减轻问题的事实。首先,影响许多ECs的破坏性事件的最突出的例子是链接故障,在这种情况下VeriFlow无论如何都不能阻止修改进入网络。第二,在(最终)检测到问题时,VeriFlow仍然可以发出警报并从网络中删除有问题的规则。第三,在检查每个EC的不变量之前,受影响的EC的数量很大这一事实本身可能值得立即发出警报。最后,我们用真实转发规则更新轨迹(5)进行的实验表明,破坏性事件(即影响大量ECs的事件)非常罕见:在绝大多数情况下(约99%),受影响的ECs数量很少(小于10)。
我们公开了一组函数,可用于在c++中编写通用查询。下面是这些函数的列表以及所需的参数。getaffectedequivalencclasses:给定一个新规则,该函数计算受影响的ECs集合,并返回它们。它还从trie结构的最后一个维度返回一组子尝试。每个子尝试包含匹配属于其中一个受影响ECs的数据包的规则。这些信息可以用来建立这些ECs的转发图。这个函数接受以下参数。—规则:新插入的规则。-返回:受影响的ECs。—返回:表示最后维度的子尝试,以及与受影响ECs的数据包匹配的持有规则。GetForwardingGraph:该函数生成并返回特定EC的转发图。它接受以下参数。—等效类:一个EC,它的转发图将被计算。- TrieSet:子尝试表示最后一个维度,并持有与作为第一个参数提供的EC匹配的规则。-返回:对应的转发图
ProcessCurrentHop:这个函数允许用户以自定义的方式遍历转发图。给定一个位置和EC,它返回相应的下一跳。它通过计算由于我们的优化策略(4.2)而需要维护的排除的数据包集来处理多个更精细的数据包集的生成。由于这种优化,该函数有效地返回一组(下一跳,排除包集)元组,即转发图中标注的有向边。通过在转发图中的节点之间重复调用该函数,自定义不变量检查模块可以遍历转发图并对其结构进行任意计算。这个函数接受以下参数。—“转发图”:EC的转发图。—位置:当前EC所在的位置。—返回:(下一跳,排除包集)元组。让我们看一个示例,该示例展示了如何在实践中使用此API。网络运营商可能希望确保属于某一组的数据包总是能够通过防火墙设备。在添加/删除规则或连接/关闭事件期间,可能会违反此不变式。为了检查这个不变量,网络运营商可以使用上面的API扩展VeriFlow,合并一个定制的查询算法,该算法在检查的数据包集绕过防火墙设备时产生警报。事实上,网络操作员可以实现任何可以使用转发图中显示的信息进行回答的查询。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值