如何计算前缀,网络,子网和主机号?

计算网络掩码长度(也称为前缀):

将网络掩码的点分十进制表示形式转换为二进制。然后,从第一个八位位组的最高有效位(即二进制数的左侧)开始,计算连续的1位的数目。

255.255.248.0   in binary: 11111111 11111111 11111000 00000000
                           -----------------------------------
                           I counted twenty-one 1s             -------> /21

带255.255.248.0网络掩码的128.42.5.4前缀为/ 21。

计算网络地址:

网络地址是IP地址和网络掩码的二进制表示形式中各个位的逻辑与。对齐两个地址中的位,并对每对相应位执行逻辑与。然后将结果的各个八位字节转换回十进制。

128.42.5.4      in binary: 10000000 00101010 00000101 00000100
255.255.248.0   in binary: 11111111 11111111 11111000 00000000
                           ----------------------------------- [Logical AND]
                           10000000 00101010 00000000 00000000 ------> 128.42.0.0

如你所见,网络地址128.42.5.4/21为128.42.0.0

计算广播地址:

广播地址将所有主机位转换为1s ...

请记住,我们的IP地址(十进制)为:

128.42.5.4      in binary: 10000000 00101010 00000101 00000100

网络掩码为:

255.255.248.0   in binary: 11111111 11111111 11111000 00000000

这意味着我们的主机位是IP地址的最后11位,因为我们通过反转网络掩码来找到主机掩码:

Host bit mask            : 00000000 00000000 00000hhh hhhhhhhh

要计算广播地址,我们将所有主机位强制为1:

128.42.5.4      in binary: 10000000 00101010 00000101 00000100
Host bit mask            : 00000000 00000000 00000hhh hhhhhhhh
                           ----------------------------------- [Force host bits]
                           10000000 00101010 00000111 11111111 ----> 128.42.7.255

计算子网:

没有提供足够的信息来计算该网络的子网。通常,可以通过将一些主机位重新分配为每个子网的网络位来构建子网。很多时候,没有一种正确的方法来对一个地址块进行子网划分……根据您的限制,可能存在几种对地址块进行子网划分的有效方法。

假设我们将128.42.0.0/21分为4个子网,每个子网必须至少容纳100个主机...

在此示例中,我们知道至少需要/ 25前缀才能包含100个主机。我选择/ 24,因为它落在八位字节的边界上。请注意,每个子网的网络地址都从父网络块借用主机位。

查找所需的子网掩码长度或网络掩码:

我怎么知道我至少需要100个主机的/ 25 masklength?通过返回包含100个主机所需的主机位数来计算前缀。一个需要7个主机位才能包含100个主机。正式地,这是用以下公式计算的:

主机位 =日志2(主机数)=日志2(100)= 6.643

由于IPv4地址的宽度为32位,并且我们使用的是主机位(即最低有效位),因此只需从32中减去7即可计算每个子网的最小子网前缀... 32-7 = 25。

将128.42.0.0/21分为四个相等子网的惰性方法:

由于我们只需要整个128.42.0.0/21块中的四个子网,因此可以使用/ 23子网。我选择/ 23是因为我们需要4个子网...即在网络掩码中添加了额外的两位。

使用128.42.0.0/21的/ 23子网,这是对约束的同样有效的答案...

计算主机号:

这就是我们上面已经完成的工作...仅重复使用我们计算128.42.5.4/21广播地址时所做的工作中的主机掩码...这次我将使用1s代替h,因为我们需要在网络地址上再次执行逻辑与。

128.42.5.4      in binary: 10000000 00101010 00000101 00000100
Host bit mask            : 00000000 00000000 00000111 11111111
                           ----------------------------------- [Logical AND]
                           00000000 00000000 00000101 00000100 -----> 0.0.5.4

计算子网中可能的最大主机数:

要找到最大数量的主机,请查看上面的主机号中的二进制位数。最简单的方法是从32(IPv4地址中的位数)中减去网络掩码的长度。这样可以给您地址中的主机位数。在那时候...

最大主机数 = 2 **(32-netmask_length)-2

我们减去上面2的原因是因为全1和全0主机号是保留的。全零主机号是网络号;所有人的主机号是广播地址。

使用上面的示例子网128.42.0.0/21,主机数量为...

最大主机数 = 2 **(32-21)-2 = 2048-2 = 2046

查找包含两个IP地址的最大网络掩码(最小主机掩码):

假设有人给我们两个IP地址,并希望我们找到包含两个IP地址的最长网络掩码;例如,如果我们有:

  • 128.42.5.17
  • 128.42.5.67

最简单的方法是将两者都转换为二进制文件,并从地址的左侧寻找最长的网络位字符串。

128.42.5.17     in binary: 10000000 00101010 00000101 00010001
128.42.5.67     in binary: 10000000 00101010 00000101 01000011
                           ^                           ^     ^
                           |                           |     |
                           +--------- Network ---------+Host-+
                             (All bits are the same)    Bits

在这种情况下,最大网络掩码(最小主机掩码)为/ 25

注意:如果您尝试从右侧开始,请不要仅仅因为找到了一个匹配的位列就被欺骗了;除了那些匹配的位以外,可能还有其他不匹配的位。老实说,最安全的做法是从左侧开始。

### 子网网络前缀的概念 子网是指将一个大的网络划分为多个更小的逻辑网络单元的过程。这一过程的主要目的是提高IP地址的利用率并减少广播流量的影响[^2]。在网络层中,子网划分通常通过调整子网掩码来实现。 网络前缀是一种表示IP地址的方式,它指定了IP地址中的哪一部分属于网络部分,哪一部分属于主机部分。CIDR(无类别域间路由)引入了斜杠记法 `/` 来简化网络前缀的表达方式。例如,在IPv4中,`192.168.0.0/24` 表示前24位是网络部分,剩下的8位是主机部分[^3]。 --- ### CIDR 的计算方法 #### 1. **确定所需主机数量** 首先需要知道每个子网所需的主机数量。假设某子网需要容纳 `N` 台主机,则至少需要满足以下条件: \[ N \leq 2^{H} - 2 \] 其中 \( H \) 是主机部分的比特数,减去2是因为需要保留一个网络地址一个广播地址[^1]。 #### 2. **计算子网掩码** 假设原始网络是一个A类、B类或C类网络,默认情况下其子网掩码分别为 `255.0.0.0`, `255.255.0.0`, `255.255.255.0`。为了进一步细分网络,可以从默认的主机部分借用一些位作为新的子网部分。例如: 如果从主机部分借用了 `X` 位,则新子网掩码可以表示为: ```plaintext 新子网掩码 = 默认子网掩码 | (2^(X)-1 << (32-X)) ``` 或者用CIDR形式表示为 `/Y`,其中 \( Y = W + X \),\( W \) 是原网络部分的长度,\( X \) 是借用的位数[^4]。 #### 3. **分配子网范围** 使用二叉树的方法可以帮助规划子网分配。按照主机需求量从大到小排列各个子网的需求,并依次为其分配连续的IP地址段。每一步都需要更新当前可用的起始地址结束地址。 #### 4. **验证连通性冲突** 确保不同子网之间不会发生重叠,并且所有子网都能通过路由器正常通信。对于跨网络的数据包传输,需依赖边界路由器完成寻路操作[^5]。 --- ### 示例代码:子网划分工具函数 以下是基于Python的一个简单子网划分辅助脚本: ```python import ipaddress def subnet_calculator(network, prefix_length, num_subnets): """ 计算指定网络下的子网划分情况。 :param network: 初始网络字符串,如 '192.168.0.0' :param prefix_length: 当前网络前缀长度,如 24 对应 /24 :param num_subnets: 所需子网的数量 :return: 返回列表形式的子网对象 """ base_network = ipaddress.IPv4Network(f"{network}/{prefix_length}", strict=False) subnets = list(base_network.subnets(new_prefix=prefix_length + num_subnets.bit_length())) return subnets # 测试例子 subnets = subnet_calculator('192.168.0.0', 24, 4) for i, subnet in enumerate(subnets): print(f"Subnet {i+1}: {subnet}") ``` 运行上述程序后,可以根据输入参数自动分割出若干个子网。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

超翔之逸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值