我了解 CIDR 是什么,以及它的用途,但我仍然无法弄清楚如何在脑海中计算它。有人可以给出一个“傻瓜式”的解释并举例说明吗?
答案1
CIDR(无类别域间路由,发音为“kidder”或“cider” - 在评论中添加您自己的本地变体!)是一种定义 IP 地址网络部分的系统(通常人们将其视为子网掩码)。它之所以“无类别”,是因为它允许一种比其基类更灵活地细分 IP 网络的方法。
首次定义 IP 网络时,IP 具有基于其二进制前缀的类别:
Class Binary Prefix Range Network Bits
A 0* 0.0.0.0-127.255.255.255 8
B 10* 128.0.0.0-191.255.255.255 16
C 110* 192.0.0.0-223.255.255.255 24
D 1110* 224.0.0.0-239.255.255.255
E 1111* 240.0.0.0-255.255.255.255
(请注意,这是人们将 /24 称为“C 类”的来源,尽管这并不是严格意义上的比较,因为 C 类需要具有特定的前缀)
这些二进制前缀用于路由大块 IP 空间。这种方法效率低下,因为它会导致大块地址被分配给并不一定需要它们的组织,而且 C 类地址只能以 24 位增量进行分配,这意味着当多个 C 类地址被路由到同一位置时,路由表可能会变得过大。
CIDR 的定义允许将可变长度子网掩码 (VLSM) 应用于网络。顾名思义,地址组或网络可以细分为与其所属的自然“类别”没有直接关系的组。
VLSM 的基本前提是提供网络中网络位数的计数。由于 IPv4 地址是 32 位整数,因此 VLSM 始终介于 0 和 32 之间(尽管我不确定在什么情况下可能会有 0 长度的掩码)。
在脑海中计算 VLSM/CIDR 的最简单方法是了解“自然”的 8 位边界:
CIDR Dotted Quad
/8 255.0.0.0
/16 255.255.0.0
/24 255.255.255.0
/32 255.255.255.255
(顺便说一句,使用 /32 掩码是完全合法的,并且在 ACL 中相当常见。它只是意味着您指的是单个 IP)
掌握这些知识后,只需通过简单的二进制算术即可上下移动以获得主机数量。例如,如果 /24 有 256 个 IP(我们暂时不讨论网络和广播地址,这是另一个网络理论问题),则将子网增加一位(至 /25)将使主机空间减少一位(至 7),这意味着将有 128 个 IP。
这是最后一个八位字节的表格。此表格可以移位到任意八位字节,以获得点分四组等价物。
CIDR Dotted Quad
/24 255.255.255.0
/25 255.255.255.128
/26 255.255.255.192
/27 255.255.255.224
/28 255.255.255.240
/29 255.255.255.248
/30 255.255.255.252
/31 255.255.255.254
/32 255.255.255.255
作为将这些移位到另一个八位字节的示例,/18(即 /26 减 8 位,因此移位了一个八位字节)将是 255.255.192.0。
答案2
每个八位字节值 8。
- 255.0.0.0 /8
- 255.255.0.0 /16
- 255.255.255.0 /24
- 255.255.255.255 /32
因此,您可以快速缩小子网范围,然后只需担心最后 8 位。
128, 192, 224, 240, 248, 252, 254, 255
+1 , +2 , +3 , +4 , +5 , +6 , +7 , +8
- 255.128.0.0 = /9
- 255.192.0.0 = /10
- 255.224.0.0 = /11
- 255.240.0.0 = /12
- 255.248.0.0 = /13
- 255.252.0.0 = /14
- 255.254.0.0 = /15
希望够清楚
答案3
虽然晚了一天,但希望没有少一分钱。CIDR 是 IPv4 掩码(32 位)中从最高有效位开始的连续 1 位的数量。
10000000 00000000 00000000 00000000 其中 1 = 最高有效位
常见的掩码是 /8、/16、/24,它们都落在 8 位(八位字节)边界上。
11111111 00000000 00000000 00000000 = /8 = 255.0.0.0
11111111 11111111 00000000 00000000 = /16 = 255.255.0.0
11111111 11111111 11111111 00000000 = /24 = 255.255.255.0
当它不是八位字节对齐时,这并不是很难,但它确实需要一些简单的数学知识和对八位字节的理解。
11111111 11111111 11100000 00000000 = /19
掩码的前两个八位字节为 255.255(/16 小于 /19)。最后一个八位字节为 0(/19 小于 /24)。到目前为止,我们知道
11111111 11111111 11100000 00000000 = /19 = 255.255.?.0
查看每个八位字节时请记住它是一个 8 位值,0 - 255。
0 0 0 0 0 0 0 0
1
2 6 3 1
8 4 2 6 8 4 2 1
因此第三个八位字节(?)11100000 是 128 + 64 + 32 = 224。这意味着
11111111 11111111 11100000 00000000 = /19 = 255.255.224.0
答案4
相反,我认为完全理解是件好事跨域路由并能够在脑子里进行计算……但有时你想再检查一下你的计算。我喜欢用PHP 子网计算器:http://share-foo.com/SubnetCalc.php