用5個前綴構成的二又線索
發布時間:2014/9/15 21:27:58 訪問次數:1140
對無分類編址的路由表的最簡單的查找算法就是對所有可能的前綴進行循環查找。例如,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。
上一篇:使用二叉線索查找路由表
上一篇:二叉線索這種數據結構的用法