在CISCO路由器上,缺省你可以使用全1网段,但不能使用全0网段.当你在CISCO路由器上给端口定义IP地址时,该IP地址不能落在全0网段上. 如果配了,会得到一条错误信息.使用IP SUBNET-ZERO命令之后,你才能使用全0网段. 但是使用了IP SUBNET-ZERO命令之后, 如果路由协议使用的是CLASSFUL的(比如RIP),虽然你的定义成功了,但那个子网掩码还是不会被RIP带到它的路由更新报文中.即,IP SUBNET-ZERO 命令不会左右路由协议的工作. 在TCP/IP协议中,全0和全1网段因为具有二意性而不能被使用.
ip subnet-zero 命令的意义
IP subnet-zero 是用来限制router不可使用与class相同的subnet.
例如: 把一个class b 的network 172.16.0.0/16 subnet细分. 其中一个细分方式系 172.16.0.0/19, 172.16.32.0/19, 172.16.64.0/19….. 而如果第一个subnet 172.16.0.0/19在没有subnet mask的情形下 (即172.16.0.0) 与它的class network (即172.16.0.0) 相同. 这样会引起routing上的混乱 — 如果一个router 上有一个network 172.16.0.0/19, 而它用rip把这个network告诉它的neighbor router. neighbor router就会将所有要送去172.16.0.0 class 的packet送到这个router…… 以前, RIP是很流行的routing 协议. 但它就没有把subnet mask放入routing table. 当时亦没有太多network admin考虑这个问题. (RFC950提到这个问题) Cisco注意到这个问题, 所以在很早以前的IOS已经限制使用subnet zero. 以前cisco router 预设是不可使用 subnet zero (即no ip subnet zero是预设的). network admin要输入ip subnet-zero 才可使用. 从12.0开始, ip subnet-zero 是预设(因为已没有太多人使用不含subnbet mask 的routing 协议). 不过network admin还是可以用no ip subnet zero 来限制使用subnet zero
IP Classless命令的使用
如果你有一个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.168.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后方可被使用.