ip classless 和no ip classless
2007-09-30 12:46
如果你有一个CLASS C的IP地址,比如192.168.10.0,你想把它分成8个网段,每个网段内可以有32台主机,你可以这样分:
subnetmask是:255.255.255.224
192.168.10.0 - 31, 网络地址:192.168.10.0,广播地址:192.168.10.31
192.168.10.32 - 63, 网络地址:192.168.10.32, 广播地址:192.168.10.63
192.168.10.64 - 95, 网络地址:192.168.10.64,广播地址:192.168.10.95
192.168.10.96 - 127, 网络地址:192.168.10.96,广播地址:192.168.10.127
192.168.10.128 - 159, 网络地址:192.168.10.128,广播地址:192.168.10.159
192.168.10.160 - 191, 网络地址:192.168.10.160,广播地址:192.168.10.191
192.168.10.192 - 223, 网络地址:192.168.10.192,广播地址:192.168.10.223
192.168.10.224 - 255, 网络地址:192.168.10.224,广播地址:192.168.10.255
即:每个网段32个IP地址,第一个是网络地址,用来标志这个网络,最后一个是广播地址,用来代表这个网络上的所有主机。这两个IP地址被TCP/IP保留,不可分配给主机使用。
另外,第一个子网192.168.10.0 - 31和最后一个子网192.168.10.224 - 255通常也被保留,不能使用,原因是因为第一个子网的网络地址192.168.10.0和最后一个子网的广播地址192.1.68.10.255具有二意性。
先看看这个大C的网络地址和广播地址:
192.168.10.0是它的网络地址,192.168.10.255是它的广播地址.显然,它们分别与第一个子网的网络地址和最后一个子网的广播地址相重了。
那么怎样区分192.168.10.0到底是哪个网络的网络地址呢?
答案是:把子网掩码加上去!
192.168.10.0 255.255.255.0 是大C的网络地址,192.168.10.0 255.255.255.224 是第一个子网的网络地址,192.168.10.255 255.255.255.0是大C的广播地址,192.168.10.255 255.255.255.224是最后一个子网的广播地址。带上掩码,它们的二意性就不存在了。
所以,在严格按照TCP/IP ABCD给IP地址分类的环境下,为了避免二意性,全0和全1网段都不让使用。这种环境我们叫作Classful。在这种环境下,子网掩码只在所定义的路由器内有效,掩码信息到不了其它路由器,比如RIP-1,它在做路由广播时根本不带掩码信息,收到路由广播的路由器因为无从知道这个网络的掩码,只好照标准TCP/IP的定义赋予它一个掩码。比如,拿到10.X.X.X,就认为它是A类,掩码是255.0.0.0;拿到一个204.X.X.X,就认为它是C类,掩码是255.255.255.0。
但在Classless的环境下,掩码任何时候都和IP地址成对地出现,这样,前面谈到的二意性就不会存在,是Classful还是Classless取决于你在路由器上运行的路由协议,一个路由器上可同时运行Classful和Classless的路由协议。RIP是 Classful,它在做路由广播时不带掩码信息;OSPF,EIGRP,BGP4是Classless的,它们在做路由广播时带掩码信息,它们可以同时运行在同一台路由器上。
在Cisco路由器上,缺省你可以使用全1网段,但不能使用全0网段。所以,当在Cisco路由器上给端口定义IP地址时,该IP地址不能落在全0网段上。如果你配了,你会得到一条错误信息。使用IP SUBNET-ZERO命令之后,你才能使用全0网段。
要强调的是,使用了IP SUBNET-ZERO命令之后,如果路由协议使用的是Classful的(比如RIP),虽然你的定义成功了,但那个子网掩码还是不会被RIP带到它的路由更新报文中。即,IP SUBNET-ZERO 命令不会左右路由协议的工作。
总之,TCP/IP协议中,全0和全1网段因为具有二意性而不能被使用。Cisco 缺省使全1网段可以被使用,但全0网段只有在配置了IP SUBNET-ZERO后方可被使用。
==========================================================
ip classless 作用 【转载】
看了ip classless命令书中的解释,说的还不是很清楚.
关于ip classless问题,给个简单的例子,假设show ip route时在路由表中有以下输出
C 10.1.1.0/24 s0/0
C 10.1.2.0/24 s0/1
S 10.1.3.0/24 s0/0
S 0.0.0.0/0 s0/1
问路由器收到IP包,目的地址10.1.4.1,路由器该如何转发?
问路由器收到IP包,目的地址20.1.4.1,路由器该如何转发?
根据常识大家都会说走默认路由。回答正确,但是这只是在ip classless命令生效的时候。如 果去除这条命令,结果就是去20.1.4.1走默认路由,去10.1.4.1路由器则丢弃!
为什么这样,在没有ip classless命令生效的时候,cisco 路由器找路由记录首先看目的地址 是哪个大的网络号,如现在10.1.4.1的大网络号是10.0.0.0,因为它是A类地址,然后在路由表中找这个大网络号或其子网的相关的记录,如果能找到对应记录则转发,如果找不到则丢弃。为什么不走默认路由?因为现在路由器认为它知道10.0.0.0这个A类地址上的所有子网,例子中只有3个10.1.1.0/24, 10.1.2.0/24 , 10.1.3.02/24,数据包要去的10.1.4.0/24这个子网并不存在,所以将数据包丢掉。
去20.1.4.1则不同,因为路由表中没有20.0.0.0这个大网络号的相关路由记录,所以立刻走默认路由。
总结:ip classless命令其实是影响的路由表查找的方法,最直接的效果就是对默认路由的使用。有了ip classless命令,则路由器查找路由表使用的是最长匹配原则,而不首先考虑目的地址是哪个类的
============================================================
关于classful和classless的路由查询过程(CCIE test)
当一数据包经过一路由器时,我们如何判定路由器是否转发?如转发,将送往什么端口呢?这是由路由查询过程决定的。大家都知道路由协议分classful(如:ripV1,igrp)和classless(ripV2,eigrp,ospf)。但大家是否知道,路由过程(通俗讲就是数据包到一路由器后,路由器如何处理数据包)也有Classful Route Lookup和Classless Route Lookup之分呢?两者之间的根本区别在于:查询路由表时,方法不同。
Classful Route Lookup具体过程是:先匹配目标地址所在的主网络(既:A,B和C类网络)如未找到匹配条目,则drop;否则继续匹配目标网络所在的子网络,如未找到匹配条目,drop;否则转发到相应端口。
Classless Route Lookup具体过程是:一位一位匹配路由条目与目标地址。
举例如下:
TestkingA# show ip route
<some output text omitted>
Gateway of last resort is 10.1.2.2 to network 0.0.0.0
10.0.0.0/24 is subnetted, 2 subnets
R 10.1.3.0 [120/1] via 10.1.2.2, 00:00:00, Serial0/0
C 10.1.2.0 is directly connected, Serial0/0
C 10.1.5.0 is directly connected, Serial0/1
C 10.1.6.0 is directly connected, FastEthernet0/0
R* 0.0.0.0/0 [120/1] via 10.1.5.5, 00:00:00, Serial0/1
Refer to the output of the two show commands in the graphic. If an administrator tries to ping host 10.1.8.5 from host 10.1.6.100, how will the ICP packets be processed by TestkingA?
A. The packets will be discarded.
B. The packets will be routed out the S0/0 interface.
C. The packets will be routed out the S0/1 interface.
D. The packets will be routed out the Fa0/0 interface.
E. The packets will be routed through the 10.1.2.2 gateway
如果rip执行的是一个Classful Route Lookup则,首先匹配10.0.0.0这个主网络,在路由表中可以找到10.0.0.0/24 is subnetted, 2 subnets这一匹配条目;然后匹配10.1.8.0这个子网络,找不到路由条目,所以drop掉数据包;
如果rip执行的是一个Classless Route Lookup则,直接一位一位匹配10.1.8.0这个网络,在路由表中找到R* 0.0.0.0/0 [120/1] via 10.1.5.5, 00:00:00, Serial0/1这一匹配条目,转发到Serial0/1端口。
ripV1,igrp默认情况下是执行Classful Route Lookup的,不过这也可以通过命令ip classless来改变为Classless Route Lookup。