先说下一下基本的概念:
A类的主类网络是/8
B类的主类网络是/16
C类的主类网络是/24
对于VLSM,CIDR都不算是主类网络.
支持子网的行为叫做classless,比如RIPv2 EIRGP OSPF,说白了就是这个路由协议是否传递路由条目的时候带子网掩码
不支持子网的行为,也就是传递路由条目时不带子网掩码,叫做classful-无类,比如RIPv1
一个路由表还未形成的时候,选择什么样的路由协议将影响路由表。
以上就是路由协议的有类、无类行为
下面我们来说下IOS的有类、无类行为
对于IOS的有类、无类的行为不会影响路由表的条目,不会对路由表的建立影响,但是它会对数据包的转发进程影响。
下面我们举一个例子:
对于一个主类网络10.0.0.0/8,如果路由表存在一些它的子网10.1.1.0/24 10.1.2.0/24
当IOS工作在classless时,对于已知的路由条目,路由器会把数据包发到精确的路由条目上去转发。但是对于未知的网络,比如10.11.1.0/24 192.168.1.0/24,如果存在默认路由,那么默认路由会把他们全部发送到默认路由条目上进行转发。
当IOS工作在classful时,环境与上面一样,但是处理过程却截然不同,因为工作在无类行为的路由器,它知道了10.0.0.0/8其中2个子网是10.1.1.0/24 10.1.2.0/24,所以它会认为10.0.0.0/8主类网络内的子网都真实存在于网络中,其实自己没有详细的路由条目而已,所以对于10.11.1.0/24,它会丢弃而不从默认路由走,192.168.1.0/24它会走默认路由。
通过 Ip classless / no ip classless 可以开启、关闭
案例研究:
- R2#show ip route
- Gateway of last resort is 20.1.1.2 to network 0.0.0.0
- 20.0.0.0/24 is subnetted, 1 subnets
- C 20.1.1.0 is directly connected, Ethernet0/1
- 10.0.0.0/24 is subnetted, 1 subnets
- C 10.1.1.0 is directly connected, Ethernet0/0
- 30.0.0.0/24 is subnetted, 1 subnets
- C 30.1.1.0 is directly connected, Ethernet0/2
- S* 0.0.0.0/0 [1/0] via 20.1.1.2
- R1 ping 8.8.8.8
- 在R2上开启debug ip packet detail
- Nov 21 15:24:18.859: IP: tableid=0, s=10.1.1.2 (Ethernet0/0), d=8.8.8.8 (Ethernet0/1), routed via RIB
- Nov 21 15:24:18.859: IP: s=10.1.1.2 (Ethernet0/0), d=8.8.8.8 (Ethernet0/1), g=20.1.1.2, len 100, forward
- Nov 21 15:24:18.863: ICMP type=8, code=0
- //对于未知网络从默认路由发送出去
当ping 10.0.0.0/8主类里的子网的时候 是可以发送出去的。说明IOS默认是classless行为
当no ip classless,并且这里必须要关闭ip cef
- R2(config)#
- Nov 21 15:42:47.819: IP: s=10.1.1.2 (Ethernet0/0), d=10.1.6.1, len 100, unroutable
- Nov 21 15:42:47.819: ICMP type=8, code=0
因为路由器认为10.1.6.1是主类10.0.0.0/8的其中一个子网,它自己不知道路由条目,但是它认为它真是存在,所以丢弃。
注意:这个时候路由器会发送目的主机不可达的信息给源
- Nov 21 15:42:47.819: ICMP: dst (10.1.6.1) host unreachable sent to 10.1.12