在Cisco IOS 10.0之后的版本里面,就出现了一条命令,ip classless命令,这条命令的作用是让路由器工作在无类模式下,也就是如果关闭这条命令,路由器就会工作在有类模式下,那有什么区别呢,本文将做一个探究。
实验现象
![实验拓扑](/2017/01/11/guan-yu-si-ke-lu-you-qi-gong-zuo-zai-you-lei-mo-shi-xia-de-wen-ti/922964303.png)
两台路由器,我们想办法让R1的路由表变成如下情况:
R1#show ip route
Gateway of last resort is not set
C 192.168.12.0/24 is directly connected, Ethernet0/0
172.16.0.0/32 is subnetted, 2 subnets
O 172.16.1.1 [110/11] via 192.168.12.2, 00:08:56, Ethernet0/0
O 172.16.2.1 [110/11] via 192.168.12.2, 00:08:56, Ethernet0/0
S 172.0.0.0/8 [1/0] via 192.168.12.2
R2上面三个loopback接口,分别为172.16.1.1/24、172.16.2.1/24、172.16.3.1/24。然后我只宣告了1.1和2.1的地址进入OSPF。导致R1没有学习到172.16.3.1/24的路由。为了保证可达性,我在R1上加了一条超网静态路由。
ip route 172.0.0.0 255.0.0.0 192.168.12.2
最终让路由表呈现上面一种形态,按照我们之前的理解,路由表会最长匹配原则,我如果去访问172.16.3.1的话,在172.16.0.0/32这个子网里面是没有被匹配中的,所以肯定会匹配上172.0.0.0/8,事实上我们去ping的时候,也确实通了。
R1#ping 172.16.3.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 172.16.3.1, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 28/34/40 ms
我们查看R1的配置的时候,发现默认情况下就开启了ip classless(在running-config中不显示,这个为默认的配置),我们尝试关闭这条命令:
R1(config)#no ip classless
然后再次尝试去ping 172.16.3.1
R1#ping 172.16.3.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 172.16.3.1, timeout is 2 seconds:
.....
Success rate is 0 percent (0/5)
然后会发现在路由表一样的情况下,路由器对同样的数据包的处理方式不一样。
总结
IP classless的作用:
1、ip classless这条命令是作用于路由转发进程的,告诉路由器工作在无类环境下
2、它能让路由器超越有类网络的边界而根据最长匹配条目来转发数据包;
3、当目的网络没有出现在路由表中时通过默认路由转发数据包,而不是简单的丢弃
4、如果路由器工作在有类环境下,当目的网络出现在路由表中,但没有具体的网络匹配时,路由器将丢弃数据包。