介绍
了解网络是在 Internet 上配置复杂环境的基本部分。 这在尝试有效地在服务器之间进行通信、制定安全的网络策略以及保持节点井井有条时会产生影响。
在之前的指南中,我们介绍了一些 基本网络术语 。 您应该仔细阅读该指南,以确保您熟悉其中介绍的概念。
在本文中,我们将讨论一些与设计或与联网计算机交互有关的更具体的概念。 具体来说,我们将介绍用于对 IP 地址进行分组的网络类、子网和 CIDR 表示法。
了解 IP 地址
网络上的每个位置或设备都必须是 可寻址 。 这意味着可以通过在预定义的地址系统下引用其名称来访问它。 在网络分层的普通 TCP/IP 模型中,这是在几个不同的层上处理的,但通常当我们提到网络上的地址时,我们谈论的是 IP 地址。
IP 地址允许通过网络接口访问网络资源。 如果一台计算机想与另一台计算机通信,它可以将信息寻址到远程计算机的 IP 地址。 假设两台计算机在同一个网络上,或者它们之间的不同计算机和设备可以跨网络转换请求,则计算机应该能够相互联系并发送信息。
每个 IP 地址在其自己的网络上必须是唯一的。 网络可以相互隔离,并且可以桥接和转换以提供不同网络之间的访问。 称为 网络地址转换 的系统允许在数据包穿越网络边界时重写地址,以允许它们继续到达正确的目的地。 这允许在多个隔离网络上使用相同的 IP 地址,同时在正确配置的情况下仍允许这些网络相互通信。
IPv4和IPv6的区别
目前在系统上广泛实施的 IP 协议有两个修订版:IPv4 和 IPv6。 由于协议的改进和 IPv4 地址空间的限制,IPv6 正在慢慢取代 IPv4。 简而言之,对于通过 IPv4 可用的地址数量而言,世界现在拥有太多的互联网连接设备。
IPv4 地址是 32 位地址。 地址的每个字节或 8 位段被一个句点划分,通常表示为一个数字 0-255。 尽管这些数字通常以十进制表示以帮助人类理解,但通常将每个段称为 八位字节 以表示它是 8 位表示的事实。
典型的 IPv4 地址如下所示:
192.168.0.5
每个八位字节的最小值为 0,最大值为 255。
我们也可以用二进制表示,以更好地了解四个八位字节的外观。 为了便于阅读,我们将用空格分隔每 4 位,并用破折号替换点:
1100 0000 - 1010 1000 - 0000 0000 - 0000 0101
认识到这两种格式代表相同的数字对于以后理解概念很重要。
尽管 IPv4 和 IPv6 的协议和后台功能存在一些其他差异,但最明显的差异是地址空间。 IPv6 将地址表示为 128 位数字。 换个角度来看,这意味着 IPv6 的地址数量是 IPv4 的 7.9×1028 倍以上。
为了表达这个扩展的地址范围,IPv6 通常写成四位十六进制数字的八段。 十六进制数使用数字 0-9 表示数字 0-15,以及数字 a-f 表示较高的值。 典型的 IPv6 地址可能如下所示:
1203:8fe0:fe80:b897:8990:8a7c:99bf:323d
您可能还会看到以紧凑格式编写的这些地址。 IPv6 的规则允许您从每个八位字节中删除任何前导零,并用双冒号 (::) 替换单个范围的零组。
例如,如果您在 IPv6 地址中有一个组,如下所示:
...:00bc:...
您可以改为输入:
...:bc:...
为了演示第二种情况,如果您在 IPv6 地址中有一个范围,其中多个组为零,如下所示:
...:18bc:0000:0000:0000:00ff:...
你可以像这样压缩它(也像我们上面那样删除组的前导零):
...:18bc::ff...
您只能对每个地址执行一次此操作,否则将无法重建完整地址。
虽然 IPv6 每天都变得越来越普遍,但在本指南中,我们将探索使用 IPv4 地址的其余概念,因为使用较小的地址空间更容易讨论。
IPv4 地址类别和保留范围
IP 地址通常由两个独立的部分组成。 地址的第一部分用于标识该地址所属的网络。 后面的部分用于指定该网络中的特定主机。
网络规范的结束位置和主机规范的开始位置取决于网络的配置方式。 我们稍后会更彻底地讨论这个问题。
IPv4 地址传统上分为五个不同的“类别”,命名为 A 到 E,旨在区分可用的可寻址 IPv4 空间的段。 这些由每个地址的前四位定义。 您可以通过查看这些位来识别 IP 地址属于哪个类别。
这是一个转换表,它根据地址的前导位定义地址:
- A级
- 0--- :如果 IPv4 地址的第一位为“0”,则表示该地址属于 A 类。 这意味着从 0.0.0.0 到 127.255.255.255 的任何地址都属于 A 类。
- B类
- 10-- : B 类包括从 128.0.0.0 到 191.255.255.255 的任何地址。 这表示第一个位为“1”但第二个位没有“1”的地址。
- C类
- 110-:C类定义为从192.0.0.0到223.255.255.255的地址。 这表示所有地址的前两位为“1”,但第三位没有“1”。
- D类
- 1110 :此类包括地址的前三位为“111”,下一位为“0”。 此地址范围包括从 224.0.0.0 到 239.255.255.255 的地址。
- E级
- 1111 :这个类定义了 240.0.0.0 和 255.255.255.255 之间的地址。 任何以四个“1”位开头的地址都包含在此类中。
D 类地址是为多播协议保留的,它允许一个数据包在一次移动中发送到一组主机。 E 类地址是为将来和实验使用而保留的,并且基本上没有使用。
传统上,每个常规类别 (A-C) 都会以不同的方式划分地址的网络和主机部分,以适应不同规模的网络。 A 类地址使用第一个八位组的其余部分来表示网络,并使用地址的其余部分来定义主机。 这对于定义一些每个都有很多主机的网络很有用。
B 类地址使用前两个八位字节(第一个字节的其余部分,以及整个第二个字节)来定义网络,其余的用来定义每个网络上的主机。 C 类地址使用前三个八位字节定义网络,最后一个八位字节定义该网络内的主机。
将大部分 IP 空间划分为类现在几乎是一个遗留概念。 最初,这是作为解决快速耗尽 IPv4 地址问题的权宜之计(如果它们位于不同的网络中,您可以让多台计算机具有相同的主机)。 这在很大程度上被我们将在下面讨论的后来的方案所取代。
保留的私有范围
IPv4 空间的某些部分也保留用于特定用途。
最有用的保留范围之一是由从 127.0.0.0
到 127.255.255.255
的地址指定的环回范围。 每个主机都使用此范围来测试自身的网络连接。 通常,这由该范围内的第一个地址表示:127.0.0.1
。
每个普通类也有一个范围,用于指定专用网络地址。 例如,对于 A 类地址,从 10.0.0.0
到 10.255.255.255
的地址保留用于专用网络分配。 对于 B 类,此范围为 172.16.0.0
至 172.31.255.255
。 对于 C 类,192.168.0.0
到 192.168.255.255
的范围保留供私人使用。
任何未直接连接到 Internet 的计算机(任何通过路由器或其他 NAT 系统的计算机)都可以随意使用这些地址。
为特定用例保留了额外的地址范围。 您可以在此处找到 保留地址 的摘要。
网络掩码和子网
将网络划分为更小的网络部分的过程称为 子网划分 。 这对于许多不同的目的很有用,并有助于将主机组彼此隔离,以便更轻松地处理它们。
正如我们上面所讨论的,每个地址空间都分为网络部分和主机部分。 每个地址占用的地址数量取决于地址所属的类别。 例如,对于 C 类地址,前 3 个八位字节用于描述网络。 对于地址 192.168.0.15
,192.168.0
部分描述网络,15
描述主机。
默认情况下,每个网络只有一个子网,其中包含定义的所有主机地址。 网络掩码基本上是用于网络部分的地址位数量的规范。 子网掩码是用于进一步划分网络的另一个网络掩码。
被认为对描述网络重要的地址的每一位都应在网络掩码中表示为“1”。
例如,我们上面讨论的地址 192.168.0.15
可以这样表示,用二进制表示:
1100 0000 - 1010 1000 - 0000 0000 - 0000 1111
如上所述,C 类地址的网络部分是前 3 个八位字节,或前 24 位。 由于这些是我们要保留的重要位,因此网络掩码将是:
1111 1111 - 1111 1111 - 1111 1111 - 0000 0000
这可以用普通的 IPv4 格式写成 255.255.255.0
。 在网络掩码的二进制表示中为“0”的任何位都被视为地址的主机部分的一部分,并且可以是可变的。 然而,对于正在讨论的网络或子网,“1”位是静态的。
我们通过在地址和网络掩码之间应用按位 AND
操作来确定地址的网络部分。 按位 AND
操作将保存地址的网络部分并丢弃主机部分。 在上面代表我们网络的示例中,结果是:
1100 0000 - 1010 1000 - 0000 0000 - 0000 0000
这可以表示为 192.168.0.0
。 主机规格是这些原始值和主机部分之间的差异。 在我们的例子中,主机是 0000 1111
或 15
。
子网划分的想法是占用地址的一部分主机空间,并将其用作附加的网络规范,以再次划分地址空间。
例如,我们在上面看到的 255.255.255.0
网络掩码会在网络中留下 254 个主机(您不能以 0 或 255 结尾,因为它们是保留的)。 如果我们想把它分成两个子网,我们可以使用地址的传统主机部分的一位作为子网掩码。
因此,继续我们的示例,网络部分是:
1100 0000 - 1010 1000 - 0000 0000
主机部分是:
0000 1111
我们可以使用主机的第一位来指定子网。 我们可以通过调整子网掩码来做到这一点:
1111 1111 - 1111 1111 - 1111 1111 - 0000 0000
对此:
1111 1111 - 1111 1111 - 1111 1111 - 1000 0000
在传统的 IPv4 表示法中,这将表示为 192.168.0.128
。 我们在这里所做的是将最后一个八位字节的第一位指定为对网络寻址很重要。 这有效地产生了两个子网。 第一个子网是从 192.168.0.1
到 192.168.0.127
。 第二个子网包含主机 192.168.0.129
到 192.168.0.255
。 传统上,子网本身不得用作地址。
如果我们从主机空间中使用更多位进行联网,我们可以获得越来越多的子网。
CIDR 表示法
开发了一种称为 无类域间路由 或 CIDR 的系统,作为传统子网划分的替代方案。 这个想法是,您可以在 IP 地址本身中添加关于构成路由或网络部分的有效位数的规范。
例如,我们可以使用 192.168.0.15/24
的 CIDR 表示法来表达 IP 地址 192.168.0.15
与网络掩码 255.255.255.0
相关联的想法。 这意味着给定 IP 地址的前 24 位被认为对网络路由很重要。
这给了我们一些有趣的可能性。 我们可以使用这些来引用“超网”。 在这种情况下,我们指的是使用传统子网掩码无法实现的更具包容性的地址范围。 例如,在 C 类网络中,如上所示,我们无法组合来自网络 192.168.0.0
和 192.168.1.0
的地址,因为 C 类地址的网络掩码是 255.255.255.0
。
但是,使用 CIDR 表示法,我们可以通过将此块引用为 192.168.0.0/23
来组合这些块。 这指定有 23 位用于我们所指的网络部分。
所以第一个网络(192.168.0.0
)可以用二进制表示如下:
1100 0000 - 1010 1000 - 0000 0000 - 0000 0000
而第二个网络 (192.168.1.0
) 将是这样的:
1100 0000 - 1010 1000 - 0000 0001 - 0000 0000
我们指定的 CIDR 地址表明前 23 位用于我们正在引用的网络块。 这相当于 255.255.254.0
的网络掩码,或者:
1111 1111 - 1111 1111 - 1111 1110 - 0000 0000
正如你所看到的,这个块的第 24 位可以是 0 或 1,它仍然会匹配,因为网络块只关心前 23 位。
CIDR 允许我们更好地控制寻址连续的 IP 地址块。 这比我们最初讨论的子网划分有用得多。
结论
希望到现在为止,您应该对 IP 协议的一些网络含义有一个实际的了解。 虽然处理这种类型的网络并不总是直观的,并且有时可能难以使用,但了解正在发生的事情以便正确配置您的软件和组件非常重要。
网上有各种计算器和工具,可帮助您理解其中一些概念,并通过输入某些信息获得所需的正确地址和范围。 CIDR.xyz 提供从基于十进制的 IP 地址到八位字节的转换,并让您可视化不同的 CIDR 网络掩码。