IPv4 编址与子网划分

本文详细介绍了IPv4的网络部分和主机部分,包括有效子网掩码的表示,如255.255.255.0(/24),并讨论了如何通过子网掩码进行子网划分,例如从主机部分借用位创建不同数量的子网。还涵盖了网络地址、主机地址、广播地址的概念,并提到了IPv4的公有和私有地址块。此外,文章还讨论了CIDR地址块划分和子网间的通信机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


记录大学时的IPv4 编址与子网划分学习经过,当时参考了一些网络资料,出处已难寻,如有误,请不吝赐教。

IPv4 地址的网络部分和主机部分

IPv4 地址的网络部分和主机部分
IPv4 编址共32个二进制位,网络部分和主机部分各占多少二进制位由子网掩码决定。

有效子网掩码

有效子网掩码

子网掩码表示

  1. 点分十进制表示
    255.255.255.0(即网络部分24位,主机部分8位)

  2. 位数表示
    255.255.255.0用位数表示即 /24 (即网络部分24位,主机部分8位)

  3. 用网络(含子网)地址和掩码表示一个网络
    202.115.12.64(网络) 255.255.255.192(子网掩码)
    上面的网络即 202.115.12.64/26(即网络部分26位,主机部分6位)

主机数

以子网掩码 255.255.255.0 为例(即/24)
则主机部分所占位数:32-24=8 位
则理论共能支持 28 个主机地址,但是其中要除去网络地址(主机部分位数全为0)和广播地址(主机部分位数全为1)
故实际共有 28-2 个主机地址,共能支持 28-2 个主机。
举例:

### 无分类编址 CIDR 子网划分的方法原理 #### 什么是 CIDR? CIDR(Classless Inter-Domain Routing,无类别域间路由)是一种通过使用可变长度的子网掩码来替代传统 IP 地址分类的方式。它消除了传统的 A 类、B 类和 C 类地址以及划分子网的概念,从而更高效地利用 IPv4 地址资源[^1]。 #### CIDR 的核心特点 CIDR 使用“网络前缀”取代了传统分类地址中的网络号和子网号。这种新的两级结构使得 IP 地址能够被灵活分配给不同的网络规模。其基本形式为 `IP地址/前缀长度`,其中 `/前缀长度` 表示该 IP 地址中有多少位用于标识网络部分,剩余的部分则用来标识主机[^1]。 例如: - 如果有一个 IP 地址 `192.168.1.0/24`,那么它的前 24 位是网络号,剩下的 8 位是主机号。 #### CIDR 子网划分的基本原理 在 CIDR 中,子网划分的核心在于调整子网掩码的长度以适应不同大小的网络需求。以下是具体实现方式: 1. **确定所需的子网数量**:假设需要创建 N 个子网,则可以通过增加额外的比特数 m 来满足 \(2^m \geq N\) 的条件。这些新增加的比特会从原来的主机部分转移到网络部分。 2. **计算新子网掩码**:根据转移后的比特数目重新定义子网掩码。如果原先是 /n 长度的子网掩码,现在变成了 /(n+m),意味着更多的比特被用来区分不同的子网。 3. **分配 IP 范围**:对于每个子网来说,基于更新后的子网掩码可以得出相应的起始地址和结束地址范围。需要注意的是,在实际应用过程中还需要保留特定的一些地址作为广播或其他用途之用[^2]。 #### 实际案例分析 假设有如下情况: - 初始 IP 地址池为 `192.168.1.0/24`; - 需要将其细分成两个较小的独立子网。 解决方案如下: - 将原有的 /24 提升至 /25,这样就增加了第 25 位作为新的分界线; - 结果得到两个连续但互不重叠的新子网分别为 `192.168.1.0/25` 和 `192.168.1.128/25`; 每种子网的有效可用地址总数变为 (2^(32-25)-2)=126 个,这里减去两个是因为首尾分别代表网络本身及其广播地址不可供普通设备使用[^2]。 ```python def calculate_subnets(ip, prefix_length, num_of_subnets): import math current_prefix = int(prefix_length.split('/')[1]) required_bits = math.ceil(math.log(num_of_subnets, 2)) new_prefix = current_prefix + required_bits subnet_mask = '255.' * ((new_prefix // 8)) + '.'.join([str((0xFF << (8 - (new_prefix % 8))) & 0xFF)]*(int(bool(new_prefix%8)))) + '.0'*(4-(new_prefix//8)-(bool(new_prefix%8))) return f"New Prefix Length: {current_prefix}/{new_prefix}, Subnet Mask: {subnet_mask}" print(calculate_subnets('192.168.1.0', '/24', 2)) ``` 以上脚本可以帮助快速估算当指定初始参数时所形成的最终结果状态。 #### 总结 通过对 CIDR 技术的学习可以看出,相比以往固定模式下的子网规划而言,采用动态变化机制之后不仅简化了许多复杂操作流程同时也极大提高了整体效率水平。特别是在面对大规模异构环境部署场景下显得尤为重要[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值