一条完整的路由信息是由:前缀(网络号)+前缀长度(掩码长度)=完整的路由条目
前缀列表:
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所包含的路由明细,你才能够自己去抓路由,抓的更精确更精短。
还是要多做实验,才能理解,如果有写错的欢迎私信