prefix-list

一条完整的路由信息是由:前缀(网络号)+前缀长度(掩码长度)=完整的路由条目

 

前缀列表:

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

举个例子:

prefix-list

系统提示:% 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

(匹配前24172.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所包含的路由明细,你才能够自己去抓路由,抓的更精确更精短。

还是要多做实验,才能理解,如果有写错的欢迎私信


上一篇:混合整数线性规划——切割平面


下一篇:省选前的做题记录(Round4)