不背公式快速计算IP地址掩码---游码法

网工老张 网工大杂烩 

    这个方法来自于大学时期某位已经被我忘记名字的老师(老师对不起了),思路是将2^n次方(n=0-7)当作8个重量不等的砝码,放在天平秤上做平衡,以此称量出掩码,最后得出想要的子网范围。ps:看本文之前请预习IP地址基础知识,这里只讲算法;

 

首先请记住下面这张表,至少看一分钟:

java IP和掩码位计算可用IP ip地址求掩码_java IP和掩码位计算可用IP

    表格中间的八个数就是我们的砝码,如果是真的坚持看了一分钟的同学,首先佩服你的耐心,其实不需要看那么久,然而你是否发现了规律?

    每个数的二进制中的 “1” 刚好对应IP地址格式1/4区间8bit的其中一位,也可以说是每个砝码对应8bit掩码中的一个bit位,八个砝码相加二进制正好是全1,十进制是255;

描述有点绕口,请看下图示例:

java IP和掩码位计算可用IP ip地址求掩码_java IP和掩码位计算可用IP_02

现在我们把掩码往前挪一位,变成了下图所示:

java IP和掩码位计算可用IP ip地址求掩码_子网_03

最后当8个bit位全部变为0,掩码就变成了255.255.255.0,也就是/24位。

 

    这个过程是否像是一杆天平秤的两端,分别是掩码位数和砝码,为了要保持平衡,掩码往前挪一位,就要拿掉一个对应位置的砝码。那么如何用砝码来确定掩码呢?我们通过两个题目来说明:

 

题目1,假设需要35个主机IP,从192.168.1.0/24这个C类网段中划分合适的子网;

step 1:从小到大加砝码,加到≧35为止;

    2^0+ 2^1 + 2^2 + 2^3 + 2^4 + 2^5 = 1 + 2 + 4+ 8 + 16 + 32 = 63 ≧35

step 2:确定掩码;

    数一数我们拿掉了六个砝码才满足需求的主机数量,剩下128和64两个砝码,那么现在的掩码应该是1100 0000<==>192,完整的掩码就是255.255.255.192,也就是/26位。

step 3:划分IP地址块;

    用step 1拿掉的砝码总重量+1,或者256减去剩下的砝码(128+64),就是IP地址块的大小,这里=64,IP子网的网络号就是0-256区间内64的整数倍,这里是0、64、128、192,完整的写出就是:

192.168.1.0/26、

192.168.1.64/26、

192.168.1.128/26、

192.168.1.192/26 四个子网。

 

题目2,已知某个IP地址和掩码,假设IP为192.168.1.56/27,求所属子网;

step 1:快速算出十进制掩码;

    /27位掩码相当于/24位掩码bit位往后挪3位,快速得出以下计算过程:

    掩码 /27 ==> 255.255.255.(1110 0000) ==>255.255.255.(128+64+32 前三个1bit对应的砝码相加) ==>255.255.255.224;

step 2:计算地址块大小和可用子网:

    地址块为256-224=32,可用子网为0-256区间内地址块大小的整数倍,这里是0、32、64、96、128、160、192、224八个子网,其实不用算完,我们已经知道了192.168.1.56/27属于192.168.1.32/27子网,去掉网络号和广播号,可用IP为33-62;

 

不论IP和掩码是A B C D E类多少位,都可以用此方法,我们只需要计算掩码位有变化的那个8bit区间就可以了,后面的全部补0;


砝码心中留,IP在我手;此方法开始可能记不住砝码大小和对应的掩码位,但是熟悉之后绝对比公式计算快N倍;