子网掩码基础知识
子网掩码由连续的1和连续的0组成,1表示网络位,0表示主机位。
1. 基础概念
- IPv4地址:由32位二进制组成,通常表示为4个十进制数(如
192.168.1.0
)。 - 子网掩码:用于划分网络和主机部分。例如,
255.255.255.0
(即/24
)表示前24位为网络号,后8位为主机号。
2. 地址数量计算
-
公式:
可用主机地址数 = (2^{(32 - \text{子网掩码位数})} - 2)
(减2是因为去掉网络地址和广播地址) -
常见子网示例:
/24
(如255.255.255.0
):
(2^8 - 2 = 254)个可用地址(范围192.168.1.1
~192.168.1.254
)。- 超过256的情况:
若子网掩码位数更小(如/23
),则主机部分有9位,地址数为 (2^9 - 2 = 510)个。
3. 为什么会有误解?
/24
子网确实有256个地址(含网络和广播地址),但可用主机地址是254个。- 更大的子网(如
/16
)可包含(2^{16} - 2 = 65534)个可用地址。
4. 关键结论
- 子网地址数不限于256,实际由子网掩码决定。
- 最小子网是
/30
(4个地址,2个可用),最大可达/8
(约1600万个地址)。
示例表
子网掩码 | 主机位数 | 总地址数 | 可用地址数 | 掩码 |
---|---|---|---|---|
/24 (前24位) | 8 | 256 | 254 | 255.255.255.0 |
/23 (前23位) | 9 | 512 | 510 | 前23位是1,后9位是0 |
/16 (前16位) | 16 | 65536 | 65534 | 255.255.0.0 |
前23位掩码计算步骤:
二进制转换
前23位的二进制表示:
11111111.11111111.11111110.00000000
(前23位全1,第24位为0,剩余全0)
分段转换为十进制
第一段(前8位):11111111 → 255第二段(9-16位):11111111 → 255第三段(17-24位):11111110 → 254(因为11111110 = 128+64+32+16+8+4+2 = 254)第四段(剩余位):00000000 → 0
最终结果
前23位的子网掩码为:
255.255.254.0
java中ip地址转数值的方式
/*** ipV4地址转换成Long类型* @param ipAddress* @return*/public static long ConvertIpv4ToLong(String ipAddress) {String[] ipSegments = ipAddress.split("\\.");long result = 0;for (int i = 0; i < ipSegments.length; i++) {int power = 3 - i;int segmentValue = Integer.parseInt(ipSegments[i]);result += segmentValue * Math.pow(256, power);}return result;}/*** ipV6地址转换成Long类型* @param ipV6Address* @return*/public static long ConvertIpv6ToLong(String ipV6Address) {String[] hexSegments = ipV6Address.split(":");long result = 0;for (int i = 0; i < hexSegments.length; i++) {int power = 7 - i;int segmentValue = Integer.parseInt(hexSegments[i], 16);result += segmentValue * Math.pow(65536, power);}return result;}