子网划分计算方法

子网划分计算方法

本篇的IP地址所讲述的都是ipv4

这篇教程只说怎么得结果,想看原理请去隔壁B站或者另寻其他文章

本篇文章出现的所有IP都是随机出的,如有碰巧,纯属巧合

首先我们得会计算二进制,这部分请自行搜索教程必应、百度、B站都有详细教程

如果是为了子网划分,那只需要会8位二进制与十进制互相转换即可,这里给一个转换表

2726252423222120
1286432168421

然后得认识IP地址,一般是4个字节(4byte)来表示,1个字节8位(8bit),所以总共是32位(32bit)

例如127.0.0.1127用二进制表示是011111110用8位二进制表示是8个01用8位二进制表示则是00000001

所以127.0.0.1用二进制表示是01111111 . 00000000 . 00000000 . 00000001

例题

接下来的计算用这个例题

IP地址:111.156.16.196

子网掩码:255.224.0.0

计算

  • 网络类别
  • 主机号
  • 网络地址
  • 直接广播地址
  • 子网内第一个可用IP地址
  • 子网内最后一个可用IP地址
网络类别

网络类别主要是靠IP地址的前4位的取值来进行区分,这里不作详细说明,只说简单的判断方法。

换成十进制的话

1到126开头的是A类地址

128到191开头的是B类地址

192到223开头的是C类地址

记住上面ABC类就行,其它类型地址也考不了子网划分

~~例如127开头是本地环回地址、0开头是保留地址、D类地址(224~239)多用于多点广播、E类地址(240255)是保留地址。~

例题中的IP地址 111.156.16.196 以 111 开头,所以是A类地址

详细了解可查看以下文章:

网络地址

IP地址网络位不变,主机位全0

  • 计算方法:将IP地址和子网掩码转成二进制,然后按位与运算即可

IP地址:111.156.16.196转成二进制是01101111.10011100.00010000.11000100

子网掩码:255.224.0.0转成二进制是11111111.11100000.00000000.00000000

与运算得到网络地址:

正常计算方法:
01101111.10011100.00010000.11000100
11111111.11100000.00000000.00000000
———————————————————————————————————
01101111.10000000.00000000.00000000 -> 网络地址:111.128.0.0

技巧:

  1. 因为255的8位二进制是8个1,而1与任何数的与运算结果不变(1与0等于0,1与1等于1),所以255对应的IP地址可以直接写。
  2. 而0与任何数进行与运算都得0,所以子网掩码的0对应的IP地址的地方直接写0就行
    简单来说就是,只需要把不是255和0的地方转成二进制来计算就行(这样算得快一点)
于是,简约计算:
111.10011100.16.196
255.11100000.0.0
——————————————
111.10000000.0.0 -> 网络地址:111.128.0.0
主机号

IP地址网络位全0,主机位全不变

如何知道网络位:子网掩码转成二进制之后1的位置对应到IP地址的位置,就是网络位

例如 255.224.0.0转成二进制是11111111.11100000.00000000.00000000 ,那对应的IP地址网络位就是前面11位。

111.156.16.196的二进制[01101111.100][11100.00010000.11000100]的前面就是网络位,后面就是主机位。

主机号:网络位全0,主机位不变则是[00000000.000][11100.00010000.11000100] --> 0.28.16.196

直接广播地址

IP地址网络位不变,主机位全1

直接广播地址和网络地址类似。

网络位不变,主机位全1则是[01101111.100][11111.11111111.11111111] --> 111.159.255.255

子网内第一个可用IP地址

网络地址的后一个地址

前面计算得网络地址是111.128.0.0,所以子网内第一个可用IP地址则是111.128.0.1

子网内最后一个可用IP地址

直接广播地址的前一个地址

前面计算得直接广播地址是111.159.255.255,所以子网内第一个可用IP地址则是111.159.255.254

总结
  • 主机号:IP地址网络位全0,主机位全不变

  • 网络地址:IP地址网络位不变,主机位全0

    • 计算方法:将IP地址和子网掩码转成二进制,然后按位与运算即可
  • 直接广播地址:IP地址网络位不变,主机位全1

  • 子网内第一个可用IP地址:网络地址的后一个地址

  • 子网内最后一个可用IP地址:直接广播地址的前一个地址

计算步骤
  • 根据子网掩码可以判断出网络位和主机位,然后根据IP地址的网络位和主机位计算
  • 计算顺序可以是:网络地址或主机号、直接广播地址、子网内第一个可用IP地址、子网内最后一个可用IP地址
  • 网络类别可以根据IP首地址判断
例题

如果要完全掌握,还是得做题,可以尝试自己出题自己做。

ABC类地址的题各出一个,然后计算,算完应该就不用担心这种类型的题了。

至于如何校验答案是否正确,网上搜索子网划分计算器,可以在写完自己出的题之后用于验证。

子网划分计算器:https://www.sojson.com/convert/subnetmask.html

### 子网划分计算方法 子网划分是一种通过调整子网掩码来分割网络的技术,目的是优化 IP 地址资源的利用效率并提高网络安全性和管理便利性。以下是关于子网划分的具体计算方法: #### 1. 基本概念 - **IP 地址结构**:IPv4 地址由两部分组成——网络号和主机号。 - **子网掩码作用**:用于区分 IP 地址中的网络位和主机位[^1]。 #### 2. 计算步骤 ##### (1) 确定所需子网数量 根据实际需求确定需要划分子网的数量 \( N \),然后找到满足条件的最小整数 \( m \),使得 \( 2^m \geq N \)[^3]。 例如,如果需要创建 6 个子网,则 \( m = 3 \)(因为 \( 2^3 = 8 \geq 6 \))。 ##### (2) 修改子网掩码 将原子网掩码扩展 \( m \) 位作为新的子网掩码。每增加一位表示可以额外定义两个子网[^1]。 例如,原始子网掩码为 /24(即 255.255.255.0),要新增加 3 位用于子网划分,则新子网掩码变为 /27(即 255.255.255.224)。 ##### (3) 划分子网范围 对于每一个子网,其起始地址可以通过以下方式计算: \[ \text{子网地址} = (\text{IP 地址}) \& (\text{子网掩码}) \] 其中,“\(&\)” 表示按位与操作。每个子网的有效主机地址范围是从子网地址后的第一个可用地址到广播地址前的一个地址[^3]。 以 IP 地址 `192.168.1.0` 和子网掩码 `/27`为例: - 新子网掩码对应的二进制形式为 `11111111.11111111.11111111.11100000` - 可分为 8 个子网,具体如下表所示: | 子网编号 | 子网地址 | 广播地址 | 主机范围 | |----------|----------------|---------------|-----------------------| | 0 | 192.168.1.0 | 192.168.1.31 | 192.168.1.1~192.168.1.30 | | 1 | 192.168.1.32 | 192.168.1.63 | 192.168.1.33~192.168.1.62 | | ... | ... | ... | ... | ##### (4) 验证分配合理性 确保每个子网内的设备不超过允许的最大主机数,并验证是否存在冲突或浪费的情况[^2]。 --- ### 示例代码实现 下面是一个简单的 Python 实现,帮助理解如何自动完成子网划分过程: ```python import ipaddress def subnet_calculator(ip, prefix_length, subnets_needed): network = ipaddress.IPv4Network(f"{ip}/{prefix_length}", strict=False) # Calculate the new prefix length based on required subnets additional_bits = (subnets_needed - 1).bit_length() new_prefix = prefix_length + additional_bits if new_prefix > 32: raise ValueError("Too many subnets requested.") subnets = list(network.subnets(new_prefix=new_prefix)) result = [] for i, subnet in enumerate(subnets): result.append({ 'Subnet ID': str(subnet.network_address), 'Broadcast Address': str(subnet.broadcast_address), 'Usable Range': f'{subnet.network_address+1}-{subnet.broadcast_address-1}' }) return result # Example usage output = subnet_calculator('192.168.1.0', 24, 6) for entry in output: print(entry) ``` --- ### 注意事项 - 如果子网数量过多可能导致单个子网内可使用的主机地址减少,需合理规划[^2]。 - 在实际应用中还需考虑路由器配置、防火墙规则等因素的影响。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值