路由原理与技术第8章路由查询课件_第1页
路由原理与技术第8章路由查询课件_第2页
路由原理与技术第8章路由查询课件_第3页
路由原理与技术第8章路由查询课件_第4页
路由原理与技术第8章路由查询课件_第5页
已阅读5页,还剩101页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第一部分

概述第一部分

概述1影响IP网络性能的关键因素链路速度路由器的吞吐量包转发速率对路由变化的快速适应性影响IP网络性能的关键因素链路速度2采用光纤等技术提高链路速度在路由器中采用大容量的交换结构以提高吞吐量采用高效的路由查询算法和硬件路由查询方案提高包转发速率(路由查询)优化各种动态路由协议解决方案采用光纤等技术提高链路速度解决方案3路由查询定义设分组的目的地址为D,包含长度为W的比特数。设路由前缀为P,包含的比特数为0~W,L(P)表示前缀长度。地址D匹配前缀P的含义:地址D的前L(P)位比特值与前缀P完全相同。给定一个路由前缀集合PA,集合含有N个路由前缀,到达分组的目的地址为D,路由的最长前缀匹配查找定义为:在前缀集合PA中搜索到的前缀Pm满足:目的地址D匹配前缀Pm;在集合PA中不存在其他的前缀P,满足D匹配P,且L(P)>L(Pm)路由查询定义设分组的目的地址为D,包含长度为W的比特数。4为什么是最长前缀匹配而不是精确匹配CIDR等机制的引入:IP地址是无类别的,从IP地址不能判断出其网络前缀长度;IPv6单播地址也是无类别的。最长前缀匹配给路由查询带来很大的困难,因为不仅要考虑前缀的值,还要考虑前缀的长度。传统的关键字查找算法不能直接用于路由查询。W.Doeringer,G.Karjoth,andM.Nassehi,“Routingonlongestmatchingprefixes,”IEEE/ACMTrans.Networking,vol.4,pp.86–97,Feb.1996.为什么是最长前缀匹配而不是精确匹配5路由查询算法分类按照采用的数据结构和实现方式,大致可以分为:基于检索树(Trie)查找基于硬件TCAM查找分段查找哈希表查找Cache命中查找等。按照路由查询的依据,可以分为:基于路由前缀值的查找基于路由前缀长度的查找路由查询算法分类按照采用的数据结构和实现方式,大致可以分为:6路由查询算法评价标准时间复杂度(查找速度)空间复杂度(占用的存储空间)更新复杂度(增加、删除、变更路由表条目时,路由表的更新速度)可扩展性

注意,上述复杂度一般是指最坏情况下的复杂度。路由查询算法评价标准时间复杂度(查找速度)7第二部分

各种路由查询算法第二部分

各种路由查询算法8路由前缀值的线性查找所有路由前缀按照线性链表的方式组织。查询时要遍历路由表中的所有表项,并记录查询过程中匹配的最长路由前缀项,一直到最后一项为止。时间复杂度O(N),空间复杂度O(N),插入/删除路由前缀条目的复杂度为O(1)。如果使用有序链表,即把路由前缀按照长度大小排列,可以提高路由查询的平均速度,但更新复杂度上升。此时,时间复杂度O(N),空间复杂度O(N),插入/删除路由前缀条目的复杂度为O(N)。路由前缀值的线性查找所有路由前缀按照线性链表的方式组织。9基本的二叉检索树(Trie)路由前缀按照二叉树的结构来组织。树中的每个节点含有路由前缀的1比特信息,并根据下一个比特生成两个子节点。在树的非空节点处,存放该节点对应的下一跳信息。在进行最长前缀匹配时,首先根据路由前缀的比特信息遍历二叉树,达到最终匹配的叶子节点处,最后读出存储在叶子节点中的下一跳路由信息。基本的二叉检索树(Trie)路由前缀按照二叉树的结构来组织。10基本二叉检索树的一个例子基本二叉检索树的一个例子11在查找的过程中,有可能出现多个前缀匹配的情况,如上图中的(A,C)和(B,D,E),这时要选择最长的前缀。在查找时要记录当前最匹配的路由前缀,一直到叶子节点或者节点没有合适的分支为止。例如,对于地址111*,按照上图的例子,当查到B时,由于是匹配的,所以就记录下相应的信息,继续向下查询,没有更匹配的路由前缀,所以此时B就是最长匹配的路由前缀。这种查找实际上是地址前缀长度空间的线性查找。因为是按照单个比特的顺序来查询的。在查找的过程中,有可能出现多个前缀匹配的情况,如上图中的(A12很显然,使用基本的二叉检索树进行路由查询时,时间复杂度与树的深度(在这种算法中就等于路由前缀的最大长度)有关。如果最大可能的路由前缀长度为W,则最坏情况下的查找时间复杂度为O(W)。最坏情况下的空间复杂度为O(N*W)。更新复杂度为O(W)。更新时需要先进行查找,找到之后进行相应的增删操作就可以了(包括中间节点和叶子节点两种情况)。在IPv4中最多需要32次查找,在IPv6中最多需要128次查找。很显然,使用基本的二叉检索树进行路由查询时,时间复杂度与树的13路径压缩Trie该算法是对基本二叉检索树的改进,最早起源于Patricia算法,后来Sklower对Patricia算法做了改进,使之可以用于路由查询。其基本思想是去掉输出为1的中间节点,压缩叶子节点的路径,将叶子节点提升到最近一级父节点的下一层。这样,每个中间节点都有两个输出。由于有可能去掉了一些包含路由前缀的中间节点,所有某些节点会有多个路由前缀。由于去掉了一些节点,某些比特将被忽略,所以节点要维护一个变量,用于维持下一个要检查的比特位。路径压缩Trie该算法是对基本二叉检索树的改进,最早起源于P14路由原理与技术第8章路由查询课件15路径压缩Trie对稀疏的基本Trie有明显的压缩效果,但对稠密的则作用不大。路径压缩Trie不能从本质上降低树的深度,在最坏情况下它的时间复杂度仍然为O(W)。路径压缩Trie的空间复杂度为O(N),因为这种Trie中N个叶子节点对应N-1个内部节点。路径压缩Trie更新算法的复杂度也是O(W),其动态性比基本Trie要差,因为当需要加入或者删除叶子节点时,会导致其对应的若干条路径上的叶子节点位置发生变化。这种算法在BSD系统上得到了实现(Radix树),并随着BSD的推广而得到广泛应用。路径压缩Trie对稀疏的基本Trie有明显的压缩效果,但对稠16多比特检索树(Trie)在基本的二叉检索树中每次检查一个比特,即一级对应1个比特;如果让每一级对应多个比特,就可以大大降低树的深度。也就能够降低路由查询的时间复杂度。每一级对应的比特数被称为查找步宽。同一级的步宽可以一样,也可以不一样。前者实现起来比较简单,但浪费存储空间,后者实现复杂一些,但是会节省一定的存储空间。因为一次查找多个比特,因此不能处理任意长度的路由前缀,一般要使用前缀扩展。多比特检索树(Trie)在基本的二叉检索树中每次检查一个比特17每一级的步宽都是2每一级的步宽都是218第一级的步宽是2第二级三个节点步宽是2,一个节点步宽是1第一级的步宽是219对于上图中绿色部分,如何应用多比特检索?对于上图中绿色部分,如何应用多比特检索?20前缀扩展:将一条较短的路由前缀展开成多条较长的路由前缀集,这些前缀集的转发信息就是原来地址前缀所对应的转发信息。也就是扩展后的路由前缀要继承原来前缀的转发信息。例如,1*可以扩展为10*和11*。对于Trie中不能直接应用多比特树的地方,可以先进行前缀扩展,使应用多比特树的局部成为一个满的子树。前缀扩展:将一条较短的路由前缀展开成多条较长的路由前缀集,这21路由原理与技术第8章路由查询课件22由于步宽大于等于1,使检索树的深度明显降低,所以多比特检索树的时间复杂度比基本二进制Trie或路径压缩Trie要低,具体的数值与每一级步宽有关。当每一级步宽都是K时(这是多比特检索树中最简单的情况),时间复杂度为O(W/K)。时间复杂度降低的代价就是空间复杂度的上升,每一个中间节点都需要包含2k个指针(每一级步宽都是K),最差情况下每加入一个新前缀,需要插入W/K个中间节点,从而需要占用空间O(2k*W/K),所以空间复杂度为O(N*2k*W/K)。更新时需要进行一次路由查找,然后更新节点的指针,最差情况下需要更新2k-1指针,所以更新复杂度为O(2k+W/K)。由于步宽大于等于1,使检索树的深度明显降低,所以多比特检索树23对于多比特检索树来说,当步宽为1时,就成为基本二叉检索树或路径压缩树,当步宽达到W时,时间复杂度为O(1),但空间复杂度变为O(2W)。很显然,多比特检索树的主要问题就是引入了很多冗余路由前缀,占用了大量存储空间,所以对它的优化是研究的一个重点,例如有些人就提出了步宽选择策略,也有人提出了一些压缩算法。实际进行压缩时可以考虑互联网地址分布的特点,例如长度16~24之间的前缀数最多。对于多比特检索树来说,当步宽为1时,就成为基本二叉检索树或路24叶子扩展的概念叶子扩展的概念25路由前缀长度空间的二分查找Trie树算法的实质是地址前缀长度空间的线性查找:先检查第1个(1-k)个比特,再检查第2个(k+1-2k)个比特,一直到路由前缀的最大长度为止。文献“Scalablehigh-speedprefixmatching,MarcelWaldvogel,GeorgeVarghese,JonTurner,BernhardPlattner,ACMTransactionsonComputerSystems,

2001”提出了地址前缀长度空间的二分查找法。基本思想是把所有路由前缀按照其长度分为不同的前缀集合,每个前缀集合内采用哈希算法查找;查询时,从长度位W/2的集合开始,采用二分查找法。路由前缀长度空间的二分查找Trie树算法的实质是地址前缀长度26图中节点对应的是前缀集合,而不是某个或某几个比特位图中节点对应的是前缀集合,而不是某个或某几个比特位27为了保证该算法的正确性,需要引入一个被成为Marker的表项。考虑下面的例子。有4个地址前缀:0*、1*、00*、110*。现查找110*。为了保证该算法的正确性,需要引入一个被成为Marker的表项28路由前缀长度空间的二分查找在路由查询方面的时间复杂度为O(logW),对IPv4来说,最多需要5次查询,对IPv6来说,最多需要7次查询。对于每个前缀,最多可能需要logW个Marker,因此,算法的空间复杂度为O(N*logW)。路由更新比较麻烦,其复杂度为O(N*logW),因为最坏情况下更新一个前缀可能影响N-1个前缀,而一个前缀又有可能对应logW个Maker。哈希算法也是该算法中的关键问题。路由前缀长度空间的二分查找在路由查询方面的时间复杂度为O(l29TCAMTCAM(TernaryContentAddressMemory)是一种新型的存储器,存放一系列路由表项,为到来的每一个分组并行查找所有的路由前缀。因此,它的路由查询只需要一次内存访问,若有多个匹配表项,经过优先级比较后,确定路由信息。路由管理比较复杂,路由表的动态删除和更新会导致TCAM中存放大量的碎片。成本昂贵,功耗比较大,存储容量小。这实际上是一种硬件查找方法。TCAMTCAM(TernaryContentAddre30基于分段的查找这种方案实际上是多比特检索树的具体硬件实现方案。典型的是Gupta等人提出的DIR-24-8-BASIC查找算法。DIR-24-8-BASIC算法是把IPv4地址空间分为长度分别为24和8的两部分(TBL24和TBLlong),最大内存访问次数为2,采用硬件流水线技术可以用1次内存访问。第一部分是224=16M个表项;第二部分256个表项。因为是基于多比特检索树,因此需要进行前缀扩展。第一级中的节点携带的指针信息指示可能存在于第2级中的一棵子树。基于分段的查找这种方案实际上是多比特检索树的具体硬件实现方案31路由原理与技术第8章路由查询课件32缓存(Cache)策略缓存策略是指把最近查找过的目的地址和路由下一跳信息放在缓存之中,当IP分组达到时,先从缓存中查找,找不到时再执行最长前缀匹配策略。显然,数据包的相关度越大,这种方法的有效性就越高。缓存的命中率是这种策略的一个关键。由于缓存容量有限,且数据日益多样化,缓存的命中率大大降低。缓存(Cache)策略缓存策略是指把最近查找过的目的地址和路33哈希查找哈希(Hash)算法在路由查询中应用的时候,通过查找建立的哈希索引,来找到对应的路由前缀。理论上讲,哈希算法的时间复杂度和空间复杂度都很低,但实际上很难找到一个完美的或者近似完美的哈希函数。另外,路由更新也往往会导致哈希表的重建。一般来说,把整个路由表做为一个哈希表是不切实际的,可以在局部范围内应用哈希算法。如在前缀长度空间的二分查找中,就可以在同一前缀长度的前缀集合内应用哈希算法。哈希查找哈希(Hash)算法在路由查询中应用的时候,通过查找34其他路由查询算法层压缩树地址区间的二分查找法多路和多列查询算法等其他路由查询算法层压缩树35第三部分

路由查询算法的评测第三部分

路由查询算法的评测36算法时间复杂度空间复杂度更新复杂度基本二叉检索树O(W)O(N*W)O(W)路径压缩检索树O(W)O(N)O(W)多比特检索树O(W/K)O(2K*N*W/K)O(W/K+2K)前缀长度空间的二分查找O(logW)O(N*logW)O(N*logW)基本算法在时间复杂度等方面的比较算法时间复杂度空间复杂度更新复杂度基本二叉检索树O(W)O(37其他需要考虑的方面算法的可扩展性。即路由前缀长度增加后,不能使查询的复杂度大幅度上升。路由前缀长度空间的二分查找的扩展性比较好,从IPv4到IPv6后,最差情况下的查询次数从5升到7。各种基于检索树的查找算法可扩展性一般,多比特查找树可以通过增加K的方法来降低时间复杂度,但会带来空间复杂度的大幅度上升。不过也可以通过分段的方法来部分地解决这方面的问题。其他需要考虑的方面算法的可扩展性。即路由前缀长度增加后,不能38对路由查询算法实际评测的方法对路由查询算法实际评测的方法39测试数据:包括路由前缀和目的地址序列两部分。路由前缀的生成有三种方法典型数据生成,即采用骨干路由器统计的实际路由表,测试结果更有实际意义。随机生成,测试结果可以反映算法的平均性能。拓扑结构生成,模拟互联网拓扑结构生成测试数据。目的地址序列的生成有两种方法随机地址生成加权随机地址生成,即按照互联网实际目的地址的分布情况进行加权。测试数据:包括路由前缀和目的地址序列两部分。40被测算法指具体被评测的路由查询算法参考算法是指用来参照对比的基本路由查询算法,如路径压缩Trie等。测试执行则是从查询的时间复杂度、空间复杂度、更新复杂度等几个方面进行测试。测试结果反映被测算法在各个评价标准方面的性能。被测算法指具体被评测的路由查询算法41路由查询和路由更新的分析模型一般来说,为了提高路由查询的速度,往往采用比较复杂的数据结构,这就造成路由更新的效率很低。路由查询和路由更新都要访问路由表,由于读写的冲突,它们对路由表的访问一般是互斥的。通常考虑的是路由更新对路由查询的影响。路由查询和路由更新之间的定量关系,还没有一个明确的结论。路由查询和路由更新的分析模型一般来说,为了提高路由查询的速度42一个简单的分析模型一个简单的分析模型43路由查询请求的到达一般是泊松分布;路由更新的则未必是,具体的分布目前还没有定论,为了简单起见,可以假设也是泊松到达。实际中路由查询请求的到达率要远大于路由更新请求到达率。一般来说,路由更新请求不会被丢弃,但路由查询请求就不一定了,如果网络拥塞,或者分组排队时间过长,都有可能造成分组被丢弃,自然路由查询请求也就被丢弃了。在实际路由器中,路由查询和路由更新一般没有优先级区别。可以把路由表做为一个服务者,它的服务时间是一般分布。路由更新的服务时间一般要大于路由查询的服务时间。路由查询请求的到达一般是泊松分布;路由更新的则未必是,具体的44第四部分

流分类简介第四部分

流分类简介45流分类概述根据一定的分类规则,检查IP数据包中的多个字段,对IP包进行分类,并应用不同的处理策略。也称为IP包分类或者IP分类。需求:防火墙策略路由服务质量流量计费等。流分类概述根据一定的分类规则,检查IP数据包中的多个字段,对46检查的字段:源地址和目的地址源端口和目的端口协议(IPv4)、下一个首部(IPv6)业务类型(IPv6)流标签(IPv6)等。处理策略:是否转发数据包;向哪里转发数据包;数据包应该得到什么样的服务;相应流量数据包应该收取多少费用等。检查的字段:47流分类一般要检查IP数据包中的多个字段(域),而路由查询只检查目的IP地址字段,如果把路由查询看作是一维检索的话,那么流分类就是多维检索。实际上也可以把路由查询看成是流分类的一个特例。流分类一般要检查IP数据包中的多个字段(域),而路由查询只检48流分类的数学定义每一条流分类规则R和数据包首部H中的d个域(维)有关,相应地可以把每一条规则划分为d个分量(可以假设每一分量有W个比特)。我们称规则R和首部H匹配,当且仅当H的每一个域H[i]和R相应的域R[i]匹配。H可能匹配规则库RS中的多条规则(即发生规则冲突),因此要为每一条规则赋予一个优先级。流分类实质上就是在RS中搜索给定数据包首部H的最佳匹配规则的过程。通常,最佳匹配规则指优先级最高的规则。流分类的数学定义每一条流分类规则R和数据包首部H中的d个域(49给定一个流分类规则集合RS,集合含有N个规则,设到达的数据包首部为H,规则集合中可能存在多个规则Ri匹配H。对于每一条规则,赋予一个优先级prii,用pri(R)来表示。则流分类的数学定义为:在流分类规则集合RS中搜索规则Rm满足以下条件:数据包首部H匹配规则Rm在规则集合RS中不存在另外的规则R,满足H匹配R,且pri(R)大于pri(Rm)

给定一个流分类规则集合RS,集合含有N个规则,设到达的数据包50流分类算法的类别直接查找存储器,预处理时建立线性的数据结构,通过查找线性数据结构和一些处理获得最终结果。包括线性查找、TCAM、Cross-producting、位向量(BV)、RFC(RecursiveFlowClassification)等。其中Cross-producting、位向量等算法利用了计算几何中点定位问题的思想;RFC算法则是利用了映射和分段的思想,即可以把IP分类看成是从数据包首部中的S比特到T比特的一个集合的映射,同时引入分段以降低对存储容量的需求(实际上多维归并为一维)。流分类算法的类别直接查找存储器,预处理时建立线性的数据结构,51基于查找树,预处理时建立以查找树为中心的数据结构,有分层查找树、集合归并查找树、网格查找树、智能分层查找树等。分层查找树是一维Trie的扩展,从d维中选任一维生成第一级二进制Trie,对于该Trie中每一个与第一维匹配的节点(有些节点是因为树的生成而引入的),再按照第二维建立另一个二叉树,反复这一过程直到完成对每一维的处理,时间复杂度为Wd,空间复杂度为NdW;其他算法基本上属于在此基础上的改进。利用哈希表。基于查找树,预处理时建立以查找树为中心的数据结构,有分层查找52流分类算法的评价时间复杂度,即查找速度快,包括最坏情况、平均情况、统计情况等,一般也是用内存访问次数来衡量;空间复杂度,即占用内存小;易于更新,包括完全更新、增量更新等。流分类算法的评价时间复杂度,即查找速度快,包括最坏情况、平均53第一部分

概述第一部分

概述54影响IP网络性能的关键因素链路速度路由器的吞吐量包转发速率对路由变化的快速适应性影响IP网络性能的关键因素链路速度55采用光纤等技术提高链路速度在路由器中采用大容量的交换结构以提高吞吐量采用高效的路由查询算法和硬件路由查询方案提高包转发速率(路由查询)优化各种动态路由协议解决方案采用光纤等技术提高链路速度解决方案56路由查询定义设分组的目的地址为D,包含长度为W的比特数。设路由前缀为P,包含的比特数为0~W,L(P)表示前缀长度。地址D匹配前缀P的含义:地址D的前L(P)位比特值与前缀P完全相同。给定一个路由前缀集合PA,集合含有N个路由前缀,到达分组的目的地址为D,路由的最长前缀匹配查找定义为:在前缀集合PA中搜索到的前缀Pm满足:目的地址D匹配前缀Pm;在集合PA中不存在其他的前缀P,满足D匹配P,且L(P)>L(Pm)路由查询定义设分组的目的地址为D,包含长度为W的比特数。57为什么是最长前缀匹配而不是精确匹配CIDR等机制的引入:IP地址是无类别的,从IP地址不能判断出其网络前缀长度;IPv6单播地址也是无类别的。最长前缀匹配给路由查询带来很大的困难,因为不仅要考虑前缀的值,还要考虑前缀的长度。传统的关键字查找算法不能直接用于路由查询。W.Doeringer,G.Karjoth,andM.Nassehi,“Routingonlongestmatchingprefixes,”IEEE/ACMTrans.Networking,vol.4,pp.86–97,Feb.1996.为什么是最长前缀匹配而不是精确匹配58路由查询算法分类按照采用的数据结构和实现方式,大致可以分为:基于检索树(Trie)查找基于硬件TCAM查找分段查找哈希表查找Cache命中查找等。按照路由查询的依据,可以分为:基于路由前缀值的查找基于路由前缀长度的查找路由查询算法分类按照采用的数据结构和实现方式,大致可以分为:59路由查询算法评价标准时间复杂度(查找速度)空间复杂度(占用的存储空间)更新复杂度(增加、删除、变更路由表条目时,路由表的更新速度)可扩展性

注意,上述复杂度一般是指最坏情况下的复杂度。路由查询算法评价标准时间复杂度(查找速度)60第二部分

各种路由查询算法第二部分

各种路由查询算法61路由前缀值的线性查找所有路由前缀按照线性链表的方式组织。查询时要遍历路由表中的所有表项,并记录查询过程中匹配的最长路由前缀项,一直到最后一项为止。时间复杂度O(N),空间复杂度O(N),插入/删除路由前缀条目的复杂度为O(1)。如果使用有序链表,即把路由前缀按照长度大小排列,可以提高路由查询的平均速度,但更新复杂度上升。此时,时间复杂度O(N),空间复杂度O(N),插入/删除路由前缀条目的复杂度为O(N)。路由前缀值的线性查找所有路由前缀按照线性链表的方式组织。62基本的二叉检索树(Trie)路由前缀按照二叉树的结构来组织。树中的每个节点含有路由前缀的1比特信息,并根据下一个比特生成两个子节点。在树的非空节点处,存放该节点对应的下一跳信息。在进行最长前缀匹配时,首先根据路由前缀的比特信息遍历二叉树,达到最终匹配的叶子节点处,最后读出存储在叶子节点中的下一跳路由信息。基本的二叉检索树(Trie)路由前缀按照二叉树的结构来组织。63基本二叉检索树的一个例子基本二叉检索树的一个例子64在查找的过程中,有可能出现多个前缀匹配的情况,如上图中的(A,C)和(B,D,E),这时要选择最长的前缀。在查找时要记录当前最匹配的路由前缀,一直到叶子节点或者节点没有合适的分支为止。例如,对于地址111*,按照上图的例子,当查到B时,由于是匹配的,所以就记录下相应的信息,继续向下查询,没有更匹配的路由前缀,所以此时B就是最长匹配的路由前缀。这种查找实际上是地址前缀长度空间的线性查找。因为是按照单个比特的顺序来查询的。在查找的过程中,有可能出现多个前缀匹配的情况,如上图中的(A65很显然,使用基本的二叉检索树进行路由查询时,时间复杂度与树的深度(在这种算法中就等于路由前缀的最大长度)有关。如果最大可能的路由前缀长度为W,则最坏情况下的查找时间复杂度为O(W)。最坏情况下的空间复杂度为O(N*W)。更新复杂度为O(W)。更新时需要先进行查找,找到之后进行相应的增删操作就可以了(包括中间节点和叶子节点两种情况)。在IPv4中最多需要32次查找,在IPv6中最多需要128次查找。很显然,使用基本的二叉检索树进行路由查询时,时间复杂度与树的66路径压缩Trie该算法是对基本二叉检索树的改进,最早起源于Patricia算法,后来Sklower对Patricia算法做了改进,使之可以用于路由查询。其基本思想是去掉输出为1的中间节点,压缩叶子节点的路径,将叶子节点提升到最近一级父节点的下一层。这样,每个中间节点都有两个输出。由于有可能去掉了一些包含路由前缀的中间节点,所有某些节点会有多个路由前缀。由于去掉了一些节点,某些比特将被忽略,所以节点要维护一个变量,用于维持下一个要检查的比特位。路径压缩Trie该算法是对基本二叉检索树的改进,最早起源于P67路由原理与技术第8章路由查询课件68路径压缩Trie对稀疏的基本Trie有明显的压缩效果,但对稠密的则作用不大。路径压缩Trie不能从本质上降低树的深度,在最坏情况下它的时间复杂度仍然为O(W)。路径压缩Trie的空间复杂度为O(N),因为这种Trie中N个叶子节点对应N-1个内部节点。路径压缩Trie更新算法的复杂度也是O(W),其动态性比基本Trie要差,因为当需要加入或者删除叶子节点时,会导致其对应的若干条路径上的叶子节点位置发生变化。这种算法在BSD系统上得到了实现(Radix树),并随着BSD的推广而得到广泛应用。路径压缩Trie对稀疏的基本Trie有明显的压缩效果,但对稠69多比特检索树(Trie)在基本的二叉检索树中每次检查一个比特,即一级对应1个比特;如果让每一级对应多个比特,就可以大大降低树的深度。也就能够降低路由查询的时间复杂度。每一级对应的比特数被称为查找步宽。同一级的步宽可以一样,也可以不一样。前者实现起来比较简单,但浪费存储空间,后者实现复杂一些,但是会节省一定的存储空间。因为一次查找多个比特,因此不能处理任意长度的路由前缀,一般要使用前缀扩展。多比特检索树(Trie)在基本的二叉检索树中每次检查一个比特70每一级的步宽都是2每一级的步宽都是271第一级的步宽是2第二级三个节点步宽是2,一个节点步宽是1第一级的步宽是272对于上图中绿色部分,如何应用多比特检索?对于上图中绿色部分,如何应用多比特检索?73前缀扩展:将一条较短的路由前缀展开成多条较长的路由前缀集,这些前缀集的转发信息就是原来地址前缀所对应的转发信息。也就是扩展后的路由前缀要继承原来前缀的转发信息。例如,1*可以扩展为10*和11*。对于Trie中不能直接应用多比特树的地方,可以先进行前缀扩展,使应用多比特树的局部成为一个满的子树。前缀扩展:将一条较短的路由前缀展开成多条较长的路由前缀集,这74路由原理与技术第8章路由查询课件75由于步宽大于等于1,使检索树的深度明显降低,所以多比特检索树的时间复杂度比基本二进制Trie或路径压缩Trie要低,具体的数值与每一级步宽有关。当每一级步宽都是K时(这是多比特检索树中最简单的情况),时间复杂度为O(W/K)。时间复杂度降低的代价就是空间复杂度的上升,每一个中间节点都需要包含2k个指针(每一级步宽都是K),最差情况下每加入一个新前缀,需要插入W/K个中间节点,从而需要占用空间O(2k*W/K),所以空间复杂度为O(N*2k*W/K)。更新时需要进行一次路由查找,然后更新节点的指针,最差情况下需要更新2k-1指针,所以更新复杂度为O(2k+W/K)。由于步宽大于等于1,使检索树的深度明显降低,所以多比特检索树76对于多比特检索树来说,当步宽为1时,就成为基本二叉检索树或路径压缩树,当步宽达到W时,时间复杂度为O(1),但空间复杂度变为O(2W)。很显然,多比特检索树的主要问题就是引入了很多冗余路由前缀,占用了大量存储空间,所以对它的优化是研究的一个重点,例如有些人就提出了步宽选择策略,也有人提出了一些压缩算法。实际进行压缩时可以考虑互联网地址分布的特点,例如长度16~24之间的前缀数最多。对于多比特检索树来说,当步宽为1时,就成为基本二叉检索树或路77叶子扩展的概念叶子扩展的概念78路由前缀长度空间的二分查找Trie树算法的实质是地址前缀长度空间的线性查找:先检查第1个(1-k)个比特,再检查第2个(k+1-2k)个比特,一直到路由前缀的最大长度为止。文献“Scalablehigh-speedprefixmatching,MarcelWaldvogel,GeorgeVarghese,JonTurner,BernhardPlattner,ACMTransactionsonComputerSystems,

2001”提出了地址前缀长度空间的二分查找法。基本思想是把所有路由前缀按照其长度分为不同的前缀集合,每个前缀集合内采用哈希算法查找;查询时,从长度位W/2的集合开始,采用二分查找法。路由前缀长度空间的二分查找Trie树算法的实质是地址前缀长度79图中节点对应的是前缀集合,而不是某个或某几个比特位图中节点对应的是前缀集合,而不是某个或某几个比特位80为了保证该算法的正确性,需要引入一个被成为Marker的表项。考虑下面的例子。有4个地址前缀:0*、1*、00*、110*。现查找110*。为了保证该算法的正确性,需要引入一个被成为Marker的表项81路由前缀长度空间的二分查找在路由查询方面的时间复杂度为O(logW),对IPv4来说,最多需要5次查询,对IPv6来说,最多需要7次查询。对于每个前缀,最多可能需要logW个Marker,因此,算法的空间复杂度为O(N*logW)。路由更新比较麻烦,其复杂度为O(N*logW),因为最坏情况下更新一个前缀可能影响N-1个前缀,而一个前缀又有可能对应logW个Maker。哈希算法也是该算法中的关键问题。路由前缀长度空间的二分查找在路由查询方面的时间复杂度为O(l82TCAMTCAM(TernaryContentAddressMemory)是一种新型的存储器,存放一系列路由表项,为到来的每一个分组并行查找所有的路由前缀。因此,它的路由查询只需要一次内存访问,若有多个匹配表项,经过优先级比较后,确定路由信息。路由管理比较复杂,路由表的动态删除和更新会导致TCAM中存放大量的碎片。成本昂贵,功耗比较大,存储容量小。这实际上是一种硬件查找方法。TCAMTCAM(TernaryContentAddre83基于分段的查找这种方案实际上是多比特检索树的具体硬件实现方案。典型的是Gupta等人提出的DIR-24-8-BASIC查找算法。DIR-24-8-BASIC算法是把IPv4地址空间分为长度分别为24和8的两部分(TBL24和TBLlong),最大内存访问次数为2,采用硬件流水线技术可以用1次内存访问。第一部分是224=16M个表项;第二部分256个表项。因为是基于多比特检索树,因此需要进行前缀扩展。第一级中的节点携带的指针信息指示可能存在于第2级中的一棵子树。基于分段的查找这种方案实际上是多比特检索树的具体硬件实现方案84路由原理与技术第8章路由查询课件85缓存(Cache)策略缓存策略是指把最近查找过的目的地址和路由下一跳信息放在缓存之中,当IP分组达到时,先从缓存中查找,找不到时再执行最长前缀匹配策略。显然,数据包的相关度越大,这种方法的有效性就越高。缓存的命中率是这种策略的一个关键。由于缓存容量有限,且数据日益多样化,缓存的命中率大大降低。缓存(Cache)策略缓存策略是指把最近查找过的目的地址和路86哈希查找哈希(Hash)算法在路由查询中应用的时候,通过查找建立的哈希索引,来找到对应的路由前缀。理论上讲,哈希算法的时间复杂度和空间复杂度都很低,但实际上很难找到一个完美的或者近似完美的哈希函数。另外,路由更新也往往会导致哈希表的重建。一般来说,把整个路由表做为一个哈希表是不切实际的,可以在局部范围内应用哈希算法。如在前缀长度空间的二分查找中,就可以在同一前缀长度的前缀集合内应用哈希算法。哈希查找哈希(Hash)算法在路由查询中应用的时候,通过查找87其他路由查询算法层压缩树地址区间的二分查找法多路和多列查询算法等其他路由查询算法层压缩树88第三部分

路由查询算法的评测第三部分

路由查询算法的评测89算法时间复杂度空间复杂度更新复杂度基本二叉检索树O(W)O(N*W)O(W)路径压缩检索树O(W)O(N)O(W)多比特检索树O(W/K)O(2K*N*W/K)O(W/K+2K)前缀长度空间的二分查找O(logW)O(N*logW)O(N*logW)基本算法在时间复杂度等方面的比较算法时间复杂度空间复杂度更新复杂度基本二叉检索树O(W)O(90其他需要考虑的方面算法的可扩展性。即路由前缀长度增加后,不能使查询的复杂度大幅度上升。路由前缀长度空间的二分查找的扩展性比较好,从IPv4到IPv6后,最差情况下的查询次数从5升到7。各种基于检索树的查找算法可扩展性一般,多比特查找树可以通过增加K的方法来降低时间复杂度,但会带来空间复杂度的大幅度上升。不过也可以通过分段的方法来部分地解决这方面的问题。其他需要考虑的方面算法的可扩展性。即路由前缀长度增加后,不能91对路由查询算法实际评测的方法对路由查询算法实际评测的方法92测试数据:包括路由前缀和目的地址序列两部分。路由前缀的生成有三种方法典型数据生成,即采用骨干路由器统计的实际路由表,测试结果更有实际意义。随机生成,测试结果可以反映算法的平均性能。拓扑结构生成,模拟互联网拓扑结构生成测试数据。目的地址序列的生成有两种方法随机地址生成加权随机地址生成,即按照互联网实际目的地址的分布情况进行加权。测试数据:包括路由前缀和目的地址序列两部分。93被测算法指具体被评测的路由查询算法参考算法是指用来参照对比的基本路由查询算法,如路径压缩Trie等。测试执行则是从查询的时间复杂度、空间复杂度、更新复杂度等几个方面进行测试。测试结果反映被测算法在各个评价标准方面的性能。被测算法指具体被评测的路由查询算法94路由查询和路由更新的分析模型一般来说,为了提高路由查询的速度,往往采用比较复杂的数据结构,这就造成路由更新的效率很低。路由查询和路由更新都要访问路由表,由于读写的冲突,它们对路由表的访问一般是互斥的。通常考虑的是路由更新对路由查询的影响。路由查询和路由更新之间的定量关系,还没有一个明确的结论。路由查询和路由更新的分析模型一般来说,为了提高路由查询的速度95一个简单的分析模型一个简单的分析模型96路由查询请求的到达一般是泊松分布;路由更新的则未必是,具体的分布目前还没有定论,为了简单起见,可以假设也是泊松到达。实际中路由查询请求的到达率要远大于路由更新请求到达率。一般来说,路由更新请求不会被丢弃,但路由查询请求就不一定了,如果网络拥塞,或者分组排队时间过长,都有可能造成分组被丢弃,自然路由查询请求也就被丢弃了。在实际路由器中,路由查询和路由更新一般没有优先级区别。可以把路由表做为一个服务者

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论