我刚刚读到令人惊叹的 Serverfault 答案回答一个非常基本的问题:IPv4 子网划分是如何工作的?尽管我理解了接受答案中所述的大部分内容,但我仍然对一开始描述的最重要的一个概念感到困惑:子网位掩码计算是如何工作的。
该答案中的示例是 IP 10.13.216.41/18
:
10. 13. 216. 41
00001010.00001101.11011000.00101001 - IP address as bytes
然后作者提供了这个工作区域:
10. 13. 216. 41
00001010.00001101.11011000.00101001 - IP address
11111111.11111111.11000000.00000000 - subnet mask (/18 => 255.255.192.0)
00001010.00001101.11000000.00000000 - Portion of IP address covered by 1's in subnet mask, remaining bits set to 0
00000000.00000000.00011000.00101001 - Portion of IP address covered by 0's in subnet mask, remaining bits set to 0
我理解第三行是如何生成的:它是 IP 中的位与子网掩码中的位的逻辑结合(“ANDing”)。这对我来说完全说得通。顺便问一下,第三行(00001010.00001101.11000000.00000000
)是什么:主机 ID、网络 ID 还是子网 ID?
但第四行(00000000.00000000.00011000.00101001
)对我来说毫无意义。我读过这个答案好几次,但还是搞不清楚它是如何计算/得出的,以及它代表什么/有什么用处(主机 ID、网络 ID、子网 ID?)。有人知道这是从哪里来的吗?!提前谢谢!
答案1
首先,请注意第 4 行的结果与第 3 行相反。与掩码的按位结合不会改变位1
,而第 4 行的结果则相反,因此它一定是与面具的对面。
所以如果第 3 行是address AND mask
,那么第 4 行就是address AND (NOT mask)
。
下面回答了这两行的含义。
第二,忘记“子网 ID”。以前,当你有带子网的分类网络时,这是一个单独的数字。在现代网络中,它是不再分离来自“网络ID”。
这使得事情变得简单一些,因为现在您只有两种状态:如果它被掩码中的 1 位覆盖,那么它就是网络部分;如果它被 0 位覆盖,那么它就是主机部分。
此外,CIDR 要求子网掩码位连续,因此它变得更加简单:/18
表示前 18 位从左边开始是网络ID,其余所有(即剩余的14位)都是主机ID。
1好吧,在将较大的网络划分为较小的网络时,您仍然可以计算出“子网 ID”——这在 IPv6 中更加明显,通常将 /48 分配给站点并使用 /64 大小的子网,从而实现非常整齐的划分。
然而,尽管早期的 IPv6 修订版本暂时地恢复了正式的地址结构(您有“顶级聚合”等等),但这不再是问题,任何“子网 ID”都纯粹是您自己的决定。