如何计算 IP 地址子网范围?

use*_*229 2 networking ip-address ip subnet

如果你得到:

Number of needed subnets: 2   
Network Address: 195.223.50.0 
Run Code Online (Sandbox Code Playgroud)

我可以回答以下问题:

Address Class: C 
Default Subnet Mask: 255.255.255.0 
Custom Subnet Mask: 255.255.255.192 
Total number of subnets: 2^2 = 4 
Total number of host addresses: 2^6 (8-2 = 6) 
Number of usable addresses: 2^6 -2 
Number of bits borrowed: 2 
Run Code Online (Sandbox Code Playgroud)

但是......如果我被问到......

What is the 3rd subnet range? 
What is the subnet number for the 2nd subnet? 
What is the subnet broadcast address for the 1st subnet? 
What are the assignable addresses for the 3rd subnet? 
Run Code Online (Sandbox Code Playgroud)

我将如何回答这些问题...我从该过程中只记得查看自定义子网掩码 (192) 中的最后一个数字,然后执行 256 - 192 得到 64,然后使用 64 增加一些值。但我不确定每个问题在问什么。请帮助,并逐步解释每个问题。

另外,如果我在这种情况下面对 B 的地址类别会有什么不同?

Sey*_*ren 5

TOOGAM对此有一个很好的答案。

但是,我会投入我的两分钱,这就是我用来简化它以围绕子网划分的方式:

以二进制形式查看 IP 地址。IP 地址的每个段由 8 位或一个八位字节组成,这意味着您的工作范围是 0-255,因为这是 8 位可以表示的数字范围。下面是几个例子:

0.0.0.0 is 0000 0000.0000 0000.0000 0000.0000 0000  
Run Code Online (Sandbox Code Playgroud)

192.168.1.0 is 1100 0000.1010 1000.0000 0001.0000 0000
Run Code Online (Sandbox Code Playgroud)

你知道192.168.1.0是C类地址吧?在 CIDR 表示法中,这意味着它是一个 /24 网络,掩码是 255.255.255.0。这是什么意思?让我们再次看一下二进制文件 - 二进制文件中的网络掩码如下所示:

1111 1111.1111 1111.1111 1111.0000 0000
Run Code Online (Sandbox Code Playgroud)

所有的 1 都是用于标识网络的实际地址的位,而所有的 0 用于标识网络上的特定主机。/24 表示使用 24 位来识别网络,继续计算它们。

请注意,每个网络都有一个网络名称(这是网络的第一个地址,这也是您的子网号)和一个广播地址(这是网络的最后一个地址)。这两个地址是保留的,不能用于主机。

因此,假设我们要将 192.168.1.0 拆分为三个子网。我们不能!为什么?让我们解决它。如果我们借一位,我们只能有两个子网,因为一位只能表示数字 0-1。

这就是我的意思 - 如果你想借一点,那么子网掩码就变成了

255.255.255.128  
Run Code Online (Sandbox Code Playgroud)

其中,在二进制中,是

1111 1111.1111 1111.1111 1111.1000 0000
                              ^This is your borrowed bit right here
Run Code Online (Sandbox Code Playgroud)

所以现在你有一个 /25 网络。您使用 25 位来表示您的网络,其余 7 位用于标识您的主机。(注意:在进行子网计算时,停止考虑 IP 地址中的点而只处理二进制文件会有所帮助。稍后您会明白我的意思。)

这只会给你两个子网,

         This part tells you which network it is!
                  vvvv vvvv vvvv vvvv vvvv vvvv v
192.168.1.0/25    1100 0000.1010 1000.0000 0001.0000 0000
                                                 ^^^ ^^^^
                   This part tells you which host it is!
Run Code Online (Sandbox Code Playgroud)

          This part tells you which network it is!
                  vvvv vvvv vvvv vvvv vvvv vvvv v
192.168.1.128/25  1100 0000.1010 1000.0000 0001.1000 0000
                                                 ^^^ ^^^^
                   This part tells you which host it is!
Run Code Online (Sandbox Code Playgroud)

其余 7 位保留用于识别您的主机,因此您不能使用它们。你必须借用两个位来代替,它可以代表数字 0-3。不管你喜不喜欢,如果你想要三个子网,你必须至少把网络分成四个子网。

所以现在你有一个带有这些子网的 /26 网络:

192.168.1.0/26      1100 0000.1010 1000.0000 0001.0000 0000
192.168.1.64/26     1100 0000.1010 1000.0000 0001.0100 0000
192.168.1.128/26    1100 0000.1010 1000.0000 0001.1000 0000
192.168.1.192/26    1100 0000.1010 1000.0000 0001.1100 0000
                                                  ^^
        Look at these two bits! Watch how they go from 0 to 3 in binary.
Run Code Online (Sandbox Code Playgroud)

要获得第三个网络,您所要做的就是查看您借用的位并生成 2 或二进制“10”。为什么是2?因为我们是从 0 开始计数,而不是 1。按顺序,你有“0、1、2、3”,所以第三个网络是“2”。

你只要把这个“10”打到借来的位上,你就可以得到第三个网络。例如,假设我有一个奇怪的网络,比如

 10.10.254.0/23 0000 1010.0000 1010.1111 1110.0000 0000
Run Code Online (Sandbox Code Playgroud)

我需要将它分成三个子网并找到第三个。换句话说,我需要将它变成一个 /25 网络,因为我至少需要两个借用位。所以现在我有

10.10.254.0/25     0000 1010.0000 1010.1111 1110.0000 0000
10.10.254.128/25   0000 1010.0000 1010.1111 1110.1000 0000
10.10.255.0/25     0000 1010.0000 1010.1111 1111.0000 0000
10.10.255.128/25   0000 1010.0000 1010.1111 1111.1000 0000
                   Your borrowed bits are here ^ ^
Run Code Online (Sandbox Code Playgroud)

如果您查看十进制 IP 地址,会非常混乱,不是吗?这就是我之前所说的以二进制方式工作并在进行子网计算时忽略 IP 地址中的点时的意思。

要获得广播地址,只需用 1 填充地址的“主机”部分。比如192.168.1.128/26的广播地址是

   Remember, this is the "host" part of your address, the first
                                  26 bits represent the network
                                                   vv vvvv
192.168.1.191/26   1100 0000.1010 1000.0000 0001.1011 1111
       See how the host portion is filled with 1s? ^^ ^^^^
Run Code Online (Sandbox Code Playgroud)

同样,要获得可用范围,只需在网络名称的最后位置放一个 1 以获得第一个可用地址,然后用 1 填充“主机”部分并在网络名称的最后位置放一个 0获取最后一个可用地址。

   Remember, this is the "host" part of your address, the first
   26 bits represent the network
                                vv vvvv
1100 0000.1010 1000.0000 0001.1000 0001      192.168.1.129/26
          First address: put a 1 here ^
1100 0000.1010 1000.0000 0001.1011 1110      192.168.1.190/26
                                      ^
Last address: fill the host part with 1s but put a 0 here
Run Code Online (Sandbox Code Playgroud)

当然,最终您应该像 TOOGAM 解释的那样学习如何做到这一点,但是如果您需要可视化子网,这可能会有所帮助。