当ip classless命令关闭时,路由器在查询路由时只看路由表中的主类条目。
Cisco早期的IOS是缺省关闭该命令的,这也是为什么cisco路由器的路由表中一直会有诸如以下条目出现的原因
1.0.0.0/32 is subnetted, 1 subnets
C 1.1.1.1 is directly connected, Loopback0
172.30.0.0/24 is subnetted, 1 subnets
C 172.30.1.0 is directly connected, Ethernet0
其实不管是否开启ip classless,Cisco路由表一直会有类似于“172.30.0.0/24 is subnetted, 1 subnets”的主类条目,它显示该网络被24位的掩码进行子网划分(然后再列出具体的子网),这是因为Cisco软件早期是将IPv4子网分类别对待的(那个时候,查询路由只看主类号,不看具体子网号)。
后来开启ip classless,cisco路由器才将IPv4视为无类别的,在查找路由时,会比较子网号。
Juniper路由表就没有这种情况,因为juniper一向对IPv4视为无类别的(juniper出来晚嘛)
例如:
1.1.2.2/32 *[Direct/0] 00:07:03
> via lo0.2
1.1.12.0/24 *[Direct/0] 00:04:43
> via fxp2.0
1.1.12.2/32 *[Local/0] 00:04:43
Local via fxp2.0
最后说一下,在Cisco设备上,如果关闭ip classless,那么路由器在向一个直连主类网络的未知子网发数据包时,会出现问题,这点就可以用实验手册上关于ip classless的实验来验证了。
另一篇
-----172.16.1.1--router1-10.1.1.1---1.2-router2---172.16.2.1-----
router1:
int f0/0
ip add 172.16.1.1 255.255.255.0
no sh
int f0/1
ip add 10.1.1.1 255.255.255.0
no sh
router 0.0.0.0 0.0.0.0 10.1.1.2
router2
router 0.0.0.0 0.0.0.0 10.1.1.1
pc1的地址为172.16.1.2 pc2---172.16.2.2
配好后就能通了,路由的默认为ip classless
加上no ip classless后就不通了,这是个老的问题。
ip classless命令最早在cisco IOS 10.0被介绍,在cisco IOS 11.3后就为默认的了。
比如:在一个RIP协议的网络中(ip classful ),一个路由器的路由表如下:
router# show ip route
....
172.30.0.0/16 is variably subnetted, 2 subnets, 2 masks
R 172.30.32.0/20 [120/1] via 10.1.1.2
R 172.30.32.0/24 [120/1] via 10.1.1.1
S* 0.0.0.0/0 [1/0] via 10.1.1.3
如果收到一条目的地是172.30.254.1的路该如何转发?大家会认为下一条是10.1.1.3 吧,因为
没有具体匹配就按默认路由转发了。其实是错误的,这时路由器会丢弃这个数据包。因为路由器
知道172.30.0.0/16这个有类网络,下一步查找匹配的子网,但不知晓关于172.30.254.1的具体子网的情况如何,所以丢弃。但如果给路由器配置了 ip classless这条命令的话,路由器就会按默认路由转发到10.1.1.3 ,因为这时它就不管什么有类无类了,有最长匹配的就发,没有就按默认路由。
在此补充一下:
有类路由的选择过程:
1,匹配主类网络如果没有则drop ;
2,如果匹配主类网络则查到子网如果有匹配的转发没有则drop
无类路由选择的过程:
1,host address
2, subnet
3, group os subnet (summary net)
4, major network
5,default address