整个路由过程中,查表算法的优劣直接影响了当前和未来因特网网络的整体性能。当前,因特网的规模、链路速度、带宽、流量等都呈指数级增长 ,这对路由器中IP路由查找算法对大容量路由表处理的适应性以及报文转发查表的能力提出了更高要求。路由器是构成因特网的中间节点,其转发性能决定了因特网的整体性能。因此,IP路由查找操作已经成为了当前路由器转发性能的瓶颈之一 。其实路由查找问题本身很简单,但由于其对性能要求很高,因此有很大的难度。通常评价IP路由查表算法的标准主要有高速查找、内存需求小、更新时间短、实现的灵活性强、能够处理真实的大容量路由表以及预处理时间短等。IP 路由查找方案可以分为以下几类:(1)基于精确匹配的改进方案:这种方案一般效率不高,为了找到最佳结果,一般需要log2N步(N 为路由表项的数目);(2)层次方案:这是普遍采用的一种查找方案,在 BSD内核中得到实现 。它最坏情况下的复杂度为O(W),而且需要 32或 128 次(分别对应IPv4 和IPv6)存储访问,效率也不高;(3)硬件实现:这种方法需要昂贵的内容寻址存储器,而且扩展性不好;(4)基于协议的解决方案:现在的IP交换和标记交换技术就属于这种方式;这种方案也无法完全避免搜索,特别是边界路由器仍然需要执行繁重的路由决策 。
软件路由查找算法主要有基于二分支的算法,基于多分支的算法,还有前缀维度上的二分搜索算法 、最差性能受限的近似最优路由查找算法 、多路前缀值范围搜索树算法等。基于二分法的算法有Redix Rrie、Patricia、Multiway 和Multicolumn等。这些算法的基本思想是根据前缀值的二进制位构建二叉树,在检索时用目标地址作为索引,在二叉树中遍历;当找到一个匹配的前缀时,将其作为到目前为止所发现的最长前缀,继续搜索更长的匹配前缀,直到再没有分支可以搜索时,搜索结束,此时所记录的最长前缀就是所要寻找的最长前缀匹配。在基于多分支的算法二叉树算法中,每个搜索步骤能够将第一步开始的整个232搜索空间减少一半,而多叉树可以令每个搜索步骤减少更多的搜索空间。此类算法的典型有 LC Trie树算法 、受控前缀扩展算法 。可变分支数目的多分支Trie树结构,其搜索过程与二叉树类似,只是由一位比较变成了多位比较以决定下一步搜索的子树。Srinivasan对分支数目和层次数目的选取做了详细的分析,并提出了多分支树的一般结构,所有基于Trie树的算法都可以看作是该一般结构的特例或变形。此外他还提出了前缀扩展技术,以耗费更多内存为代价来避免最长前缀匹配所带来的回溯问题。其它软件算法有前缀维度上的二分搜索算法 、最差性能受限的近似最优路由查找算法 、多路前缀值范围搜索树算法等。这些算法并不是对整个 前缀地址空间进行搜索,因此对于地址宽度的敏感性较低。前者的搜索时间复杂度是O(log2w),而后两个算法的搜索时间复杂度与地址宽度无关。因此,这几个算法能够用于 IPv6的路由查找。
硬件路由查找算法有24-8 DIR算法、基于TCAM(三值 TCAM)的算法。24-8 DIR算法实际是一种用硬件实现的多分支前缀扩展算法。该算法基于对于前缀长度分布的统计数据长度大于24的前缀非常少,因此该算法将所有前缀全部展开为24位前缀。所以,它 只 有 两级:第一级224个分支,若有第二级节点,则该第一级节点有28个二级子节点。在一般情况下只需一次访存即可找到目标路由,而对于长度大于24的前缀则最多只需要进行两次访存。因此,这是一种“以存储器速度进行路由查找”的算法,也是典型的用空间换时间的算法。