• 子网掩码的存在意义及作用机制


      子网掩码(subnet mask)的作用实际上只是用来标识出某个IP地址哪部分是网络位的一段地址。

      它和IP地址都是32位2进制地址, 都可以用点分十进制标识, 即4段>=0且<=255的十进制数。

      但是子网掩码与IP地址不同:IP地址的32位2进制数, 每一位都可以任意取0或1,即IPv4地址理论上有2的32次方-2个(刨去全是0的网络本身或者全是1的广播地址),

      而子网掩码的二进制构成只有两部分, 表示网络位的1和表示主机位的0,左边的1和右边的0分别连续,所以2进制的点分十进制表示不能随意取值,理论上的IPv4子网掩码只有30个。

      子网掩码是用来判断任意两台计算机的IP地址是否属于同一子网络的根据。

      最为简单的理解就是两台计算机各自的IP地址与子网掩码进行AND运算后,如果得出的结果是相同的,则说明这两台计算机是处于同一个子网络上的,可以进行直接的通讯。

    计算方式

     由于子网掩码的位数决定于可能的子网数目和每个子网的主机数目。在定义子网掩码前,必须弄清楚本来使用的子网数和主机数目。

    根据子网数

    利用子网数来计算
    在求子网掩码之前必须先搞清楚要划分的子网数目,以及每个子网内的所需主机数目。
    1)将子网数目转化为二进制来表示
    2)取得该二进制的位数,为 N
    3)取得该IP地址的类子网掩码,将其主机地址部分的前N位置1 即得出该IP地址划分子网的子网掩码。
    如欲将B类IP地址168.195.0.0划分成27个子网:
    1)27=11011
    2)该二进制为五位数,N = 5
    3)将B类地址的子网掩码255.255.0.0的主机地址前5位置1(B类地址的主机位包括后两个字节,所以这里要把第三个字节的前5位置1),得到 255.255.248.0
    即为划分成27个子网的B类IP地址 168.195.0.0的子网掩码(实际上是划成了32-2=30个子网)。
    这一段介绍的是旧标准下计算的方法,关于旧的标准后文在介绍,在新标准中则可以先将27减去1,因为计算机是从0开始计算的,从0到27实际上是有28个,所以说如果需要27个就需要将27减去1。
     

    根据主机数

    利用主机数来计算
    1)将主机数目转化为二进制来表示
    2)如果主机数小于或等于254(注意去掉保留的两个IP地址),则取得该主机的二进制位数,为 N,这里肯定N<8。如果大于254,则 N>8,这就是说主机地址将占据不止8位。
    3)使用255.255.255.255来将该类IP地址的主机地址位数全部置1,然后从后向前的将N位全部置为 0,即为子网掩码值。
    如欲将B类IP地址168.195.0.0划分成若干子网,每个子网内有主机700台:
    1) 700=1010111100
    2)该二进制为十位数,N = 10
    3)将该B类地址的子网掩码255.255.0.0的主机地址全部置1,得到255.255.255.255
    然后再从后向前将后10位置0,即为: 11111111.11111111.11111100.00000000
    即255.255.252.0。这就是该欲划分成主机为700台的B类IP地址168.195.0.0的子网掩码。

    增量计算法

    子网ID增量计算法(即计算每个子网的IP范围)
    其基本计算步骤如下:
    第1步,将所需的子网数转换为二进制,如所需划分的子网数为“4”,则转换成成二进制为00000100;
    第2步,取子网数的二进制中有效位数,即为向缺省子网掩码中加入的位数(既向主机ID中借用的位数)。如前面的00000100,有效位为“100”,为3位(在新标准中只需要2位就可以了);
    第3步,决定子网掩码。如IP地址为B类129.20.0.0网络,则缺省子网掩码为:255.255.0.0,借用主机ID的3位以后变为:255.255.224(11100000).0,即将所借的位全表示为1,用作子网掩码。
    第4步,将所借位的主机ID的起始位段最右边的“1”转换为十进制,即为每个子网ID之间的增量,如前面的借位的主机ID起始位段为“11100000”,最右边的“1”,转换成十进制后为2^5=32(此为子网ID增量)。
    第5步,产生的子网ID数为:2^m-2 (m为向缺省子网掩码中加入的位数),如本例向子网掩码中添加的位数为3,则可用子网ID数为:2^3-2=6个;
    第6步,将上面产生的子网ID增量附在原网络ID之后的第一个位段,便形成第一个子网网络ID 129.20.32.0(即第一个子网的起始IP段);
    第7步,重复上步操作,在原子网ID基础上加上一个子网ID增量,依次类推,直到子网ID中的最后位段为缺省子网掩码位用主机ID位之后的最后一个位段值,这样就可得到所有的子网网络ID。如缺省子网掩码位用主机ID位之后的子网ID为255.255.224.0,其中的“224”为借用主机ID后子网ID的最后一位段值,所以当子网ID通过以上增加增量的方法得到129.20.224.0时便终止,不要再添加了(只能用到129.20.192.0)。
    我们知道当主机ID为全0时表示网络ID,全1时表示广播地址。在RFC950标准中,不建议使用全0和全1的子网ID。
    例如把最后一个字节的前3位借给网络ID,用后面的5位来表示主机ID,这样就会产生2^3=8个子网,子网ID就分别为000、001、010、011、100、101、110、111这样8个,在RFC950标准中只能使用中间的6个子网ID。
    这么做的原因是:
    设我们有一个网络:192.168.0.0/24(即子网掩码的前24位为1,255.255.255.0),我们需要两个子网,那么按照RFC950,应该使用/26而不是/25,得到两个可以使用的子网192.168.0.64和192.168.0.128
    对于192.168.0.0/24,网络地址是192.168.0.0,广播地址是192.168.0.255
    对于192.168.0.0/26,网络地址是192.168.0.0,广播地址是192.168.0.63对于192.168.0.64/26,网络地址是192.168.0.64,广播地址是192.168.0.127
    对于192.168.0.128/26,网络地址是192.168.0.128,广播地址是192.168.0.191
    对于192.168.0.192/26,网络地址是192.168.0.192,广播地址是192.168.0.255
    你可以看出来,对于第一个子网,网络地址和主网络的网络地址是重叠的,对于最后一个子网,广播地址和主网络的广播地址也是重叠的。在CIDR流行以前,这样的重叠将导致极大的混乱。比如,一个发往192.168.0.255的广播是发给主网络的还是子网的?这就是为什么在当时不建议使用全0和全1子网。在今天,CIDR已经非常普及了,所以一般不需要再考虑这个问题。
  • 相关阅读:
    [BZOJ2038]小Z的袜子
    [BZOJ5016]一个简单的询问
    [BZOJ1008][HNOI2008]越狱
    [FZU2254]英语考试
    利用Map 的merge方法统计数量
    List 原生态类型
    try-with-resource 关闭 io流
    利用构建器创建对象
    linux 安装 vault
    git 上传文件
  • 原文地址:https://www.cnblogs.com/wuguan/p/6754327.html
Copyright © 2020-2023  润新知