为什么 255.255.249.0 不是有效的子网掩码?

bob*_*bby 38 networking window subnet mask desktop-computer

我只是想知道上面的这个问题,如果有人能解释为什么 255.255.249.0 不是有效的子网掩码,我将不胜感激。

use*_*686 100

它不是有效的子网掩码,因为它没有定义前缀。如果将其转换为二进制,您会看到它的“1”位(和/或其“0”位)并非都是连续的。这是RFC 4632(CIDR 规范的一部分)明确禁止的。

唯一突出的限制是掩码必须保持连续


例如,将有效的网络掩码转换255.255.248.0为二进制:

|    255    |    255    |    248    |     0     |
  1111 1111   1111 1111   1111 1000   0000 0000
Run Code Online (Sandbox Code Playgroud)

所有的“1”位都在开头,这意味着掩码总是匹配一个前缀——21 位定义了网络。(这意味着整个 255.255.248.0 网络掩码可以简写为“/21”。)

除其他外,允许通过网络掩码轻松对网络进行排序 - /24 路由​​始终比 /21 路由更具体。

现在将您的转换255.255.249.0为二进制:

|    255    |    255    |    249    |     0     |
  1111 1111   1111 1111   1111 1001   0000 0000
                                  ?
Run Code Online (Sandbox Code Playgroud)

这个有一些 1 位,一些 0 位,然后又是一些 1 位。它有 22 个“网络”位,但 255.255.250.0 和 255.255.252.0 也是如此——如果一个地址与所有这些网络掩码的路由相匹配,则不清楚其中哪一个具有更高的优先级。

正如评论中的人们所提到的,这曾经是被允许的,但不是很长时间。

来自:大卫·埃德尔曼NANOG

当路由表中存在歧义时,您可以确定两件事:
1 - 每个制造商都知道如何处理它们。
2 - 每个制造商的做法都不一样。


注意:还有另一种通常称为过滤器ACL掩码的东西,此限制不适用,因为过滤器掩码没有与之关联的“子网”语义(例如最长前缀匹配)——它们只能匹配或不匹配吨。例如,iptables 可以接受过滤器掩码 255.255.249.0 就好了。

  • @Joshua 子网掩码早于 CIDR,所以这是有道理的。来自 [CIDR wiki 文章](https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing#Subnet_masks)(我的重点):“子网掩码编码与前缀长度相同的信息,但早于 CIDR 的出现。在 CIDR 表示法中,前缀位始终是连续的。RFC 950 允许子网掩码指定非连续位,直到 RFC 4632**:第 5.1 节规定掩码必须保持连续。” [RFC 950 有一个使用非连续 255.255.255.88 掩码的示例](https://tools.ietf.org/html/rfc950#page-15)。 (3认同)
  • 前缀要求的结果是,以点分十进制表示的 CIDR 子网掩码始终是“255”的 0 次或多次,“128”、“192”、“224”、“240”、“248”中的任意一个是 0 或 1 、`252` 或`254`,以及0 次或多次`0`(当然,总共4 个数字),按此顺序。 (2认同)

Jus*_*tme 17

掩码需要连续的高位位来掩码子网地址所在的网络地址。249 没有这个属性,因为它是二进制的 11111001,所以 1 之间有零。


小智 5

从形式上讲,它实际上一个有效的子网掩码。顾名思义,子网掩码只是一个位掩码模式(任何模式),它告诉您地址的哪些部分定义了整个网络。

您永远不会看到超过 8 个不同的八位字节值的原因是,很早就开始,惯例是简单地将最左边的位用于网络,其余的位用于主机或子网络寻址。这允许一个简单的规则,每个人都可以记住,并告诉您如果需要细分网络可以使用哪些位。

标准而言,我们从“有类”(当时未命名)网络开始,A、B 和 C 类分别由它们的第一个、两个或三个八位字节定义,并根据大小进行分配谁要求的。据我所知,早期的相当数量的网络套件以仅在八位字节边界上真正起作用的方式进行了优化(D 类和 E 类使用不多,仍然可以通过这种方式处理)。

这最终被 CIDR(无类别域间路由)取代,它确实要求网络掩码“向左连续 1”。除其他原因外,它保证您可以将某人的路由公告“汇总”到一个较小的路由表条目中,如果您知道他们网络的所有路由都到达同一个端口,即使他们只为每个路由发布了单独的路由条目.

这对于中型/区域 ISP 来说尤其重要,这些 ISP 与“1 级”提供商有多个互连,但通常最终将全国范围内某个人的所有路由有效地指向一条出站路由——而他们的 RIB(路由信息) base,完整的路由信息​​集)仍然会知道所有单独的路由,它们的 FIB(转发信息库,以线速驱动实际硬件的东西)可以保持更小,从而更快。如果您拥有常见的中档硬件,那么您的硬件的效率和切换事物的速度确实会产生很大的不同。

TL;DR:网络掩码真的是一个掩码,可以有任意的模式,但实际上你基本上永远不会看到一个不是“全部都在左边”的模式。

  • 大多数系统现在都符合 CIDR,即使是那些仍然向用户显示子网掩码符号的系统,所以实际上你真的_不应该_看到一个不是...... (3认同)