CIDR詳解和ip最長地址前綴匹配


1.CIDR是什么

無類域間路由(CIDR)編址方案

摒棄傳統的基於類的地址分配方式,允許使用任意長度的地址前綴,有效提高地址空間的利用率。
就是一個ip加一個網絡掩碼,不過這個掩碼不是之前只有3個值(A類:8,B類:16,C類:24),而是0-32隨意的一個值。
例如:
208.12.128.0/17
 

2.如何理解CIDR格式

上圖
 
可以理解為一個從0到(2^32-1)長的線段.
掩碼32表示n個ip的點,數量n是2^32.
掩碼31表示n個小線段1,每個線段1包含2(2^(32-31))個ip點,數量n是2^31.
掩碼30表示n個小線段2,每個線段2包含4(2^(32-30))個ip點,2個小線段1(2^(31-30)),數量n是2^30.
以此類推,可以形象的理解成"刻度尺".
 

3.每個CIDR之間的關系

1.相離
見上圖
208.12.16/24
208.12.21/24
 
2.相近
見上圖
208.12.16/24
208.12.17/24
 
3.包含
如圖
208.12.21/24
208.12.16/20
 
為什么2個CIDR不能相交?
2個CIDR假設為ip1/mask1,ip2/mask2.
mask3 = (mask1 > mask2) ? mask2:mask1;
ip1/(mask3) 和ip2/(mask3)只有相等和不相等2種情況。
不相等:相離或相近
相等:包含
形象的可以想象下“刻度尺”,其中就沒有相交的情況。
 

4.ip最長地址前綴匹配

1.窮舉法
已知一個ip假設為208.12.16.188
查找hash表,key為(ip & mask)
其中mask從32遞減到0
最壞時間復雜度=O(32)*hash查找
 
2.最長前綴匹配
ip地址就是一個32bit的數,構建一個bit前綴樹進行最長前綴匹配。
最壞時間復雜度=O(32)
 
3.線性表的2分查找
算出每一個CIDR的(ip & mask)值,按此值排序(從小到大)
當要查詢一個ip地址時,假設為ip1,找出>ip1的第一個值,此值的左面的值假設為(ip2 & mask2)
判斷一下 ip1 & mask2 是否=ip2(根據需要要可以判斷一下此ip段的超集,構建線性表時,超集關系就可以得出)。
最壞時間復雜度=O(lg(n)),n為CIDR的數量。
 
 
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM