一种分布式数据平面验证方法

文档序号:31496896发布日期:2022-09-14 07:26阅读:72来源:国知局
1.本公开属于网络安全
技术领域
:,尤其涉及一种分布式数据平面验证方法和系统。
背景技术
::2.网络错误,如循环转发、网络黑洞和路径点违反,是各种问题的结果(例如,软件错误、硬件错误、协议错误配置和监督疏忽)。它们在所有类型的网络(如企业网络、广域网和数据中心网络)中都普遍存在,并可能产生灾难性的经济和社会后果。如何有效地发现这样的错误是网络领域面临的一个基本挑战。查找网络错误的一个主要方法是网络验证,它会自动检查网络设备的控制平面和数据平面来查找错误。3.本发明着重研究了数据平面验证,因为它可以通过检查网络设备上的实际数据平面来发现更广泛的网络错误(如交换机操作系统错误)。人们在很早就开始对数据平面验证开始了研究。早期的数据平面验证工具侧重于验证网络的完整数据平面的快照。最近的研究集中在增量验证(即验证转发规则更新)。据研究,最先进的数据平面验证工具apkeep可以实现每次规则更新只需要数十微秒的增量验证时间。4.尽管在加速数据平面验证方面取得了重大进展,但大多数现有工具都采用了集中式的体系结构,这种架构缺乏在大型网络中部署的可扩展性。具体来说,集中式架构中,服务器从每个网络设备收集数据平面并验证需求,这种设计需要一个管理网络来为服务器和网络设备提供可靠的连接,服务器或者网络设备难以去自己构建这样的连接。此外,服务器也是数据平面验证工具的性能瓶颈和单一故障点。为了扩大数据平面验证的规模,libra将数据平面划分为不相交的数据包空间,并使用map-reduce来实现并行验证;微软azure为设备部署了一个本地验证系统来验证它自己的数据平面。然而,由于上述局限性,前者仍然是一种集中式设计,后者只能验证最短路径的可用性和容错性的特殊要求。技术实现要素:5.为了解决上述技术问题中的至少一个,本公开提供了一种分布式数据平面验证方法和系统。6.根据本公开的一个方面,提供一种分布式数据平面验证方法,包括:7.验证规划器接收数据平面验证需求、网络拓扑及设备-ip前缀映射信息;8.验证规划器基于所述数据平面验证需求和网络拓扑结构,生成有向无环网络图dvnet;9.验证规划器将计数任务进行分解,以使得网络中各个设备获得分解后的计数任务;以及,10.网络中的各个设备接收分解后的计数任务,通过设备上的验证器进行计数,以获得数据平面验证结果。11.根据本公开至少一个实施方式的分布式数据平面验证方法,所述数据平面验证需求包括:12.数据包空间,所述数据包空间表示所有参与验证的数据包集合;13.入口集合,所述入口集合表示验证路径上的起始端口的集合;14.路径集合,所述路径集合表示完成验证需求所经过的传输路径的网络设备集合;以及,15.需求上下文,所述需求上下文表示通过更多的预设规则以满足对数据平面验证需求的约束条件,满足包括可达性、无循环、无冗余交付或路径轨迹完整性验证中的至少一种;16.其中,数据包空间包括不同网络架构定义的数据包空间,包括tcip/ip五元组、tcp/ip五层模型、osi七层模型以及可编程交换机所自定义的数据包空间中的至少一种;17.优选的,所述数据平面验证需求通过声明性语言将数据平面验证需求规范化表示;18.优选的,所述数据平面验证需求可以为多个数据平面验证需求构成的复合需求。19.根据本公开至少一个实施方式的分布式数据平面验证方法,基于所述数据平面验证需求和网络拓扑结构,生成有向无环网络图dvnet,包括:20.将正则表达式表示的数据平面验证需求转换为有限自动机;21.将所述有限自动机与网络拓扑相乘,获得乘积图g0=(v0,e0),其中,v0表示乘积图g0中的节点集合,e0表示乘积图g0中具有有向连接关系的边集合;以及,22.对乘积图执行状态最小化操作以删除冗余节点,获得有向无环网络图dvnet;23.优选的,所述dvnet中的节点与设备的映射关系包括一对一、多对一,其中,所述多对一的映射关系表示待传输的数据包可通过不同的路径到达同一目的节点,所述不同路径中包含相同的设备时,所述相同的设备在不同路径用不同的标识。24.根据本公开至少一个实施方式的分布式数据平面验证方法,网络中的各个设备接收分解后的计数任务,通过设备上的验证器执行计数任务,包括:25.各个设备上的验证器基于dv协议执行计数任务,包括:26.各个设备上的验证器进行初始化;27.各个设备沿着dvnet的反方向路径,在各个具有邻接关系的dvnet节点之间逐一传播更新消息;28.接收到更新消息的设备基于更新消息进行计数;以及,29.将设备中的入口设备最终收到的完整计数结果作为验证结果;30.其中,所述dv协议指用于规范在设备上的验证器与邻居设备之间消息传输及共享计数结果的方法。31.根据本公开至少一个实施方式的分布式数据平面验证方法,各个设备的验证器进行初始化,包括:32.各个验证器读取设备的数据平面,所述数据平面构建本地等价类表,所述本地等价类表包含的信息有数据包空间和动作;33.各个验证器计算不同的数据包空间从dvnet中的当前节点到达目的节点的数据包的副本数目,并保存到信息计数库中;以及,34.各个验证器将计算结果增量地发送到邻接设备的验证器;35.其中,所述数据包空间表示从dvnet中的当前节点到目的节点的待处理数据包集合;36.其中,所述动作为对于数据包的转发行为,包括所有类型和任意一个类型,所述所有类型和所述任意一个类型包含网络设备在多个下一跳之间的任播转发、网络设备在多个下一跳之间的组播转发、openflow标准中定义的与p4(programmingprotocol-independentpacketprocessors)标准中定义的转发行为中的至少一种;37.其中,计数信息库包括:38.cibin(v),表示dvnet中当前节点的下游节点v的计数信息库,用于存储下游节点的v的数据包空间和计数值;39.loccib(u),表示dvnet中当前节点u的本地计数信息库,用于存储dvnet中当前节点u的数据包空间、计数值、动作及因果关系;40.cibout(u),表示dvnet中当前节点u即将发送给节点u的上游节点的计数信息库,用于存储dvnet中当前节点u接收到更新消息后所产生的新的数据包空间和计数值、以待撤回的数据包空间。41.根据本公开至少一个实施方式的分布式数据平面验证方法,所述更新消息包括的信息有:42.预期连接:预期连接字段是一个指示消息的元组(u,v),表示更新消息的传输方向为从dvnet节点u到dvnet节点v,用于计算dvnet中沿该连接传播的结果;43.撤回数据包空间:撤回数据包空间字段表示待删除的数据包空间列表,所述待删除的数据包空间的计数值已更新;以及,44.新增的计数结果:新增的计数结果字段表示包含最新计数的数据包空间列表;45.优选的,所述更新消息还可以包括更新消息不变量,所述更新消息不变量,指的是对于每个更新消息,撤回数据包空间的并集等于新增的计数结果中数据包空间的并集,所述更新消息不变量确保各个dvnet节点始终从其下游邻居节点接收最新的、完整的计数结果。46.根据本公开至少一个实施方式的分布式数据平面验证方法,接收到更新消息的设备基于更新消息进行计数,包括:更新cibin(v)、更新loccib(u)及更新cibout(u),47.其中,更新cibin(v),包括:48.u.dev通过删除cibin(v)中属于需要撤回数据包空间的各个条目和将新增的计数结果全部插入cibin(v)以更新cibin(v);49.其中,更新loccib(u),包括:50.首先,u.dev首先找到所有需要更新的条目,所述需要更新的条目的判断方法包括:如果loccib(u)中的一个条目的因果关系字段中包含v中的属于此消息的撤回数据包空间的一个数据包空间,则需要更新这一条目;51.其次,逐个更新所有所述需要更新的条目的计数结果,包括:52.对于每一对需要更新的条目r和从新收到的计数结果中得到的条目r0,u.dev计算它们的数据包空间的交集s;53.如果交集s不为空,则在loccib(u)中为数据包空间s创建一个新的条目rnew,其中,rnew的计数结果的计算方法包括:54.在rnew.count和dvnet节点v之前的计数结果的因果关系之间执行或的反操作,以消除在最后一步的结果和r0.count之间执行或以获得最新的计数结果的影响,其中,表示计数向量第一运算,表示计数向量第二运算;55.在最后一步的结果和r0.count之间执行或以获得最新的计数结果;56.rnew转发行为与需要更新的条目r的转发行为相同;57.rnew的因果关系继承了r的因果关系,元组(v,r0.predicate,r0.count)取代了v以前的记录;58.计算并插入所有新条目到loccib(u)后完成更新,从loccib(u)中删除所有需要更新的条目;59.其中,更新cibout(u),包括:60.从loccib(u)中删除的所有条目的数据包空间都放在撤回的数据包空间中;以及,61.对于所有cibout(u)的插入条目,根据计数值是否相同来合并,当计数值相同时进行合并,并将合并后的条目放入新增的计数结果中,从而取代被合并的数据包空间所在的条目;62.其中,各个表达式表示的含义如下:63..predicate:表示设备某一端口的待转发数据包的数据包空间;64..count:表示计数值;65.u:表示dvnet中当前节点标识;66.v:表示dvnet中当前节点的上游节点标识;67..dev:表示dvnet中当前节点的设备标识;68.cibin(v):表示dvnet中当前节点的下游节点v的计数信息库,用于存储下游节点的v的数据包空间和计数值;69.loccib(u):表示dvnet中当前节点u的本地节点的计数信息库,用于存储dvnet中当前节点u的数据包空间、计数值、动作及因果关系;70.cibout(u):表示dvnet中当前节点u即将发送给节点u的上游节点的计数信息库,用于存储dvnet中当前节点u接收到更新消息后所产生的数据包空间和计数值、及待撤回的数据包空间。71.根据本公开至少一个实施方式的分布式数据平面验证方法,还包括:如果设备有数据平面更新时,基于dv协议通过处理更新消息的方式更新数据平面,包括:72.在loccib(u)中新插入的条目,其中条目的计数值是通过第一计数向量运算或第二计数向量运算并读取不同cibin(v)中的相关条目计算,所述相关条目表示cibin(v)中的存在新插入条目的因果关系中的条目;以及,73.在cibout(u)中,只有新增的计数条目和更新后具有新计数的数据包空间将作为撤回数据包空间;74.其中,所述数据平面更新包括规则插入/删除或物理端口的激活/失活。75.根据本公开至少一个实施方式的分布式数据平面验证方法,还包括:76.在当前设备处理完更新消息后,在发送新的更新消息之前,检查是否仍然有未处理的更新连接的更新消息;77.如果有检测到未处理的更新连接的更新消息,当前设备将继续处理,直到更新消息处理完为止;78.在最后一个更新消息周期中发送当前节点的最新的cibout(u);以及,79.基于dvnet计数单调性,给定一个具有上下文存在计数结果值的需求,当前节点u完成计算cu时:80.如果计数结果值大于等于n/计数结果值小于等于n时:81.当前节点u只需要向dvnet中的上游邻居节点发送cu当中的最小元素/最大元素;82.如果计数结果值为等于n时:83.如果cu只有一个元素,就只向当前节点u的上游节点发这一个元素;84.如果cu有大于等于两个元素,就向当前节点u的上游节点发cu中最小的两个元素;85.对于具有上下文等价的需求,当前节点u的最小计数信息是一个空集,使分布式验证成为局部验证,优选的,节点u甚至不需要计算cu,节点u检查u.dev是否转发了在需求中指定的任何数据包到dvnet中u的下游邻居的所有设备,如果没有,则表示当前网络状态违反了待验证的需求,u.dev生成异常提示信息;86.其中,各个表达式含义如下:87.cibout(u):表示dvnet中当前节点u即将发送给节点u的上游节点的计数信息库,用于存储dvnet中当前节点u接收到更新消息后所产生的新的数据包空间和计数值、及待撤回的数据包空间;88.cu:表示当前节点u的计数向量结果;89.dvnet的计数单调性的含义如下:假设两个向量c1、c2,它们的元素都是非负的;给定任意元素x∈c1和y∈c2及相应的元素必存在z≥y和z≥z;给定任何元素x∈c1和相应的元素必存在z≥x;90.u.dev:表示dvnet中当前节点的设备标识。91.根据本公开的又一个方面,提供一种分布式数据平面验证系统,包括:92.验证规划器,接收数据平面验证需求、网络拓扑及设备-ip前缀映射信息,基于所述数据平面验证需求和网络拓扑结构,生成有向无环网络图dvnet,计数任务进行分解,以使得网络中各个设备获得分解后的计数任务;以及,93.验证器,多个,分布于网络中的各个设备上,用于接收分解后的计数任务并执行计数任务,通过计数结果获得数据平面验证结果,所述计数结果为设备中的入口设备最终收到的完整计数结果。附图说明94.附图示出了本公开的示例性实施方式,并与其说明一起用于解释本公开的原理,其中包括了这些附图以提供对本公开的进一步理解,并且附图包括在本说明书中并构成本说明书的一部分。95.图1是根据本公开的一个实施方式的分布式数据平面验证方法流程示意图。96.图2是根据本公开的一个实施方式的需求规范语言抽象语法示意图。97.图3是根据本公开的一个实施方式的正则表达式转换为有限自动机方法示意图。98.图4是根据本公开的一个实施方式的分布式数据平面验证系统结构示意图。99.图5是根据本发明的一个实施方式的dv协议消息存储结构示意图。100.图6是dv协议消息处理方法示意图。101.图7是分布式数据平面验证方法工作流程示意图。102.图8是根据本发明的实施方式的数据平面验证方法的冷启动实验效果对比示意图。103.图9是根据本公开的一个实施方式的分布式数据平面验证方法的增量验证时间对比示意图。104.图10(a)是根据本公开的一个实施方式的分布式数据验证方法对内存开销对比示意图。105.图10(b)是根据本公开的一个实施方式的分布式数据验证方法对带宽开销对比示意图。106.图11是本发明提供的对于平行宇宙概念解释示意图。具体实施方式107.下面结合附图和实施方式对本公开作进一步的详细说明。可以理解的是,此处所描述的具体实施方式仅用于解释相关内容,而非对本公开的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本公开相关的部分。108.需要说明的是,在不冲突的情况下,本公开中的实施方式及实施方式中的特征可以相互组合。下面将参考附图并结合实施方式来详细说明本公开的技术方案。109.除非另有说明,否则示出的示例性实施方式/实施例将被理解为提供可以在实践中实施本公开的技术构思的一些方式的各种细节的示例性特征。因此,除非另有说明,否则在不脱离本公开的技术构思的情况下,各种实施方式/实施例的特征可以另外地组合、分离、互换和/或重新布置。110.在附图中使用交叉影线和/或阴影通常用于使相邻部件之间的边界变得清晰。如此,除非说明,否则交叉影线或阴影的存在与否均不传达或表示对部件的具体材料、材料性质、尺寸、比例、示出的部件之间的共性和/或部件的任何其它特性、属性、性质等的任何偏好或者要求。此外,在附图中,为了清楚和/或描述性的目的,可以夸大部件的尺寸和相对尺寸。当可以不同地实施示例性实施例时,可以以不同于所描述的顺序来执行具体的工艺顺序。例如,可以基本同时执行或者以与所描述的顺序相反的顺序执行两个连续描述的工艺。此外,同样的附图标记表示同样的部件。111.当一个部件被称作“在”另一部件“上”或“之上”、“连接到”或“结合到”另一部件时,该部件可以直接在所述另一部件上、直接连接到或直接结合到所述另一部件,或者可以存在中间部件。然而,当部件被称作“直接在”另一部件“上“、“直接连接到”或“直接结合到”另一部件时,不存在中间部件。为此,术语“连接”可以指物理连接、电气连接等,并且具有或不具有中间部件。112.本发明使用的术语是为了描述具体实施例的目的,而不意图是限制性的。如这里所使用的,除非上下文另外清楚地指出,否则单数形式“一个(种、者)”和“所述(该)”也意图包括复数形式。此外,当在本说明书中使用术语“包含”和/或“包括”以及它们的变型时,说明存在所陈述的特征、整体、步骤、操作、部件、组件和/或它们的组,但不排除存在或附加一个或更多个其它特征、整体、步骤、操作、部件、组件和/或它们的组。还要注意的是,如这里使用的,术语“基本上”、“大约”和其它类似的术语被用作近似术语而不用作程度术语,如此,它们被用来解释本领域普通技术人员将认识到的测量值、计算值和/或提供的值的固有偏差。113.图1是根据本公开的一个实施方式的分布式数据平面验证方法流程示意图。114.如图1所示,分布式数据平面验证方法s100,包括:115.s102:验证规划器接收数据平面验证需求、网络拓扑及设备-ip前缀映射信息;116.s104:验证规划器基于数据平面验证需求和网络拓扑结构,生成有向无环网络图dvnet;117.s106:验证规划器将计数任务进行分解,以使得网络中各个设备获得分解后的计数任务;以及,118.s108:网络中的各个设备接收分解后的计数任务,通过设备上的验证器进行计数,以获得数据平面验证结果。119.其中,数据平面验证需求包括:120.数据包空间,数据包空间表示所有参与验证的数据包集合;121.入口集合,入口集合表示验证路径上的起始端口的集合;122.路径集合,路径集合表示完成验证需求所经过的传输路径的网络设备集合;以及,123.需求上下文,需求上下文表示通过更多的预设规则以满足对数据平面验证需求的约束条件,满足包括可达性、无循环、无冗余交付或路径轨迹完整性验证中的至少一种;124.优选的,数据平面验证需求通过声明性语言将数据平面验证需求规范化表示;125.优选的,数据平面验证需求可以为多个数据平面验证需求构成的复合需求。126.其中,数据包空间(本发明的分布式数据平面验证方法中涉及的数据包空间)包括tcp/ip五元组所定义的数据包空间和tcp/ip五层模型与osi(opensysteminterconnect简称osi)七层模型中的数据链路层、网络层和传输层所涉及的数据包空间,甚至除了上述传统的数据包空间外,还包括可编程交换机所自定义的数据包空间等。其中,tcp/ip的五元组是指源ip地址,源端口,目的ip地址,目的端口和传输层协议。传输控制协议(tcp,transmissioncontrolprotocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。127.其中,基于数据平面验证需求和网络拓扑结构,生成有向无环网络图dvnet,包括:128.将正则表达式表示的数据平面验证需求转换为有限自动机;129.将有限自动机与网络拓扑相乘,获得乘积图g0=(v0,e0),其中,v0表示乘积图g0中的节点集合,e0表示乘积图g0中具有有向连接关系的边集合;以及,130.对乘积图执行状态最小化操作以删除冗余节点,获得有向无环网络图dvnet;131.优选的,dvnet中的节点与设备的映射关系包括一对一、多对一,其中,多对一的映射关系表示待传输的数据包可通过不同的路径达到同一目的节点,不同路径中包含相同的设备时,相同的设备在不同路径用不同的标识。132.其中,网络中的各个设备接收分解后的计数任务,通过设备上的验证器执行计数任务,包括:133.各个设备上的验证器基于dv协议执行计数任务,包括:134.各个设备上的验证器进行初始化;135.各个设备沿着dvnet的反方向路径,在各个具有邻接关系的dvnet节点之间逐一传播更新消息;136.接收到更新消息的设备基于更新消息进行计数;以及,137.将设备中的入口设备最终收到的完整计数结果作为验证结果;138.其中,dv协议指用于规范在设备上的验证器与邻居设备之间消息传输及共享计数结果的方法。139.其中,各个设备的验证器进行初始化,包括:140.各个验证器读取设备的数据平面,数据平面构建本地等价类表,本地等价类表包含的信息有数据包空间和动作;141.各个验证器计算不同的数据包空间从dvnet中的当前节点到达目的节点的数据包的副本数目,并保存到信息计数库中;以及,142.各个验证器将计算结果增量地发送到邻接设备的验证器;143.其中,数据包空间表示从dvnet中的当前节点到目的节点的待处理数据包集合(例如:当前设备假设是a,它的数据平面fib有若干条rule,这些rule会规定哪些数据包从设备a的哪个端口转发出去,如果转发端口相同,即这些数据包的转发行为是一样的,那这些数据包就归为一个等价类;以上构成这个等价类的所有数据包就是具备了一种性质:都从某个端口转发出去,那么这些数据包就会构成一个集合,可以理解为空间,这就是这里的数据包空间。而“从某个端口转发出去”就是本地等价类的转发行为);144.其中,动作为对于数据包的转发行为,即“所有”类型与“任意一个”类型,所述“所有”类型和所述“任意一个”类型包含网络设备在多个下一跳之间的任播转发、网络设备在多个下一跳之间的组播转发、openflow标准中定义的与p4(programmingprotocol-independentpacketprocessors)标准中定义的转发行为中的至少一种;“所有”类型的具体含义:对于数据包p,p在具有多个下一跳的设备上会被同时转发到多个下一跳。在只具有一个下一跳的设备上则只被转发到一个下一跳。“任意一个”类型的具体含义:对于数据包p,p被转发到具有多个下一跳的设备的多个下一跳中的一个,此时p就会产生多个共存路径集合,即多个平行宇宙。在只具有一个下一跳的设备上则只被转发到一个下一跳。此时p只会产生一个共存路径集合,即一个平行宇宙。145.其中,计数信息库包括:146.cibin(v),表示dvnet中当前节点的下游节点v的计数信息库,用于存储下游节点的v的数据包空间和计数值;147.loccib(u),表示dvnet中当前节点u的本地计数信息库,用于存储dvnet中当前节点u的数据包空间、计数值、动作及因果关系;148.cibout(u),表示dvnet中当前节点u即将发送给节点u的上游节点的计数信息库,用于存储dvnet中当前节点u接收到更新消息后所产生的新的数据包空间和计数值、以待撤回的数据包空间。149.其中,数据包的副本数目指的是,在网络中,数据包传输到某一个设备的时候,在检查无误的去情况下,该设备会复制该数据包,转发给一个或多个设备,这些复制后的包最终可能都会到达目的节点,这里的包数目的copies,实际上就是最终该节点收到的包的副本的数目。150.其中,更新消息包括的信息有:151.预期连接:预期连接字段是一个指示消息的元组(u,v),表示更新消息的传输方向为从dvnet节点u到dvnet节点v,用于计算dvnet中沿该连接传播的结果;152.撤回数据包空间:撤回数据包空间字段表示待删除的数据包空间列表,待删除的数据包空间的计数值已更新;以及,153.新增的计数结果:新增的计数结果字段表示包含最新计数的数据包空间列表;154.优选的,更新消息还可以包括更新消息不变量,更新消息不变量,指的是对于每个更新消息,撤回数据包空间的并集等于新增的计数结果中数据包空间的并集,更新消息不变量确保各个dvnet节点始终从其下游邻居节点接收最新的、完整的计数结果。155.其中,接收到更新消息的设备基于更新消息进行计数,包括:更新cibin(v)、更新loccib(u)及更新cibout(u),156.其中,更新cibin(v),包括:157.u.dev通过删除cibin(v)中属于需要撤回数据包空间的各个条目和将新增的计数结果全部插入cibin(v)以更新cibin(v);158.其中,更新loccib(u),包括:159.首先,u.dev首先找到所有需要更新的条目,需要更新的条目的判断方法包括:如果loccib(u)中的一个条目的因果关系字段中包含v中的属于此消息的撤回数据包空间的一个数据包空间,则需要更新这一条目;160.其次,逐个更新所有需要更新的条目的计数结果,包括:161.对于每一对需要更新的条目r和从新收到的计数结果中得到的条目r0,u.dev计算它们的数据包空间的交集s;162.如果交集s不为空,则在loccib(u)中为数据包空间s创建一个新的条目rnew,其中,rnew的计数结果的计算方法包括:163.在rnew.count和dvnet节点v之前的计数结果的因果关系之间执行或的反操作,以消除在最后一步的结果和r0.count之间执行或以获得最新的计数结果的影响,其中,表示计数向量第一运算,表示计数向量第二运算;164.在最后一步的结果和r0.count之间执行或以获得最新的计数结果;165.rnew转发行为与需要更新的条目r的转发行为相同;166.rnew的因果关系继承了r的因果关系,元组(v,r0.predicate,r0.count)取代了v以前的记录;167.计算并插入所有新条目到loccib(u)后完成更新,从loccib(u)中删除所有需要更新的条目;168.其中,更新cibout(u),包括:169.从loccib(u)中删除的所有条目的数据包空间都放在撤回的数据包空间中;以及,170.对于所有cibout(u)的插入条目,根据计数值是否相同来合并,当计数值相同时进行合并,并将合并后的条目放入新增的计数结果中,从而取代被合并的数据包空间所在的条目;171.其中,各个表达式表示的含义如下:172..predicate:表示设备某一端口的待转发数据包的数据包空间;173..count:表示计数值;174.u:表示dvnet中当前节点标识;175.v:表示dvnet中当前节点的上游节点标识;176..dev:表示dvnet中当前节点的设备标识;177.cibin(v):表示dvnet中当前节点的下游节点v的计数信息库,用于存储下游节点的v的数据包空间和计数值;178.loccib(u):表示dvnet中当前节点u的本地节点的计数信息库,用于存储dvnet中当前节点u的数据包空间、计数值、动作及因果关系;179.cibout(u):表示dvnet中当前节点u即将发送给节点u的上游节点的计数信息库,用于存储dvnet中当前节点u接收到更新消息后所产生的数据包空间和计数值、及待撤回的数据包空间。180.其中,对于计数向量第一运算和计数向量第二运算的计算过程如下:181.计数向量第一运算举例:其中ci,cj都是计数向量,完成这个操作后去重,最终得到的结果是元素值没有重复的向量,例如:182.[1,2][3,4]=[1+3,1+4,2+3,2+4]=[4,5,5,6](这个是这个运算做完后的结果)=[4,5,6],这个是节点设备对某一个predicate(数据包空间)的最终计数结果。[0183]计数向量第二运算举例:例如:[1,2,3]⊕[3,4,5]得到的结果是[1,2,3,3,4,5],之后去重,得到[1,2,3,4,5]作为某一个predicate(数据包空间)的计数值。需要注意的是,当某个设备的某一条转发规则的动作集合中存在的下一跳并未有对应的节点存在于dvnet中时,该设备对应的节点将把该下一跳对应的节点的计数值设为0,并参与第二运算。[0184]其中,还包括:如果设备有数据平面更新时,基于dv协议通过处理更新消息的方式更新数据平面,包括:[0185]在loccib(u)中新插入的条目,其中条目的计数值是通过第一计数向量运算或第二计数向量运算并读取不同cibin(v)中的相关条目计算,相关条目表示cibin(v)中的存在新插入条目的因果关系中的条目;以及,[0186]在cibout(u)中,只有新增的计数条目和更新后具有新计数的数据包空间将作为撤回数据包空间;[0187]其中,数据平面更新包括规则插入/删除或物理端口的激活/失活。[0188]其中,还包括:[0189]在当前设备处理完更新消息后,在发送新的更新消息之前,检查是否仍然有未处理的更新连接的更新消息;[0190]如果有检测到未处理的更新连接的更新消息,当前设备将继续处理,直到更新消息处理完为止;[0191]在最后一个更新消息周期中发送当前节点的最新的cibout(u);以及,[0192]基于dvnet计数单调性,给定一个具有上下文存在计数结果值的需求,当前节点u完成计算cu时:[0193]如果计数结果值大于等于n/计数结果值小于等于n时:[0194]当前节点u只需要向dvnet中的上游邻居节点发送cu当中的最小元素/最大元素;[0195]如果计数结果值为等于n时:[0196]如果cu只有一个元素,就只向当前节点u的上游节点发这一个元素;[0197]如果cu有大于等于两个元素,就向当前节点u的上游节点发cu中最小的两个元素;[0198]对于具有上下文等价的需求,当前节点u的最小计数信息是一个空集,使分布式验证成为局部验证,优选的,节点u甚至不需要计算cu,节点u检查u.dev是否转发了在需求中指定的任何数据包到dvnet中u的下游邻居的所有设备,如果没有,则表示当前网络状态违反了待验证的需求,u.dev生成异常提示信息;[0199]其中,各个表达式含义如下:[0200]cibout(u):表示dvnet中当前节点u即将发送给节点u的上游节点的计数信息库,用于存储dvnet中当前节点u接收到更新消息后所产生的新的数据包空间和计数值、及待撤回的数据包空间;[0201]cu:表示当前节点u的计数向量结果;[0202]dvnet的计数单调性的含义如下:假设两个向量c1、c2,它们的元素都是非负的;给定任意元素x∈c1和y∈c2及相应的元素必存在z≥y和z≥z;给定任何元素x∈c1和相应的元素必存在z≥x;[0203]u.dev:表示dvnet中当前节点的设备标识。[0204]图2是根据本公开的一个实施方式的需求规范语言抽象语法示意图。[0205]如图2所示,需求规范语言抽象语法,是一种声明性语言。其中,每一个需求req由(数据包空间packet_space,入口集合ingress_set,路径集合path_set,需求上下文req_context)一个元组所表示。当packet_space中每个数据包从入口集合ingress_set中的任何设备进入网络时,其路径与路径集合path_set中指定的模式之间的关系必须满足需求上下文req_context中指定的上下文。其中,路径集合path_set在正则表达式中指定。具体地,例如需求(源地址srcip=10.0.1.0/24和目的地址dstip=10.0.2.0/24,[s],s.*w.*d,“exist》=1”)指定对于源ip地址在10.0.1.0/24中的和目的ip地址在10.0.2.0/24中的任何数据包p,在p的所有平行宇宙(universes)中,至少存在一条经过路径点w并能到达目的ip地址在10.0.2.0/24中的具有外部端口的设备d的路径。[0206]ddpv为操作人员提供了一个映射表(设备,ip地址前缀),其中表中的每一项表明此ip地址前缀的目的ip地址可以通过该设备的外部端口到达该设备。如果出现了packet_space与path_set中的终端设备之间的目的ip前缀不一致的需求,系统将返回一条错误消息,以便操作人员更新此需求。[0207]需求上下文req_context,该语言引入了两种需求上下文,分别是existcount_exp(表示含义为存在计数结果值,exist表示存在,count_exp表示计数结果值,本发明其他处的existcount_exp指代含义均相同)和equal(表示含义为等价,本发明其他处的equal指代含义均相同),以支持指定广泛的存在需求和等价需求。[0208]其中,对于existcount_exp(表示含义为存在计数结果值),它不仅可以用于支持常见的可达性和无循环需求,还可以用于支持高级需求,如“无冗余交付”和“弹性”。[0209]对于equal,它对于验证包路径轨迹的完整性很有用。作为一个具体的例子,(srcip=10.0.1.0/24和dstip=10.0.2.0/24,[s],sd|s.d|s..d,“equal”)任一个全集中p的到达d的所有轨迹的跳数都必须不超过4跳,并且在不到4跳中从s到d的所有路径都必须是p的轨迹。[0210]复合需求。该语言还支持通过多个(path_set,req_context)元组的逻辑组合来表达多播和任意播等需求。例如,假设从10.0.0.1到224.0.0.1的分组空间h,其中有两个目的设备d和e。下面的元组[0211](h,[s],[(s.*d,“cxist》=1”)and(s.*e,“exist》=1”)])[0212]指定此数据包空间的多播要求。[0213]我们亦关注了多个正则表达式来描述给定的需求和验证规划器如何决定每个设备上验证任务。我们重点关注具有多个(path_set,existcount_exp)元组的逻辑组合的需求,因为具有equal上下文的正则表达式可以在本地就得到验证。特别地,可以通过添加连接到所有源的虚拟源设备来处理具有不同源的正则表达式的复合需求的情况。因此,我们根据正则表达式的目的地址将复合需求分为两类。一是具有不同目的地址的正则表达式。二是具有相同目的地址的正则表达式。[0214]图3是根据本公开的一个实施方式的正则表达式转换为有限自动机方法示意图。[0215]如图3所示,正则表达式转换为有限自动机方法,具体来说,给定一个正则表达式path_set,首先将其转换为一个有限的自动机(σ,q,f,q0,δ),其中,σ是字母表,其中每个符号都是网络中的网络设备的标识符,q是自动机中的状态集,q0是初始状态,f是接受状态的集合,δ:q×σ→q是状态转移函数。例如,对于具有设备s、w、a、b、c、d网络的路径集合的正则表达式为s.*w.*d,图3为正则表达式s.*w.*d,字母σ={s,w,a,b,c,d}的有限自动机。[0216]图4是根据本公开的一个实施方式的分布式数据平面验证系统结构示意图。[0217]如图4所示,分布式数据平面验证系统,包括:[0218]验证规划器,接收数据平面验证需求、网络拓扑及设备-ip前缀映信息,基于数据平面验证需求和网络拓扑结构,生成有向无环网络图dvnet,将计数任务进行分解,以使得网络中各个设备获得分解后的计数任务;以及[0219]验证器,多个,分布于网络中的各个设备上,用于接收分解后的计数任务并执行计数任务。[0220]其中,验证规划器,该验证规划器在逻辑上是集中式的。它收集了使用ddpv规范语言的验证需求,以及网络的拓扑和(设备,ip前缀)映射表信息,并决定每个网络设备自身的验证任务,以完成对需求进行分布式验证。为此,验证规划器首先利用自动机理论将需求和网络拓扑中的正则表达式的路径集合path_set相乘,并最终得到一个有向无环图dvnet。dvnet紧凑地表示网络中满足该需求的所允许的所有路径。[0221]验证规划器能够将数据平面验证问题转换为dvnet上的计数问题:给定一个进入dvnet的数据包p,在p的所有平行宇宙(universes)中是否有足够的p的副本交付到dvnet的目的节点。[0222]然而,需要收集所有设备的数据平面才能直接在dvnet上进行计数,这种方法仍然是集中的,不可扩展的。因此,验证规划器进一步将计数问题分解为位于dvnet节点上的更小的设备上的计数任务,即计数可从该节点到达到dvnet中的目的节点的数据包数。这些任务与设备到设备之间的通信指令一起被发送到网络拓扑结构中相应的设备,并被分布式执行以计算最终的验证结果。[0223]其中,验证器,从验证规划器那里接收计数任务,执行它们,然后根据来自验证规划器的预定义的通信指令,在更新消息(验证消息)中将计数结果发送到相应的邻近设备。为此,我们设计了一个分布式验证dv协议,它指定了验证器如何计算和更新它们在设备上的任务,以及它们如何以一种高效、正确的方式将结果传送给邻近设备。简而言之,要执行设备上的验证任务,验证器首先读取设备的数据平面,并构造一个本地等价类表localequivalenceclass(lec)table。接下来,验证器使用lec表和从下游节点收到的计数结果作为输入,并计算出不同的数据包空间与从dvnet中相应节点到达目的节点的数据包的副本数目。这些结果存储在计数信息库countinginformationbase(cib)中,并根据验证规划器和dv协议指定的设备通信指令,增量地发送到其他邻近设备上的验证器。[0224]图5是根据本发明的一个实施方式的dv协议消息存储结构示意图。[0225]图5(a)是dvnet结构示例,包括节点v、z和u构成的有向无环网络图,及节点u处的lec表、cibin(v)、cibin(z)和loccib(u)的计数结果。特别地,因果字段是([v,p1,1],[z,p1,1]),因为predicatep1的计数值2是通过v和z(即2=1+1)的结果计算的。[0226]如图5(b)是,dvnet及dvnet中节点数据存储结构,网络中的各个设备存储两种类型的信息:本地等价类表lec和计数信息库cib,其中,计数信息库cib为dvnet中的每个节点x存储不同的数据包集合的从x节点到达dvnet中的目的节点的数据包副本数目。给定一个设备y,每一个lec对应一组数据包,它们的转发行为在y上相同,y将其所有lec存储在一个称为lecs表的(数据包空间packet_space,转发行为action)映射表中。[0227]其中,lecs表可以通过多个现有的数据平面验证工具计算和维护。具体地,可以选择使用二叉决策图binarydecisiondiagram(bdd)将数据包集编码为谓词(predicate,即数据包空间,本发明中predicate或谓词均指的是数据包空间),并使用基于bdd的数据平面验证工具来维护设备上具有lec最小数量的lecs。这是因为dv协议要求设备执行包集操作(例如,交集和并集),这可以使用bdd上的逻辑操作有效地实现。[0228]对于每个设备x,x存储了三种不同类型的cib:[0229]cibin(v):对于每个x.node的下游邻居v,x.node将从v收到的最新的、未经处理的计数结果(predicate,计数向量count)存储在一个映射中;[0230]loccib(x.node):存储不同的predicate,即可以从x.node到达目的节点的最新包的副本的数目(predicate,计数向量count,转发行为action,因果关系causality),元组,其中因果关系字段记录输入以获得计数字段;[0231]cibout(x.node):记录将要发送到x.node的上游节点的计数结果(predicate,计数向量count)以及要撤回的数据包空间;[0232]图5(a)给出了一个dvnet示例,包括节点v、z和节点u处的lec表cibin(v)、cibin(z)和loccib(u)的计数结果。特别地,因果字段是([v,p1,1],[z,p1,1]),因为predicatep1的计数值2是通过v和z(即2=1+1)的结果计算的。[0233]图6是dv协议消息处理方法示意图。[0234]dv协议中的消息将通过tcp协议(传输控制协议transmissioncontrolprotocol)连接发送。一条消息只有在完全接收后才会被处理。dv协议定义了open和keepalive等控制消息,以创建和维护设备之间的连接。我们重点介绍更新消息,它用于将计数结果从某节点传输到dvnet中该节点的上游邻居节点。[0235]更新消息的格式,更新消息包括三个字段:[0236]预期连接:预期连接字段是一个指示消息的元组(u,v),表示更新消息的传输方向为从dvnet节点u到dvnet节点v,用于计算dvnet中沿该连接传播的结果;[0237]撤回谓词:计数结果字段表示待删除的谓词(predicate)列表,该待删除的(predicate)列表已经被更新;[0238]新增的计数结果:新增的计数结果字段包含最新计数的谓词(predicate)列表。[0239]更新消息不变量。对于撤回的predicate和新增计数结果字段,dv协议保持一个重要的不变量:对于每个更新消息,撤回的predicate的并集等于新增的计数结果中predicate的并集。这将确保节点始终从其下游邻居接收最新的、完整的计数结果。[0240]其中,预期的连接是为了区分dvnet中具有相同一对设备的连接(例如,图7(c)中的w1→c1和w3→c1)。[0241]其中,更新消息还隐含了更新消息不变量,更新消息的不变量含义如下:对于撤回的谓词和新增计数结果字段,dv协议保持一个重要的不变量:对于每个更新消息,撤出的predicate的并集等于新增的计数结果中predicate的并集。更新消息的不变量,其作用是,在消息传递中,确保节点始终从其下游邻居接收最新的、完整的计数结果。[0242]假设,两个在dvnet上的邻居u,v,存在链接u→v,假设u.dev从v.dev收到一条指定更新消息,预期连接是u→v。则u.dev分三个步骤处理此消息,更新消息的处理过程如下:[0243]步骤1:更新cibin(v)。u.dev通过删除cibin(v)中属于需要撤回谓词的各个条目和将新增的计数结果全部插入cibin(v)来更新cibin(v)。[0244]步骤2:更新loccib(u),包括:[0245]首先,要更新loccib(u),u.dev首先找到所有受影响的条目,即需要更新的条目。具体地说,如果loccib(u)中的一个条目的因果关系字段(causality)中包含v中的属于此消息的撤回谓词的一个谓词,则需要更新该条目。[0246]其次,它逐个更新所有受影响条目的计数结果。具体来说,对于每一对受影响的条目r和从新收到的计数结果中得到的条目r0,u.dev计算它们的数据包空间的交集s。如果交集s不是空,则在loccib(u)中为predicates创建一个新条目rnew。rnew的计数结果通过两个步骤计算得到:1)在rnew.count计数和v之前的计数结果的因果关系causality之间执行或的反操作,以消除后者的影响;2)在最后一步的结果和r0.count之间执行或以获得最新的计数结果。转发行为rnew.action与r.action相同。这个条目的的因果关系causality继承了r的因果关系causality,元组(v,r0.predicate,r0.count)取代了v以前的记录。计算并插入所有新条目到loccib(u)后,所有受影响的条目将从loccib(u)中删除。[0247]步骤3:更新cibout(u)。[0248]u.dev计算cibout(u)。具体来说,从loccib(u)中删除的所有条目的谓词都放在撤回的谓词中。对于所有cibout(u)的插入条目,根据计数值是否相同来合并,即将计数值相同的数据包空间合并,并将合并后的结果条目放入新增的计数结果中,从而代替了被合并的数据包空间所在的条目。[0249]在处理更新消息后,对于u的每个上游邻居w,u.dev发送一个由预期链接w→u和cibout(u)组成的更新消息。[0250]数据平面更新处理。如果设备有数据平面更新(例如,规则插入/删除或物理端口的激活/失活),dv协议以处理更新消息的方式处理它。与处理常规更新消息不同,此时所有cibin(v)都不需要更新。loccib(u)中新插入的条目的计数是通过倒置或并读取不同cibin(v)中的相关条目来计算的。在cibout(u)中,只有新增的计数条目和更新后具有新计数的predicate将作为撤回的predicate。[0251]抑制输出的更新消息。在网络事件期间(例如,计划的配置更新)可能在短时间内发生多个数据平面更新。验证瞬态数据平面有时候是不需要的,并且可能会浪费计算和通信资源。因此,dv协议提供了一个受边界网关协议启发的可选的阻尼机制。具体来说,在设备u.dev处理完更新消息后,在发送新的更新消息之前,它首先检查是否仍然有未处理的更新连接的更新消息。如果是这样,它将继续处理它们,直到消息队列为空。然后它会在最后一个更新消息周期中发送最新的cibout(u)。[0252]图7示出了分布式数据平面验证方法工作流程示意图。[0253]如图7所示,分布式数据平面验证方法工作流程如下:[0254]首先,图7(a)中示出了一个数据平面验证需求和网络拓扑:对于所有抵达10.0.0.0/23的数据包,当它们从s进入网络时,它们必须能够通过一个简单路径(即无环)且通过设备w(即路径点)到达具有外部端口可访问10.0.0.0/23的设备d(即可达性)。[0255]其次,从待验证的需求到有向无环图dvnet:在此需求发送给验证规划器后,验证规划器将path_set中的正则表达式和网络拓扑相乘,生成有向无环网络图dvnet,它紧凑地表示网络中符合此正则表达式的所有路径(图7(c))。请注意,dvnet中的目的节点用双圆圈标记,dvnet中的节点与网络中的设备不是一对一的映射。例如,设备c被分成节点c1和c2,因为正则表达式允许数据包通过[c,w,d]或[w,c,d]到达d。[0256]图7(c)示出了分布式计数过程。为简单起见,使用p1、p2、p3依次代表目标ip前缀10.0.0.0/23、10.0.0.0/24和10.0.1.0/24的包空间,p2∩p3=空集和p1=p2∪p3。在dvnet中的一个节点,它使用其网络中相应设备的数据平面及其所有下游邻居节点的计数任务的结果作为输入,并计算(数据包空间packet_space,计数向量count)映射。此映射记录不同的包空间,即可以从dvnet中的当前节点连接到目的节点的所有平行宇宙中的数据包副本数目。[0257]每个节点将其计算出的映射存储在其相应设备的cib中,并将其发送到当前节点的上游节点中。例如,在节点d1计算其映射[p1,1](即,p1中任何数据包的一个副本将被发送到正确的外部端口)后,它将此结果发送给其上游邻居w1、w2、w3、w3和c1的设备。由于c1只有一个下游邻居d1,c1检查c的数据平面,将其映射计算为[p1,1],并将其发送给上游邻居w1和w3的设备w。由于这个是反向计数过程,所以入口设备s最终将收到完整的计数结果作为最终的验证结果。[0258]在本例中,图7(b)中的数据平面不满足验证要求,提供了关于节点a1的映射计算的细节,以说明ddpv在计数过程中是如何捕获这个错误的。当a1从b1接收[(p1,0)]和w3接收[(p1,1)]时,检查设备a的数据平面,发现对于谓词p3,由于a将p3中的所有包转发到w,p3中每个可以从a发送到d的数据包的副本数目为1。但是,对于谓词p2中的数据包,a的操作是将它们转发给b或w,但不是两者都转发。因此,在一个a向b转发p2中的包的平行宇宙中,传递到d的数据包副本数目为0。在另一个平行宇宙中,a将p2中的包转发到w,计数是1。因此,a1中关于p2的映射记录是(p2,[0,1]),这表明在一个平行宇宙中,p2中的数据包不能通过a传递到d。因为s将p1转发给a,所以一旦s1接收到这样的信息,s就可以捕获这个错误并提醒操作人员。[0259]处理增量数据平面更新时,通过考虑一个场景来完成ddpv的工作流演示,即b将其数据平面更新为将p1转发到w,而不是转发到c。不同节点的更改后的映射用图7(c)中的框圈起来。在这种情况下,b1和b2将分别更新其映射到[(p1,1)]和[(p1,0)],并将更新发送到其上游邻居。但是,因为w不将任何数据包转发给b,所以b2的上游邻居w3不需要更新其映射。相比之下,b1的上游邻居a1将更新其映射到[(p1,1)],因为无论a将p2中的包转发到b或w,每个包的1个副本将被发送到d,并且p2∪p3=p1。类似地,s1也将其映射更新到[(p1,1)],即更新满足要求。[0260]图8至图10是基于本公开的分布式数据平面验证方法和系统的实验结果,有关实验的场景、数据、工具、测试指标等情况如下:[0261]一、实验的场景与实验的数据集。我们首先评估ddpv在短时间内发生大规模数据平面更新的场景下的性能。例如,数据中心的冷启动(greenstart)和大型区域网络的更新。为了充分测试ddpv的可扩展性,我们考虑了四种拓扑的冷启动(greenstart),四种拓扑对应的数据集如表格1所示。具体来说,lonet是一个真实的、大型的数据中心网络,它使用边界网关协议bordergatewayprotocol(bgp)作为其路由协议。我们通过模拟该网络及其策略来收集其转发规则。fattree的数据集的生成方法类似于lonet的数据集生成方法。internet2和stanford的数据集是公开数据集。[0262]二、性能比较方法。在场景和数据集相同情况下,为了比较公平,我们将ddpv与当前最快的集中式dpv工具apkeep进行性能比较,性能测试包括无环、无黑洞和任意可达性,这些都是常见的dpv需求。由于apkeep的源代码未公开,所以我们基于apkeep的伪代码实现它。[0263]三、比较指标。我们比较了ddpv和apkeep系统的验证时间,以证明ddpv在实现dpv扩展性方面的优势。验证时间是从设备上数据平面更新到网络中所有需求验证结束所需要的时间,其中不包括网络传输和传播延迟。我们认为这是公平的,因为尽管ddpv需要在设备之间传输计数结果,但集中式的dpv工具也需要从设备上收集数据平面更新。同时为了演示ddpv可以部署在大型商用网络设备上,我们在突发更新实验结束时测量设备上验证器的内存,以及dv更新消息的大小。[0264]图8是根据本发明的实施方式的数据平面验证方法的冷启动实验效果对比示意图。[0265]如图8所示,从表格2我们观察到,在数据中心的冷启动(greenstart)实验中,ddpv的验证速度比apkeep快2758倍。即使是对于较小的网络(如internet2和stanford),ddpv的验证速度仍然比apkeep至少快5倍。这是因为ddpv系统地将验证需求分解为更小的设备上任务,这些任务的依赖链与网络的直径大致呈线性关系。数据中心的直径非常小(例如,5跳)。因此,设备的验证器实现了非常高水平的并行化,使ddpv实现了高度可扩展性。[0266]图9是根据本公开的一个实施方式的分布式数据平面验证方法的增量验证时间对比示意图。[0267]如图9所示,接下来,我们将评估ddpv的增量验证性能。对于我们测试中的每个拓扑,我们使用突发更新实验后的数据平面作为起点,随机生成均匀分布在设备上的1000个数据平面规则更新,并一个接一个地应用它们。每次更新后,我们将逐步验证网络数据平面。[0268]从图9(a)和图9(b),我们观察到,对于图9(a)的lonet和9(b)的fattree,ddpv90%的增量验证速度分别比apkeep快13倍和5倍。这是因为当数据平面更新发生在ddpv时,只有计数结果可能发生更改的设备才需要逐步更新结果,只有这些变化的结果会逐步发送给设备的邻居。在连接数目多的数据中心拓扑中,大多数数据平面更新不会改变其现在所处设备的计数结果。因此,此时它们不需要发送dv更新消息,从而减少了增量验证时间。相比之下,从图9(c)和图9(d),我们观察到,在9(c)的internet2和9(d)的stanford网络中,ddpv的增量验证速度稍微比apkeep差。这是有两个原因的。首先,它们太小,无法揭示集中式数据平面验证的性能瓶颈。其次,在连接较少的网络中,数据平面更新有更大的可能性会改变多个设备的计数结果,这就需要在设备之间发送更新消息,我们通过设置程序断点确定这是增量验证时间延长的根本原因。通过实验发现,更新消息的瓶颈是bdd的序列化和反序列化操作。它可以通过使用通信高效的bdd库或数据包空间的表示来改进。[0269]下面展示在突发更新实验结束时测量设备上验证器的内存,以及dv更新消息的大小。[0270]图10(a)是根据本公开的一个实施方式的分布式数据验证方法对内存开销对比示意图。[0271]内存的大小。图10(a)示出了跨设备acrossdevice的设备上验证器占用内存的累积分布函数(cumulativedistributionfunction)cdf。我们观察到,对于internet2、stanford和fattree,ddpv在大多数设备上使用不到100mb内存,甚至对于最大的数据中心网络网lonet,ddpv在设备上使用最大内存只有807mb,许多商用交换机是负担得起这样大小的内存的。[0272]图10(b)是根据本公开的一个实施方式的分布式数据验证方法对带宽开销对比示意图。[0273]如图10(b)所示,基于dv更新消息大小。图10(b)示出了每个实验中所有更新消息大小的cdf,通过观察可以得知,所有的更新消息都小于196kb,说明ddpv的带宽开销非常低。特别地,对于lonet和fatree,它们的更新消息普遍为138字节。这是因为在这些实验中,我们禁用了dv协议的抑制选项,以便为每个传入的更新消息都发送cibout。[0274]通过图10(a)图10(b)的对比结果,可以得到如下结论:ddpv在设备上产生的存储和通信开销很小,因此,在商用网络设备上部署ddpv是可行的。[0275]图11是本发明提供的对于平行宇宙概念解释示意图。[0276]下图11举例说明平行宇宙(universe)的概念,平行宇宙(universe)可以翻译为共存路径集合。图11中,数据包路径用于记录一个数据包在设备之间传输,直到该数据包被丢弃或发送到目的设备,先后所涉及的设备。以s作为路径起点,d作为路径终点,即目的设备,同时会丢弃所有数据包的设备也会是路径终点。[0277]图11(a)数据包p有2条数据包路径,即(s,a,b,d)和(s,a,c)。它们属于1个平行宇宙,因为a会把p都转发给b和c,以致最终都能到达路径终点,即这2条数据包路径可以共存。此时数据包p的所有数据包路径构成了它的共存路径集合。[0278]图11(b)p有2条数据包路径,即(s,a,b,d)和(s,a,c)。它们属于两个平行宇宙,因为a只会把p转发给b或c中的任意一个。也就是说,此时数据包p想要抵达路径终点,只能选择上述数据包路径中的1条通过。那么上述2条数据包路径就不可以共存,因此属于2个平行宇宙。所以此时对于数据包p来说,它的共存路径集合有2个。注意,对于一个数据包来说,它可能存在的不同平行宇宙之间是互斥的关系。[0279]图11(c)p有3条数据包路径,仅有两个平行宇宙,其中,{[s,a,b,c],[s,a,c]}属于一个平行宇宙,{[s,a,b,d],[s,a,c]}属于另一个平行宇宙。[0280]图11(a)(b)(c)中,“转发(所有,{b,c})”指的是当前设备收到数据包后会将数据包都转发给b和c,“转发(任意一个,{b,c})”指的是当前设备收到数据包后会将数据包只转发给b或c,即只会转发给b、c中的一个,而不是所有。其他的类似理解。而“丢弃”,即收到数据包后不转发给任何其他的设备。特别强调,对于一个数据包来说,它可能存在的不同平行宇宙之间是互斥的关系。[0281]本公开提供的分布式数据平面验证方法,没有继续压缩集中式数据平面验证的性能改进空间,而是采用了分布式设计来避免集中式设计固有的可扩展性瓶颈。微软azure沿着这个方向迈出了第一步,通过向设备分发验证,它给出了一个使用归纳循环不变量注释的分布式验证和程序验证之间的有趣类比,但止步于为特定的所有最短路径可用性需求设计无通信的分布式验证(即本地验证)。相比之下,我们超越了这一点,对于广泛的需求(如可达性、路径点、多播和任意播),通过设备上的分布式验证任务和设备之间有限的通信,我们可以以组合的方式验证它们,在通用设置中实现可扩展的数据平面检查。[0282]本公开提供的分布式数据平面验证方法,系统地解决了如何扩展数据平面验证以适用于实际的大型网络的重要问题。一个可扩展的数据平面验证工具不仅可以快速发现大型网络中的网络错误,它还可以支持新的服务,如快速回滚和在多个数据平面之间的切换,以及跨管理域的数据平面验证。[0283]本公开提供的分布式数据平面验证系统,还可以通过采用处理系统的硬件实现方式的装置实现。[0284]该装置可以包括执行上述流程图中各个或几个步骤的相应模块。因此,可以由相应模块执行上述流程图中的每个步骤或几个步骤,并且该装置可以包括这些模块中的一个或多个模块。模块可以是专门被配置为执行相应步骤的一个或多个硬件模块、或者由被配置为执行相应步骤的处理器来实现、或者存储在计算机可读介质内用于由处理器来实现、或者通过某种组合来实现。[0285]该硬件结构可以利用总线架构来实现。总线架构可以包括任何数量的互连总线和桥接器,这取决于硬件的特定应用和总体设计约束。总线1100将包括一个或多个处理器1200、存储器1300和/或硬件模块的各种电路连接到一起。总线1100还可以将诸如外围设备、电压调节器、功率管理电路、外部天线等的各种其它电路1400连接。[0286]总线1100可以是工业标准体系结构(isa,industrystandardarchitecture)总线、外部设备互连(pci,peripheralcomponent)总线或扩展工业标准体系结构(eisa,extendedindustrystandardcomponent)总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,该图中仅用一条连接线表示,但并不表示仅有一根总线或一种类型的总线。[0287]流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现特定逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本公开的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本公开的实施方式所属
技术领域
:的技术人员所理解。处理器执行上文所描述的各个方法和处理。例如,本公开中的方法实施方式可以被实现为软件程序,其被有形地包含于机器可读介质,例如存储器。在一些实施方式中,软件程序的部分或者全部可以经由存储器和/或通信接口而被载入和/或安装。当软件程序加载到存储器并由处理器执行时,可以执行上文描述的方法中的一个或多个步骤。备选地,在其他实施方式中,处理器可以通过其他任何适当的方式(例如,借助于固件)而被配置为执行上述方法之一。[0288]在流程图中表示或在此以其他方式描述的逻辑和/或步骤,可以具体实现在任何可读存储介质中,以供指令执行系统、装置或设备(如基于计算机的系统、包括处理器的系统或其他可以从指令执行系统、装置或设备取指令并执行指令的系统)使用,或结合这些指令执行系统、装置或设备而使用。[0289]就本说明书而言,“可读存储介质”可以是任何可以包含、存储、通信、传播或传输程序以供指令执行系统、装置或设备或结合这些指令执行系统、装置或设备而使用的装置。可读存储介质的更具体的示例(非穷尽性列表)包括以下:具有一个或多个布线的电连接部(电子装置),便携式计算机盘盒(磁装置),随机存取存储器(ram),只读存储器(rom),可擦除可编辑只读存储器(eprom或闪速存储器),光纤装置,以及便携式只读存储器(cdrom)。另外,可读存储介质甚至可以是可在其上打印程序的纸或其他合适的介质,因为可以例如通过对纸或其他介质进行光学扫描,接着进行编辑、解译或必要时以其他合适方式进行处理来以电子方式获得程序,然后将其存储在存储器中。[0290]应当理解,本公开的各部分可以用硬件、软件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(pga),现场可编程门阵列(fpga)等。[0291]本
技术领域
:的普通技术人员可以理解实现上述实施方式方法的全部或部分步骤是可以通过程序来指令相关的硬件完成,的程序可以存储于一种可读存储介质中,该程序在执行时,包括方法实施方式的步骤之一或其组合。[0292]此外,在本公开各个实施方式中的各功能单元可以集成在一个处理模块中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个可读存储介质中。存储介质可以是只读存储器,磁盘或光盘等。[0293]在本说明书的描述中,参考术语“一个实施方式/方式”、“一些实施方式/方式”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施方式/方式或示例描述的具体特征、结构、材料或者特点包含于本技术的至少一个实施方式/方式或示例中。在本说明书中,对上述术语的示意性表述不必须的是相同的实施方式/方式或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施方式/方式或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施方式/方式或示例以及不同实施方式/方式或示例的特征进行结合和组合。[0294]此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。在本技术的描述中,“多个”的含义是至少两个,例如两个,三个等,除非另有明确具体的限定。[0295]本领域的技术人员应当理解,上述实施方式仅仅是为了清楚地说明本公开,而并非是对本公开的范围进行限定。对于所属领域的技术人员而言,在上述公开的基础上还可以做出其它变化或变型,并且这些变化或变型仍处于本公开的范围内。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1