用5个前缀构成的二又线索
发布时间:2014/9/15 21:27:58 访问次数:1157
对无分类编址的路由表的最简单的查找算法就是对所有可能的前缀进行循环查找。例如,NAT-10DC-2.5A给定一个目的地址D。对每一个可能的网络前缀长度M,路由器从D中提取前M个位成一个网络前缀,然后查找路由表中的网络前缀。所找到的最长匹配就对应于要查找的路由。
这种最简单的算法的明显缺点就是查找的次数太多。最坏的情况是路由表中没有这个路由。在这种情况下,算法仍要进行32次(具有32位的网络前缀是一个特定主机路由)。就是要找到一个传统的B类地址(即/16),也要查找16次。对于经常使用的默认路由,这种算法都要经历31次的不必要的查找。
为了进行更加有效的查找,通常是把无分类编址的路由表存放在一种层次的数据结构中,然后自上而下地按层次进行查找。这里最常用的就是二叉线索(binary trie)①,它是一种特殊结构的树。IP地址中从左到右的比特值决定了从根节点逐层向下层延伸的路径,而二叉线索中的各个路径就代表路由表中存放的各个地址。
用一个例子来说明二叉线索的结构。图中给出了5个lP地址。为了简化二叉线索的结构,可以先找出对应于每一个lP地址的唯一前缀(unique prefix)。所谓唯一前缀就是在表中所有的IP地址中,该前缀是唯一的。这样就可以用这些唯一前缀来构造二叉线索。在进行查找时,只要能够和唯一前缀相匹配就行了。
从二叉线索的根节点自项向下的深度最多有32层,每一层对应于lP地址中的一位。一个lP地址存入二叉线索的规则很简单。先检查lP地址左边的第一位,如为0,则第一层的节点就在根节点的左下方;如为1,则在右下方。然后再检查地址的第二位,构造出第二层的节点。依此类推,直到唯一前缀的最后一位。由于唯一前缀一般都小于32位,因此用唯一前缀构造的-叉线索的深度往往不到32层。图中较粗的折线就是前缀0101在这个二叉线索中的路径。二叉线索中的小圆圈是中间节点,而在路径终点的小方框是叶节点(也叫作外部节点)。每个叶节点代表一个唯一前缀。节点之间的连线旁边的数字表示这条边在唯一前缀中对应的比特是0或1。
对无分类编址的路由表的最简单的查找算法就是对所有可能的前缀进行循环查找。例如,NAT-10DC-2.5A给定一个目的地址D。对每一个可能的网络前缀长度M,路由器从D中提取前M个位成一个网络前缀,然后查找路由表中的网络前缀。所找到的最长匹配就对应于要查找的路由。
这种最简单的算法的明显缺点就是查找的次数太多。最坏的情况是路由表中没有这个路由。在这种情况下,算法仍要进行32次(具有32位的网络前缀是一个特定主机路由)。就是要找到一个传统的B类地址(即/16),也要查找16次。对于经常使用的默认路由,这种算法都要经历31次的不必要的查找。
为了进行更加有效的查找,通常是把无分类编址的路由表存放在一种层次的数据结构中,然后自上而下地按层次进行查找。这里最常用的就是二叉线索(binary trie)①,它是一种特殊结构的树。IP地址中从左到右的比特值决定了从根节点逐层向下层延伸的路径,而二叉线索中的各个路径就代表路由表中存放的各个地址。
用一个例子来说明二叉线索的结构。图中给出了5个lP地址。为了简化二叉线索的结构,可以先找出对应于每一个lP地址的唯一前缀(unique prefix)。所谓唯一前缀就是在表中所有的IP地址中,该前缀是唯一的。这样就可以用这些唯一前缀来构造二叉线索。在进行查找时,只要能够和唯一前缀相匹配就行了。
从二叉线索的根节点自项向下的深度最多有32层,每一层对应于lP地址中的一位。一个lP地址存入二叉线索的规则很简单。先检查lP地址左边的第一位,如为0,则第一层的节点就在根节点的左下方;如为1,则在右下方。然后再检查地址的第二位,构造出第二层的节点。依此类推,直到唯一前缀的最后一位。由于唯一前缀一般都小于32位,因此用唯一前缀构造的-叉线索的深度往往不到32层。图中较粗的折线就是前缀0101在这个二叉线索中的路径。二叉线索中的小圆圈是中间节点,而在路径终点的小方框是叶节点(也叫作外部节点)。每个叶节点代表一个唯一前缀。节点之间的连线旁边的数字表示这条边在唯一前缀中对应的比特是0或1。
上一篇:使用二叉线索查找路由表
上一篇:二叉线索这种数据结构的用法