简化IP地址
几年前,当我教授Novell课程时,我注意到我的TCP/IP课程中有很多学生在理解IP地址方面遇到问题。其他讲师也看到了同样的结果。虽然我仔细地向学生讲解了这些材料,但他们中的许多人仍然难以掌握这些概念。此外,他们的问题因必须参加CNE考试而变得更加严重,CNE考试是闭卷和限时的。因此,他们需要一种快速有效的方法来处理IP地址。
我微调了一种方法,以最大限度地减少考试错误的几率,并帮助他们记住并在几乎任何时候,甚至多年后应用这些原则。我过去常常在课程快结束时进行一到两小时的IP演示,效果非常好。我的学生很少有人考试不及格。
在过去的几年里,我一直在DeVry任教,并发现有必要“重拾”我的IP演示。它在DeVry也同样有效。本文总结了该演示。
第一个问题涉及构成A类或B类等网络的要素。新手很难记住每个类别的起始和结束位置。表3显示了一个帮助理解的模式。首先,让我们讨论一些二进制数的基础知识。
一个字节是八个二进制位的分组。由于二进制位要么是0,要么是1,所以一个字节由八个0和/或1组成。这里没有神秘之处。所以 10010101 是一个字节,而 11100000 是另一个字节。我们如何将它们转换为十进制数呢?事实证明,最右边的位的权重为 1 (20)。它左边的下一个位的权重为 2 (21),下一个位的权重为 4 (22),即 2 的二次方,依此类推。
2
或等效地
128 64 32 16 8 4 2 1 : decimal weights因此,二进制数 10101001 的十进制等价值为
1x1 + 1x8 + 1x32 + 1x128 = 169如果您从右侧开始分配连续的 1,则可以使用上面的图表作为一种计算器。假设您有 00001111 二进制位。要获得十进制等价值,您可以采用硬方法进行计算,即
1x1 + 1x2 + 1x4 + 1x8 = 15或者您可以注意到以下几点(以我们的数字为例)
128 64 32 16 8 4 2 1 :decimal weights 0 0 0 0 1 1 1 1 :binary number如果您从右侧开始全部为 1,您可以简单地取第一个 0 位的权重(在本例中为 16),减去 1,您就得到了 15——十进制等价值——而无需使用计算器。因此,如果右侧的所有位都是 1,您可以使用上面的图表作为一种计算器来确定十进制值。
请注意,这些位以 2 的幂次递增,因此第九位的十进制权重为 256。因此,如果您有一个字节全部为 1,即 11111111,那么它的十进制值为 255 (256 -1)。255 在 IP 地址中多次出现。
现在我们需要构建另一个计算器以方便参考(参见表 1)。有一种叫做网络掩码的东西,我稍后会讨论。标准程序说从左边开始掩码并向下工作。因此,如果您使第八位或高位为 1,其余位等于 0,则十进制等价值为 128;如果您使前三位为 1,其余位为 0,则十进制等价值为 224,等等。
此表工作正常,但有点笨拙。表 2 显示了一个简短版本。它表示如果您的字节是 11100000,那么十进制等价值是 224。如果这让您感到困扰,请使用表 1。
我们已经为 IP 地址设置了基础,现在我将讨论标准 IPv4 地址。IP 地址有时称为“点分四组”数字。IP 地址有五类,即 A、B、C、D 和 E 类。D 类和 E 类是保留的,因此您可以使用 A、B 和 C 类。但是,我将在此处显示所有五类。类别由第一个字节确定。因此,IP 地址 205.140.187.31 是 C 类地址,因为第一个字节是 205。我怎么知道的?好吧,让我们看看表 3。
我如何得到表 3 的?我只需要记住一些信息,然后构建其余部分。我知道 IP 地址有五个类别,IP 地址的第一个字节告诉您它属于哪个类别。我也知道第一个字节的二进制起始值的模式,即 0、10、110 等。由于它遵循模式的方式,第二列很容易构建。现在,使用表 2,很容易构建第三列。
接下来,请注意,第四列(终点)自然而然地遵循,只需从下一类的起点减去 1 即可。C 类从 192 开始,而 D 类从 224 开始。因此,C 类必须在 223 结束。现在您没有借口忘记每个类别的起点和终点了;只需记住二进制模式,并花一分钟构建表格即可。顺便说一句,您不必担心 D 类和 E 类,除非 D 类的开头告诉您 C 类在哪里结束,方法是减去 1。
我们需要讨论网络掩码,但首先,让我们先跑题一下。布尔与运算就像英语中的“and”。您告诉 Johnny,如果他倒垃圾“并且”整理床铺,您就会给他买一个冰淇淋蛋筒。如果他两者都没有做,或者只做了一件事,他就不会得到冰淇淋蛋筒。如果他两者都做了,他就会得到蛋筒。
按位与运算逐位工作。因此,如果您将 1 与 1 进行与运算,您将得到 1。但是,如果您将两个 0、一个 1 和一个 0 或一个 0 和一个 1 进行与运算,您将得到 0。表 4 说明了此操作。
现在让我们取一个完整的字节,并与另一个字节进行逻辑与运算。假设第一个字节是 10110010,第二个字节是 01100111。从右边开始,请注意第一个字节的十进制值为
0*1 + 1*2 + 0*4 + 0*8 + 1*16 + 1*32 + 0*64 + 1*128 = 178
而第二个字节的十进制值为
1*1 + 1*2 + 1*4 + 0*8 + 0*16 + 1*32 + 1*64 + 0*128 = 103.现在,将两个字节进行与运算
1 0 1 1 0 0 1 0 178 decimal, ANDed with 0 1 1 0 0 1 1 1 103 decimal --------------- gives 0 0 1 0 0 0 1 0 34 decimal作为第二个示例,让我们将 178 与 255 进行与运算。
1 0 1 1 0 0 1 0 178 decimal, ANDed with 1 1 1 1 1 1 1 1 255 decimal --------------- gives 1 0 1 1 0 0 1 0 178 decimal然后我们知道,当您将任何字节(数字)与 255 进行按位与运算时,您将获得数字的直通,即结果仅仅是数字本身。
表 5 显示了各种类别的默认网络掩码以及一些示例主机 IP 地址。简而言之,主机是任何具有 IP 地址的东西。这包括服务器、工作站、路由器等。
那么,这意味着什么,我们用它做什么呢?让我们研究一下表 5。如果我们采用示例 A 类地址 10.0.1.23 并将其与其默认网络掩码进行按位与运算,我们得到 10.0.0.0。10.0.0.0 是什么?它是网络地址——看看最后一列。
请注意,当将 A 类网络与其默认网络掩码进行与运算时,第一个字节给出网络地址,而当将 B 类 IP 地址与其默认 B 类网络掩码进行与运算时,前两个字节给出网络地址。因此,我们说 A 类 IP 地址的第一个字节给出网络地址,其余三个字节给出主机地址,即 A 类地址的形式为 N.H.H.H,其中 N 代表网络,H 代表主机。同样,B 类 IP 地址的前两个字节与网络有关,后两个字节与主机地址有关,即 N.N.H.H。最后,C 类 IP 地址的前三个字节与网络有关,而最后一个字节与主机有关,即 N.N.N.H。
让我们用一个 B 类 IP 地址(例如 142.168.25.100)来说明这一点。从表 5 中,我们知道 B 类网络的默认网络掩码是 255.255.0.0。因此,将默认掩码与 IP 地址进行与运算会产生该特定主机所在的网络的地址,即 142.168.0.0。因此,如果使用默认 B 类网络掩码,IP 地址为 142.168.25.100 的主机将发现自己位于 IP 地址为 142.168.0.0 的网络上。
如果您被授予完整的 B 类地址套件,网络地址为 142.168.0.0,您会怎么做?请记住,B 类网络的形式为 N.N.H.H,即最后两个字节可用于分配主机 IP 地址。这将产生一个具有 216 - 2 个主机地址的网络。-2 来自于 142.168.0.0 是网络地址,因此不能分配给主机;网络上的最后一个地址 142.168.255.255 用于广播,因此也不能分配给主机。
这将是一个非常大的网络(65,534 个主机地址),太大了,不切实际。一种非常简单的方法是“借用”一个字节的主机地址,并将它们分配为网络地址。这将产生 28 = 256 个网络,每个网络上有 254 个主机。即使在这里,这些也是大型网络。这种借用主机地址并将它们用于网络的过程称为子网划分。我们通过使用子网掩码 (SNM) 来完成此操作。在本例中,我们将使用子网掩码 255.255.255.0,这是默认的 C 类网络掩码。因此,我们采用了一个 B 类网络,并将其变成了 256 个 C 类网络。
如果我们用 255.255.255.0 对 142.168.25.100 进行与运算,我们得到网络地址 142.168.25.0,第一个可用主机地址为 142.168.25.1,最后一个可用主机地址为 142.168.25.254,因为 142.168.25.255 保留用于广播。另一种方法是使用网络地址(在本例中为 142.168.25.0)开始,将所有主机位都变成 1,并获得广播地址。在这里,最后一个字节用于主机地址,因此将它们变成 1 会得到 142.168.25.255。这种类型的广播称为定向广播,这意味着它可以跳过路由器,而本地广播(不跳过路由器)的形式为 255.255.255.255,无论涉及哪种网络类别。
如果您此时没有感到太震惊,您可能会想知道是否只能在字节边界上进行子网划分,或者是否可以对 C 类网络进行子网划分。答案分别是“否”和“是”;也就是说,您可以在字节的中间工作。
假设您被授予完整的 C 类地址套件,例如 210.168.94.0 作为您的网络地址。您可以随意分配主机地址(最后一个字节)。如果您使用默认的 C 类网络掩码 255.255.255.0(参见表 5),您可以在单个网络上分配 210.168.94.1 到 210.168.94.254 的主机地址。这当然是可行的,但您可能希望将其分解为多个网络,每个网络可能有 25 个主机。
让我们做一些数学运算。如果我们有 4 位用于主机,够用吗?24-2 = 14,不够用。因此,让我们使用 5 位用于主机:25-2 = 30,这将起作用。但是,我们在最后一个字节中有 8 位用于主机,因此让我们借用 3 位用于子网;然后我们仍然有必需的 5 位用于主机。太棒了,但是我们有多少个子网呢?23 = 8 个怎么样?那么,我们有 8 个子网,每个子网有 30 个主机地址。如果您正在进行数学运算,您可能会说,“但是 8x30 只有 240 个地址;其他的地址去哪里了?” 有效的问题!糟糕,别生气,但现在是构建另一个表格的时候了。请注意,每个地址的形式都为 210.168.94.最后一个字节,并且 SNM(子网掩码)的形式为 255.255.255.最后一个字节。让我们只处理最后一个字节。
从表 2(或表 1)中,我们看到 SNM 将为 255.255.255.224。224 来自最后一个字节为 11100000。那么子网是什么呢?表 6 显示了它们(仅最后一个字节)。
让我们详细说明几个。首先,取最小的。最小的完整子网地址是 210.168.94.0。下一个是 210.168.94.32,依此类推。请记住,使用三位来处理,我们得到 23 = 8 个子网,查看表 6,您会看到它们。
回到我们为什么只得到 240 个主机地址的问题。“(惊呼)——又一个表格!” 查看最后一个字节,我们得到表 7。
现在让我们回答其他地址去哪里了的问题。为此,请统计所有“无效地址”,即不能用于主机地址的地址。
首先,我们有八个子网,每个子网都有一个子网地址和一个广播地址。所以我们在这里丢失了 8*2 = 16 个地址。现在,如果我们从 256 中减去这 16,我们得到 240 个可用的主机地址。
另一种方法要容易得多。我们有八个子网,每个子网有 30 个有效的 IP 地址;这总共给了我们 8*30=240 个有效的 IP 地址,神奇的数字。
为了好玩,让我们再做一件事:更详细地分析第六个子网。最后一个字节是二进制 10100000 或十进制 160。完整的子网地址是十进制 210.168.94.160,我们使用 SNM 255.255.255.224。记住,我说过要取子网地址,将所有主机位设置为 1,然后将它们相加得到广播地址。如果我们正确地执行此操作,它应该给出与表 7 相同的结果。
我们使用五位用于主机地址,因此第六位的十进制值为 32。减去 1 得到 31。因此,将五个主机位设置为 1,即 00011111,得到十进制值 31。将此值添加到子网地址的最后一个字节 (160) 得到广播地址 191,与表 7 一致。这是“完整的 Megillah”
210.168.94.160 子网地址210.168.94.161-190 有效主机地址210.168.94.191 定向广播地址
最后一点。有些作者甚至在指默认网络掩码时也使用术语“子网掩码”——他们的术语有点随意。IP 地址使用愉快,请记住,Linux 是不可避免的。
