子网掩码计算

子网掩码计算方式
一、例如:
网吧有1000台主机,使用192.168.0.0的C网段。我们知道一个标准的C类网段最多只有254个可用的IP地址,
所以我们要通过改变子网掩码来合并子网,扩大该网段内的可用IP数目。
   
            总主机台数(1000)/254=3.93
    3.93<4
  所以我们至少需要4个子网。
子网掩码计算:
          256(C类网段所包含的最大IP数目,包括网络地址和广播地址)- 4(减去我们需要的子网数目)=252 (得到我们所需的子网掩码的尾数,255.255.X.0)
附私网地址列表:
A:10.0.0.0~10.255.255.255
B:172.16.0.0~172.31.255.255
C:192.168.0.0~192.168.255.255
二、子网掩码位数与子网掩码的计算
子网掩码的最大位数为32位,C类单个网段所容纳的最大IP数目为256,
包括网络地址和广播地址。
例:
    192.168.0.1/27
32-27=5     (最大子网位数减去当前子网位数)         
2的5次方为32
256-32=224
255.255.255.224为192.168.0.1/27的子网掩码
所以得出计算公式:
子网掩码的尾数(255.255.255.X)=256-2的(32-掩码当前位数)次方
附常用掩码位数与子码掩码对应列表:
32----------255 . 255 . 255 . 255
31---------- 255 . 255 . 255 . 254
30---------- 255 . 255 . 255 . 252
29---------- 255 . 255 . 255 . 248
28---------- 255 . 255 . 255 . 240
27---------- 255 . 255 . 255 . 224
26---------- 255 . 255 . 255 . 192
25---------- 255 . 255 . 255 . 128
24---------- 255 . 255 . 255 . 0
23---------- 255 . 255 . 254 . 0
22---------- 255 . 255 . 252 . 0
21---------- 255 . 255 . 248 . 0
20---------- 255 . 255 . 240 . 0
19---------- 255 . 255 . 224 . 0
18---------- 255 . 255 . 192 . 0
17---------- 255 . 255 . 128 . 0
16---------- 255 . 255 . 0 . 0
三、
计算主机所在网络的网络地址和广播
例:IP为202.112.14.137,掩码为255.255.255.224
   常规办法是把这个主机地址和子网掩码都换算成二进制数,两者进行逻辑与运算后
即可得网络地址。
简单的方法为:
255.255.255.224的掩码所容纳的IP地址有256-224=32个,那么具有这种掩码的网络
地址一定是32的倍数。而网络地址是子网IP地址的开始,广播地址是结束,可使用的主机地
址在这个范围内,因此略小于137而又是32的倍数的只有128,而广播地址就是下一个网络
的网络地址减1,而下一个32的倍数是160。
即:
网络地址:202.112.14.128
广播地址:202.112.14.159

  • 24
    点赞
  • 111
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
在Java中计算子网掩码可以使用位运算来实现。在计算子网掩码时,我们首先需要知道网络地址和子网掩码的位数。网络地址是一个32位的二进制数,子网掩码是用来标识网络地址中哪些位是网络位和主机位的。 例如,假设网络地址为192.168.0.1,子网掩码为255.255.255.0,我们需要将它们转换成二进制。首先,可以使用Java中提供的InetAddress类的方法将IP地址转换成对应的二进制。 ```java InetAddress inetAddress = InetAddress.getByName("192.168.0.1"); byte[] ipAddress = inetAddress.getAddress(); String ipAddressBinary = ""; for (byte octet : ipAddress) { ipAddressBinary += String.format("%8s", Integer.toBinaryString(octet & 0xFF)).replace(" ", "0"); } System.out.println(ipAddressBinary); ``` 输出结果为: ```bash 11000000101010000000000000000001 ``` 接下来,我们需要将子网掩码转换成二进制。同样可以使用上述的方法将子网掩码转换成二进制。假设使用的子网掩码为255.255.255.0,将其转换成二进制如下: ```bash 11111111111111111111111100000000 ``` 接下来,我们需要计算子网掩码的网络位的个数,也就是子网掩码中连续为1的位数。可以使用Java的位运算来实现: ```java int maskBits = 0; for (char bit : subnetMaskBinary.toCharArray()) { if (bit == '1') { maskBits++; } } System.out.println("网络位个数:" + maskBits); ``` 输出结果为: ```bash 网络位个数:24 ``` 最后,我们可以根据网络位的个数来计算子网掩码的十进制表示形式: ```java int mask = 0xFFFFFFFF << (32 - maskBits); byte[] subnetMask = { (byte) (mask & 0xFF), (byte) ((mask >> 8) & 0xFF), (byte) ((mask >> 16) & 0xFF), (byte) ((mask >> 24) & 0xFF) }; System.out.println("子网掩码:" + InetAddress.getByAddress(subnetMask).getHostAddress()); ``` 输出结果为: ```bash 子网掩码:255.255.255.0 ``` 以上便是使用Java来计算子网掩码的过程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值