• TCP/IP 子网掩码浅析


    定义

    是一种用来指明一个IP地址的哪些位标识的是主机所在的子网以及哪些位标识的是主机的位掩码。子网掩码不能单独存在,它必须结合IP地址一起使用。子网掩码只有一个作用,就是将某个IP地址划分成网络地址和主机地址两部分。

    子网掩码是由32bit的二进制数字序列, 对于A类地址来说,默认的子网掩码是255.0.0.0;对于B类地址来说默认的子网掩码是255. 255.0.0;对于C类地址来说默认的子网掩码是255.255.255.0。

    说明:子网掩码是“255.255.255.0”的网络:最后面一个数字可以在0~255范围内任意变化,因此可以提供256个IP地址。但是实际可用的IP地址数量是256-2,即254个,因为主机号不能全是“0”或全是“1”。(因为主机号全为1时表示该网络广播地址,全为0时表示该网络的网络号,这是两个特殊地址)。

    如何通过子网掩码获得网络地址(或者子网地址)和主机地址?

    例如:有一个C类地址为:192.9.200.13,按其IP地址类型,它的缺省子网掩码为:255.255.255.0。(自己设置的掩码方法相同)

    step1.将IP地址192.9.200.13转换为二进制11000000 00001001 11001000 00001101。

    step2.将子网掩码255.255.255.0转换为二进制11111111 11111111 11111111 00000000。

    step3.将以上两个二进制数逻辑进行与(AND)运算,得出的结果即为网络部分。“11000000 00001001 11001000 00001101”与“11111111 11111111 11111111 00000000”进行“与”运算后得到“11000000 00001001 11001000 00000000”,即“192.9.200.0”,这就是这个IP地址的网络号,或者称“网络地址”。

    step4.将子网掩码的二进制值取反后,再与IP地址进行与(AND)运算,得到的结果即为主机部分。如将“00000000 00000000 00000000 11111111(子网掩码的取值)反”与“11000000 00001001 11001000 00001101”进行与运算后得到“00000000 00000000 00000000 00001101”,即“0.0.0.13”,这就是这个IP地址主机号(可简化为“13”)。

    如何计算子网掩码?

    利用子网数来计算

    以上子网掩码是缺省掩码,那么在某些情况下,为了更充分利用IP资源,我们需要更合理划分子网,而此时我们需要确定子网掩码。

    step1:确定物理网段的数量,并将其转换为二进制数,并确定位数n。如:你需要6个子网,6的二进制值为110,共3位,即n=3。

    step2:将子网掩码中与主机号的前n位对应的位置置1,其余位置置0。若n=3且为
                   C类地址:则得到子网掩码为11111111.11111111.11111111.11100000化为十进制得到255.255.255.224
                   B类地址:则得到子网掩码为11111111.11111111.11100000.00000000化为十进制得到255.255.224.0
                   A类地址:则得到子网掩码为11111111.11100000.00000000.00000000化为十进制得到255.224.0.0。

    利用主机数来计算 

    如要将一B类IP地址为168.195.0.0的网络划分成若干子网,要求每个子网内有主机数为700台,则该子网掩码的计算方法如下(也是对应以上各基本步骤):  
          step1,首先将子网中要求容纳的主机数“700”转换成二进制,得到1010111100。  

          step2,计算出该二进制的位数为10位,即n = 10   。

          step3,将255.255.255.255从后向前的10位全部置“0”,得到的二进制数为“11111111.11111111.11111100.00000000”,转换成十进制后即为255.255.252.0,这就是该要划分成主机数为700的B类IP地址 168.195.0.0的子网掩码。

    如何划分子网?

    举个例子,若我们用的网络号为192.9.200,则该C类网内的主机IP地址就是192.9.200.1~192.9.200.254,现将网络划分为4个子网,按照以上步骤:

     4=2^2,则表示要占用主机地址的2个高序位,即为11000000,转换为十进制为192。这样就可确定该子网掩码为:192.9.200.192。4个IP范围为:

    (1)第1个子网的IP地址是从“11000000 00001001 11001000 00000001”到“11000000 00001001 11001000 00111110”(对应的十进制IP地址范围为192.9.200.1~192.9.200.62),注意它们的最后8位中被网络号占住的两位都为“00”,因为主机号不能全为“0”和“1”,所以没有11000000 00001001 11001000 00000000和11000000 00001001 11001000 00111111这两个IP地址(下同)。注意实际上此时的主机号只有最后面的6位。而这个子网的网络地为 11000000 00001001 11001000 00000000,为192.9.200.0。

    (2)第2个子网的IP地址是从“11000000 00001001 11001000 01000001”到“11000000 00001001 11001000 01111110” ,注意此时被网络号所占住的2位主机号为“01”。对应的十进制IP地址范围为192.9.200.65~192.9.200.126。对应这个子网的子网掩码(或网络地址)为 11000000 00001001 11001000 01000000,为192.9.200.64。

    (3)第3个子网的IP地址是从“11000000 00001001 11001000 10000001”到“11000000 00001001 11001000 10111110” ,注意此时被网络号所占住的2位主机号为“10”。对应的十进制IP地址范围为192.9.200.129~192.9.200.190。对应这个子网的子网掩码(或网络地址)为 11000000 00001001 11001000 10000000,为192.9.200.128。

    (4)第4个子网的IP地址是从“11000000 00001001 11001000 11000001”到“11000000 00001001 11001000 11111110” ,注意此时被网络号所占住的2位主机号为“11”。对应的十进制IP地址范围为192.9.200.193~192.9.200.254。对应这个子网的子网掩码(或网络地址)为 11000000 00001001 11001000 11000000,为192.9.200.192。

     如何确定是否在同一个子网?

    知道"子网掩码",我们就能判断,任意两个IP地址是否处在同一个子网络。方法是将两个IP地址与子网掩码分别进行AND运算(两个数位都为1,运算结果为1,否则为0),然后比较结果是否相同,如果是的话,就表明它们在同一个子网络中,否则就不是。

    比如,已知IP地址172.16.254.1和172.16.254.233的子网掩码都是255.255.255.0,请问它们是否在同一个子网络?两者与子网掩码分别进行AND运算,结果都是172.16.254.0,因此它们在同一个子网络。

    参考:http://diybbs.zol.com.cn/12/86_118559.html

  • 相关阅读:
    codeforces 669C C. Little Artem and Matrix(水题)
    codeforces 669B B. Little Artem and Grasshopper(水题)
    oracle drop table recyclebin恢复
    odu恢复drop表--不通过logmnr挖掘object_id
    odu恢复drop表--通过logmnr挖掘object_id
    odu恢复delete 表
    GO学习-(7) Go语言基础之流程控制
    GO学习-(6) Go语言基础之运算符
    GO学习-(4) Go语言基础之变量和常量
    GO学习-(3) VS Code配置Go语言开发环境
  • 原文地址:https://www.cnblogs.com/menghuizuotian/p/3751705.html
Copyright © 2020-2023  润新知