通配符是一个用于决定哪些IP地址位该精确匹配(0代表精确匹配)哪些地址位被忽略的32位数值,通常用于处理访问控制列表(ACL)、OSPF和EIGRP等路由协议的网络通告。

  由于最先接触的是子网掩码(NetMask)而子网掩码是连续的,只能是诸如      

  11111111.00000000.00000000.00000000而不能为11111111.10100000.00000000.00000000,即出现0之后就能再出现1了,这就是为什么子网掩码只能由128、192、224、240、248、252、254、255这8 个数值构成。这导致我想当然的认为通配符也必须连续,即1之后应全为1,而不能再有0的出现。

  注意:通配符中0代表精确匹配;而1代表任意匹配,这与子网掩码恬好相反,所以很多人叫它反掩码,并且有一个简单的算法是使用4个255减去子网掩码,这种做法只适合一小部分应用,要将之使用好还得更深入了解。

  在开启此OSPF、EIGRP等路由协议后,均要使用network将网络通告进去,RIP不需要通配符掩码,而它只能通告主类网络,如:三个接口:10.1.1.1/24、10.1.2.1/24、10.1.3.1/24,这三个接口均会被通告进去,因为它们隶属于10.0.0.0这上主类网段。假如我只想通告10.1.1.1/24,只能开启被动接口,或使用访问控制列表进行控制。

  而使用OSPF、EIGRP等需要通配符掩码,通过它可以控制通告路由网段。上面的例子使用OSPF时,可以用network 10.1.1.1 0.0.0.255,呵呵恬好是用4个255来减子网掩码。假如接口数增多,从10.1.1.0网段到10.1.15.0网段,均使用OSPF进行通告,是使用network一条一条发布?非也,只需要一条network 10.1.1.0 0.0.15.255即可,为什么是0.0.15.255?

  我们将ip地址换为二进制:

CISCO 通配符_休闲

  前20位均一样,都需要精确匹配,所以全为0,只有中间4位不一样,所以任意匹配,即1.最后8位均为0,使用精确匹配。所以通配符掩码为:0000 0000 0000 0000 0000 1111 0000 0000即0.0.15.0,在实际应用中,我们需要通告每个网段中的IP,所以我们任意匹配最后一位IP即用255。假如我们只需要通知网段地址,那就得使用0.0.15.0这个通配符掩码了。

  继续上面的例子,现在我们只通告奇类网段,该怎么做?

  奇数化为二进制时,最末都是1,所以我们精确匹配最后暗绿色区域的最末一位即可,掩码为0000 0000 0000 0000 0000 1110 0000 0000即network 10.1.1.0 0.0.14.255,这个例子也说明了通配符掩码支持不连续!

  再看下面的情形:

  有六个网段:10.1.1.0/24、10.1.2.0/24、10.1.3.0/24、10.1.16.0/24、10.1.17.0/24、10.1.18.0/24.

  怎样使用一条将之全通告进去。步骤与上面相同:

  将之全化为二进制形式:

CISCO 通配符_休闲_02

  所以掩码为:

CISCO 通配符_通配符_03

  即:0.0.19.0

  那么我们多添加了多少条网段进去?总共通告了2^3=8个网段多添加进8-6=2个网段。

  总结:

  1. 与子网掩码的区别与联系:不是简单的“正与反”的关系,都是使用32位二进制表示,子网掩码用于子网的划分,1代表网络,0代表主机,必须连续。通配符用于对地址的匹配,0代表精确匹配,1代表任意匹配,可以不连续。

  2. 应用:OSPF、EIGRP等网络地址通告、访问控制列表及前缀控制列表中对IP地址的匹配。