网络配置参数是对于一个优秀的网管员来说,并不陌生,但在具体的细节设置上,可能一时疏忽,设置不当,造成网络不通。子网掩码(subnet mask)网络参数是每个网管必须要掌握的基础知识,只有掌握它,才能够真正理解TCP/IP协议的设置。下面根据在实践工作中碰到两个有代表性的案例加以分析,来深入浅出地讲解什么是子网掩码,让我们不要小视网络参数-子网掩码的配置。
案例1:不同的子网掩码设置导致网络不通(默认的子网掩码)
故障现象描述:局域网内有两台主机A、B,彼此之间无法连接,而且在互相发送测试数据包时出现以下出错信息。 在主机A上PING 主机B,显示“Destination host unreachable”,即目标主机不可达,在主机B上PING主机A,显示“Request timed out ”,即网络超时。
故障网络环境:
               IP地址        子网掩码       
主机A   192.168.1.1     255.255.255.0
主机B   192.168.2.1     255.255.0.0 
    网络配置参数:在操作系统中,每个网卡都得配置一个IP地址,与IP地址一起设置的必定还有子网掩码、默认网关、DNS服务器地址等。其实这四个要素中,必须要设置的只有IP地址和子网掩码,默认网关、DNS服务器地址有时可以不设,这里我们暂不讨论它们。
为什么要引入子网掩码:
  IP地址在设计时就考虑到地址分配的层次特点,将每个IP地址都分割成网络号和主机号两部分,以便于IP地址的寻址操作。IP地址的网络号和主机号各是多少位呢?如果不指定,就不知道哪些位是网络号、哪些是主机号,这就需要通过子网掩码来实现。
  子网掩码的设定必须遵循一定的规则。与IP地址相同,子网掩码由1和0组成,且1和0分别连续。子网掩码的长度也是32位,左边是网络位,用二进制数字“1”表示,1的数目等于网络位的长度;右边是主机位,用二进制数字“0”表示,0的数目等于主机位的长度。这样做的目的是为了让掩码与ip地址做AND运算时用0遮住原主机数,而不改变原网络段数字,而且很容易通过0的位数确定子网的主机数(2的主机位数次方-2,因为主机号全为1时表示该网络广播地址,全为0时表示该网络的网络号,这是两个特殊地址)。只有通过子网掩码,才能表明一台主机所在的子网与其他子网的关系,使网络正常工作。
子网掩码的术语是扩展的网络前缀码,它不是一个地址,但是可以确定一个网络层地址哪一部分是网络号,哪一部分是主机号,1 的部分代表网络号,掩码为 0的部分代表主机号。子网掩码的作用就是获取主机 IP的网络地址信息,用于区别主机通信不同情况,由此选择不同路由。根据子网掩码格式可以发现,子网掩码有:0.0.0.0;255.0.0.0;255.255.0.0;255.255.255.0;255.255.255.255五种,其中 A类地址的默认子网掩码为 255.0.0.0;B类地址的默认子网掩码为 255.255.0.0;C类地址的默认子网掩码为:255.255.255.0,这也是我们平常在局域网中最常用的。
比如主机A的IP地址为192.168.1.100,子网掩码为255.255.255.0;主机B的IP地址为192.168.1.101,子网掩码为255.255.225.0。大家都知道这二台主机在同一网段,相互能PING通。
这样看来上述案例中出现不通的现象就不奇怪了。但我们要深入分析理解子网掩码在网络通讯时的作用。不能简单的认为主机A处在192.168.1.0网段,主机B处在192.168.0.0网段,所以不能PING通。但为什么会出现不同的错误提示信息呢?下面我们来深入分析一下:
每台主机事先会把自己IP和自己的子网掩码进行“与”操作,得到自己的网段号,如主机A处在192.168.1.0网段,主机B处在192.168.0.0网段。
1、在主机B上PING主机A的过程
主机B向主机A发数据包时,会把主机A的IP与主机B的子网掩码进行“与”操作,得到网络号是192.168.0.0,主机B会认为主机A与自己在同一网段,所以数据包会顺利发出。
 主机A由于与主机B在同一网段,肯定能收到主机B发出的数据包,由于PING操作要求主机A回应一个响应包。这样主机A会把主机B的IP与主机A的子网掩码进行“与”操作,得到网络号192.168.2.0,主机A发现网络号与自己所处的192.168.1.0不在同一网段,由于主机A目前没有设置默认网关,所以对该数据包将进行丢弃操作,结果主机B当然就无法收到主机A的回应包,所以主机B上会显示“Request timed out”,即网络超时。
2、在主机A上PING 主机B
如果在主机A上去PING主机B,根据前面的分析,会把主机B的IP与主机A的子网掩码进行“与”操作,得到网络号是192.168.2.0,主机A会认为主机B与自己不在同一网段,而主机A又没有设置默认网关,所以会显示“Destination host unreachable”,即目标主机不可达。
    案例2:相同的子网掩码设置导致网络不通(自定义子网掩码)
故障现象描述:局域网内有两台主机A、B,彼此之间无法连接,而且在互相发送测试数据包时出现以下出错信息。在主机B上PING主机A,在主机A上PING主机B都显示“Destination host unreachable”。
故障网络环境:
            IP地址        子网掩码     
      主机A   192.168.0.5     255.255.255.248 
      主机B   192.168.0.9     255.255.255.248
    在案例一中,因为子网掩码不一样,导致主机A与主机B在互连时不在同一子网中。现在既然是同一子网掩码,为什么同样不能互连呢?
    问题就在于案例一中我们使用的是默认的子网掩码,未进行子网的划分,而在案例二中是自定义子网掩码,进行了子网的划分。自定义子网掩码是将一个网络划分为几个子网,需要每一段使用不同的网络号或子网号,实际上我们可以认为是将主机号分为两个部分:子网号、子网主机号。 形式如下:
   默认子网掩码的ip地址: 网络号+主机号
    自定义子网掩码的ip地址:网络号+子网号+子网主机号
   也就是说ip地址在化分子网后,以前的主机号位置的一部分给了子网号,余下的是子网主机号。子网掩码是32位二进制数,它的子网号是原主机号中前面全为1的部分。利用子网掩码可以判断两台主机是否中同一子网中。若两台主机的IP地址分别与它们的子网掩码相“与”后的结果相同,则说明这两台主机在同一子网中。
1、在主机B上PING主机A的过程
主机B向主机A发数据包时,会把主机A的IP与主机B的子网掩码进行“与”操作,得到网络号是192.168.0.0,而主机B所在网络号为192.168.0.8,会认为主机A与自己在不同一网段,所以数据包不会顺利发出,而主机B又没有设置默认网关。所以会显示“Destination host unreachable”,即目标主机不可达。
主机A的IP        192.168.0.5     11000000.10101000.00000000.00000101
主机B的子网掩码   255.255.255.248  11111111.11111111. 11111111. 11111000
                                                          子网号
与运算得到网络号  192.168.0.0      11000000.10101000.00000000.00000000
2、在主机A上PING主机B的过程
主机A向主机B发数据包时,会把主机B的IP与主机A的子网掩码进行“与”操作,得到网络号是192.168.0.8,而主机A所在网络号为192.168.0.0,会认为主机B与自己在不同一网段,所以数据包不会顺利发出,而主机A又没有设置默认网关。所以会显示“Destination host unreachable”,即目标主机不可达。
主机B的IP        192.168.0.9     11000000.10101000.00000000.00001001
主机A的子网掩码  255.255.255.248  11111111.11111111. 11111111. 11111000
                                                          子网号
与运算得到网络号  192.168.0.8      11000000.10101000.00000000.00001000

思考:案例2中如果都设置默认网关192.168.0.1,结果仍然不通,只不过这时显示的错误信息是“Request timed out”,即网络超时,因为当主机A(B),发现要连接的主机不是在同一子网内,它会利用默认设定的网关进行路由转发,这时数据包实际上是转向默认网关了。

文章如转载,请注明转载自:http://www.5iadmin.com/post/918.html