找回密码
 立即注册
首页 业界区 科技 子网掩码基础知识

子网掩码基础知识

豌笆 昨天 13:50

子网掩码基础知识

子网掩码由连续的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万个地址)。

5. 计算子网的ip数量方法

  • 子网掩码为255.255.240.0,计算为(256-240)*256=4096个
  • 子网掩码为255.255.248.0,计算为(256-248)*256=2048个

示例表

子网掩码 主机位数 总地址数 可用地址数 掩码
/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位掩码计算步骤:

二进制转换

  1. 前23位的二进制表示:
  2. 11111111.11111111.11111110.00000000
  3. (前23位全1,第24位为0,剩余全0)
复制代码

分段转换为十进制

  1. 第一段(前8位):11111111 → 255
  2. 第二段(9-16位):11111111 → 255
  3. 第三段(17-24位):11111110 → 254(因为11111110 = 128+64+32+16+8+4+2 = 254)
  4. 第四段(剩余位):00000000 → 0
复制代码

最终结果

  1. 前23位的子网掩码为:
  2. 255.255.254.0
复制代码

java中ip地址转数值的方式

  1. /**
  2. * ipV4地址转换成Long类型
  3. * @param ipAddress
  4. * @return
  5. */
  6. public static long ConvertIpv4ToLong(String ipAddress) {
  7. String[] ipSegments = ipAddress.split("\\.");
  8. long result = 0;
  9. for (int i = 0; i < ipSegments.length; i++) {
  10. int power = 3 - i;
  11. int segmentValue = Integer.parseInt(ipSegments[i]);
  12. result += segmentValue * Math.pow(256, power);
  13. }
  14. return result;
  15. }
  16. /**
  17. * ipV6地址转换成Long类型
  18. * @param ipV6Address
  19. * @return
  20. */
  21. public static long ConvertIpv6ToLong(String ipV6Address) {
  22. String[] hexSegments = ipV6Address.split(":");
  23. long result = 0;
  24. for (int i = 0; i < hexSegments.length; i++) {
  25. int power = 7 - i;
  26. int segmentValue = Integer.parseInt(hexSegments[i], 16);
  27. result += segmentValue * Math.pow(65536, power);
  28. }
  29. return result;
  30. }
复制代码

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册