一條完整的路由信息是由:前綴(網絡號)+前綴長度(掩碼長度)=完整的路由條目
前綴列表:
ip prefix-list {list-name I list-number} [seq seq-value] {deny I permit} network/length [ge ge-νalue] [le le-value]
命令解釋:
list-name:創建的前綴列表名稱(區分大小寫)
list-number:創建的前綴列表編號
seq seq-value:prefix-list 語句的32 位序列號,用於確定過濾時語句的處理順序。默認序列號以5的步長遞增(5、10、15 等),方便後期插入或刪除,seq序列號可以省略不寫,系統自動遞增。
deny I permit:匹配時採取的措施拒絕或者匹配
network/length:要匹配的前綴長度
ge ge-νalue:要匹配的前綴長度範圍,ge代表大於或等於意思
le le-νalue:要匹配的前綴長度範圍,le代表小於或等於意思
關鍵字ge和le都是可選的,它們用於要匹配前綴長度的範圍,ge和le必須滿足以下條件:
length < ge-value < le-value <=32
上邊條件的意思是:前綴長度的值要小於ge的值,ge的值要小於le值,le值小於等於32
舉個例子:
系統提示:% 172.16.1.0 /24的前綴範圍無效,請確保:len < ge-value <= le-value
因爲ge沒有使用規範,所以上邊prefix-list這樣寫是不行的,系統會報錯,你ge的值必須大於network/length的值。
ge和le在使用中還有其他隱含語意:
不寫ge和le那麼ge=le=network/length
只寫le不寫ge那麼ge= network/length
只寫ge不寫le那麼le=32
例一:
Router(config)#ip prefix-list 10 permit 172.16.1.0/24
(匹配前24位172.16.1.* ,掩碼必須爲24位)
上邊prefix-list沒有寫ge和le,那麼ge和le的值都等於network/length也就是/24。系統將使用/24這個值去嚴格匹配路由的前綴和前綴長度兩部分。(不懂前綴和前綴長度的請看文章第一句話)
下邊:
網絡號:172.16.1.0/24
廣播地址:172.16.1.255
可用IP範圍:172.16.1.1~172.16.1.254
上邊的路由都會被上邊的prefix-list條目匹配進來
但是像下邊:
172.16.1.0/25
172.16.1.0/26
172.16.1.0/27
這些路由,但凡你掩碼不是/24的,是一定不會被上邊的prefix-list條目匹配進來的,因爲你的掩碼部分和上邊前綴列表所匹配的掩碼範圍是不一樣的。
例二:
Router(config)#ip prefix-list 10 permit 172.16.1.0/24 le 25
(匹配前24位:172.16.1.* ,掩碼必須爲24位到25位之間的)
上邊prefix-list沒有寫ge的值,這個時候ge的值是等於network/length也就是/24的,所以prefix-list意思是先把掩碼是/24到/25的路由挑選出來,然後在按照/24的network/length匹配
下邊:
網絡號:172.16.1.0/24
廣播地址:172.16.1.255
可用IP範圍:172.16.1.1~172.16.1.254
------------------------
網絡號:172.16.1.0/25
廣播地址:172.16.1.127
可用IP範圍:172.16.1.1~172.16.1.126
------------------------
網絡號:172.16.1.128/25
廣播地址:172.16.1.255
可用IP範圍:172.16.1.129~172.16.1.254
上邊的路由都會被上邊的prefix-list條目匹配進來
但是像下邊:
172.16.1.0/26
172.16.1.0/27
172.16.1.0/28
172.16.1.0/29
172.16.1.0/30
這些路由,但凡你掩碼不是/24的,是一定不會被上邊的prefix-list條目匹配進來的,因爲你的掩碼部分和上邊前綴列表所匹配的掩碼範圍是不一樣的。
大家看下上邊標紅色的/25掩碼的路由,172.16.1.0/25,關於這條路由其實是有2個子網的分別是:
第1個子網:
172.16.1.0/25
網絡號:172.16.1.0
廣播地址:172.16.1.127
可用IP範圍:172.16.1.1~172.16.1.126
第2個子網:
172.16.1.128/25
網路號:172.16.1.128
廣播地址:172.16.1.255
可用IP範圍:172.16.1.129~172.16.1.254
所以上邊的prefix-list實際上是把172.16.1.128/25這個網絡內的IP也都給匹配出來了(自己可以實驗)
這就是你這條prefix-list所匹配出的範圍。如果你一但加了ge和le兩個參數,那麼前綴列表是先看ge和le的參數的,它就看你這條路由的掩碼是不是在我ge和le所寫的範圍內,如果在範圍內,這個時候纔會看前邊的network/length的參數。
這就是爲什麼172.16.1.128/25會被匹配進來的原因了,因爲首先這條路由它的掩碼是/25位的,其次它的前綴部分是172.16.1.*的
例三:
Router(config)#ip prefix-list 10 permit 172.16.1.0/24 ge 25
Router(config)#ip prefix-list 10 permit 172.16.1.0/24 ge 25 le 32
(匹配前24位:172.16.1.* ,掩碼必須爲25-32位)
上邊第一條語句和第二條標紅的語句含義是一樣的,上邊prefix-list沒有寫le的值,這個時候le的值是小於等於/32的,所以prefix-list意思是先把掩碼是/24到/32的路由挑選出來,然後在按照/24的network/length匹配。
下邊:
網絡號:172.16.1.0/24
廣播地址:172.16.1.255
可用IP範圍:172.16.1.1~172.16.1.254
------------------------
網絡號:172.16.1.0/25
廣播地址:172.16.1.127
可用IP範圍:172.16.1.1~172.16.1.126
------------------------
網絡號:172.16.1.128/25
廣播地址:172.16.1.255
可用IP範圍:172.16.1.129~172.16.1.254
------------------------
網絡號:172.16.1.0/26
廣播地址:172.16.1.63
可用IP範圍:172.16.1.1~172.16.1.62
------------------------
網絡號:172.16.1.64/26
廣播地址:172.16.1.127
可用IP範圍:172.16.1.65~172.16.1.126
------------------------
網絡號:172.16.1.128/26
廣播地址:172.16.1.191
可用IP範圍:172.16.1.129~172.16.1.190
------------------------
網絡號:172.16.1.192/26
廣播地址:172.16.1.255
可用IP範圍:172.16.1.193~172.16.1.254
------------------------
網絡號:172.16.1.0/27
廣播地址:172.16.1.31
可用IP範圍:172.16.1.1~172.16.1.30
------------------------
網絡號:172.16.1.32/27
廣播地址:172.16.1.63
可用IP範圍:172.16.33.~172.16.1.62
------------------------
網絡號:172.16.1.64/27
廣播地址:172.16.1.95
可用IP範圍:172.16.1.65~172.16.1.94
------------------------
網絡號:172.16.1.96/27
廣播地址:172.16.1.127
可用IP範圍:172.16.1.97~172.16.1.126
------------------------
網絡號:172.16.1.128/27
廣播地址:172.16.1.159
可用IP範圍:172.16.1.129~172.16.1.158
------------------------
網絡號:172.16.1.160/27
廣播地址:172.16.1.191
可用IP範圍:172.16.1.161~172.16.1.190
------------------------
網絡號:172.16.1.192/27
廣播地址:172.16.1.223
可用IP範圍:172.16.1.193~172.16.1.222
------------------------
網絡號:172.16.1.224/27
廣播地址:172.16.1.255
可用IP範圍:172.16.1.225~172.16.1.254
上邊列出的路由只是ip prefix-list 10 permit 172.16.1.0/24 ge 25這條prefix-list的一小部分,我懶得列出其他的路由條目了。我只列到了/24到/27之間的路由條目,從上邊列出可以看出,/25的掩碼能劃分2個網絡,/26能劃分出4個網絡,/27能劃分出8個網絡。上邊的prefix-list把這個/x的掩碼能劃分出的所有地址塊都給匹配進來了。
/28能劃分16個網絡,/29能劃分出32個網絡,之所以寫了這麼多是想讓你明白,上邊的前綴列表所匹配到的路由條目到底有哪些。
-----------------------------------------------------手動分割------------------------------------------------------------------------
例四:
172.16.4.0/24
172.16.5.0/25
現在要求你用一條prefix-list把這兩條路由儘量的匹配出來,我們可以這麼寫:
Router(config)#ip prefix-list 10 permit 172.16.4.0/23 ge 24 le 25
你要同時精確精短的匹配出這兩條路由,你可以算一下,我們把兩條路由拆分下:
172.16.0000 0100.0
172.16.0000 0101.0
從上邊能夠看出第3個8位組(拆分成二進制的那段)標紅的部分都是一樣的,標紅的部分一共有7位。
第一個8位組的8位+第二個8位組的8位+第三個8位組7位=23位,現在就算出了想要匹配住172.16.4.0/24和172.16.5.0/25這兩條路由的network/length部分也就是172.16.4.0/23,然後因爲這兩條路由的掩碼是不一樣的,一個是/24的一個是/25的,所以我們要用到prefix-list的ge和le兩個參數了
所以得出ge 24 le 25,這句話可以理解成,匹配出掩碼/24到/25的路由條目,然後在去看network/length部分的值。
細心點就會發現上邊我提到了儘量兩個字,這條prefix-list其實還多匹配了兩條路由,分別是:172.16.4.128/25和172.16.5.0/24
例五:
172.16.4.0/24
172.16.5.0/24
172.16.6.0/25
172.16.7.0/26
現在要求你用一條prefix-list把這兩條路由儘量的匹配出來,我們可以這麼寫:
Router(config)#ip prefix-list 10 permit 172.16.4.0/22 ge 24 le 26
你要同時精確精短的匹配出這兩條路由,你可以算一下,我們把兩條路由拆分下:
172.16.0000 0100.0
172.16.0000 0101.0
172.16.0000 0110.0
172.16.0000 0111.0
從上邊能夠看出第3個8位組(拆分成二進制的那段)標紅的部分都是一樣的,標紅的部分一共有6位
第一個8位組的8位+第二個8位組的8位+第三個8位組6位=22位,現在就算出了想要匹配住172.16.4.0/24,172.16.5.0/24,172.16.6.0/25,172.16.7.0/26這四條路由的network/length部分也就是172.16.4.0/22,然後因爲這四條路由的掩碼是不一樣的,一個是/24的一個是/25還有一個是/26的,所以我們要用到prefix-list的ge和le兩個參數了
所以得出ge 24 le 26,這句話可以理解成,匹配出掩碼/24到/26的路由條目,然後在去看network/length部分的值。
network/length部分的值其實可以口算的,只要你VLSM會算就可以,就像上邊4條路由從172.16.4.0到172.16.7.0想要匹配這4條路由那麼地址塊大小一定要比4大或者是相同的地址塊。
你算一個2的幾次方是大於或等於4的,2^2=4,所以起碼要借2位,然後你就用24-2=22這樣就能很快算出了。爲什麼是用24減,因爲我們是在第3個8位組做操作,1個8位組是8位,3個8位組就是24位。具體子網劃分,推薦《CCNA學習指南》這本書。
細心點就會發現上邊我提到了儘量兩個字,這條prefix-list其實還多匹配了15條路由,分別是:
172.16.4.128/25
172.16.4.64/26
172.16.4.128/26
172.16.4.192/26
------------------------
172.16.5.128/25
172.16.5.64/26
172.16.5.128/26
172.16.5.192/26
------------------------
172.16.6.0/24
172.16.6.128/25
172.16.6.64/26
172.16.6.128/26
172.16.6.192/26
------------------------
172.16.7.0/24
172.16.7.128/25
-----------------------------------------------------手動分割------------------------------------------------------------------------
例六:
下邊是一些特殊的prefix-list寫法:
ip prefix-list test permit 0.0.0.0/0
匹配默認路由
ip prefix-list test permit 0.0.0.0/0 ge 32
匹配所有主機路由,怎麼理解這句話,就是路由表中所有/32的主機路由條目,不管你是ABC三類哪裏的主機路由條目,反正你只要是/32的就會被匹配住
ip prefix-list test permit 0.0.0.0/0 le 32
匹配所有路由,相當於permint any
個人覺得prefix-list如果簡單的用下可能都會用,但是自己還是要搞清楚這條perfix-list都到底匹配了哪些路由,只有你搞清楚了這條perfix-list所包含的路由明細,你才能夠自己去抓路由,抓的更精確更精短。
還是要多做實驗,才能理解,如果有寫錯的歡迎私信