路由汇总:如何明确地得到路由汇总。(VLSM、CIDR)

路由汇总:如何明确地得到路由汇总。(VLSM、CIDR)

我正在寻找一种智能且简便的方法来计算汇总路由。(CIDR,路由汇总)

我对汇总、超网、VLSM、CIDR 等主题很熟悉,但我并不总是想将所有 IP 地址转换为二进制格式来获取结果。
我正在寻找一种节省宝贵时间的聪明方法。
示例 3 的主要问题

例1:
假设我们有这两个 IP 地址:

  • 172.16.64.0/23
  • 172.16.66.0/23

我可以立即看到摘要路线将是172.16.64.0/22
我发现我使用了 2 个子网 -> 是 1 位 -> 我从 /23 = /22 中减去 1 位

二进制格式:
172.16.64.0 - - -> 10101100.00010000.01000000.00000000
172.16.66.0 - - -> 10101100.00010000.01000010.00000000

22最左边匹配位 = /22
对这些 IP 地址进行“与”运算后,结果为
172.16.64.0 - - -> 10101100.00010000.01000000.00000000

瞧!无需转换,它就可以工作:)

例2:

  • 192.168.4.192/29
  • 192.168.4.200/29
  • 192.168.4.208/29
  • 192.168.4.216/29

简单看一下这些 IP,我看到 4 个子网,分别是 2 位。(从 /29 中减去 2)
所以我的猜测是 192.168.4.192/27

192.168.4.192 - - -> 10000000.10101000.00000100.11000000
192.168.4.200 - - -> 10000000.10101000.00000100.11001000 192.168.4.208 - - -> 10000000.10101000.00000100.11010000
192.168.4.216 - - ->
10000000.10101000.00000100.11011000

二十七最左边匹配位 = /27
对这些 IP 地址进行“与”运算后,结果为:
192.168.4.192 - - -> 10000000.10101000.00000100.11000000

瞧,我们得到了 192.168.4.192/27。看来它正在运行。

例3:
(但是)如果我们有奇数和不同的子网掩码(如下例所示)
我怎样才能立即获得路由摘要?(无需转换为二进制?)

  • 192.168.6.000/27(10000000.10101000.00000110.00000000)
  • 192.168.6.064/27(10000000.10101000.00000110.01000000)
  • 192.168.6.128/26(10000000.10101000.00000110.10000000)
  • 192.168.6.160/26(10000000.10101000.00000110.10100000)
  • 192.168.6.192/28(10000000.10101000.00000110.11000000)
  • 192.168.6.208/28(10000000.10101000.00000110.11010000)
  • 192.168.6.224/30(10000000.10101000.00000110.11100000)
  • 192.168.6.228/30(10000000.10101000.00000110.11100100)
  • 192.168.6.232/30(10000000.10101000.00000110.11101000)

一旦转换,就很容易看到,它是24最左边匹配位 = /24
但是有没有办法跳过转换并立即从 IP+掩码中找出摘要路线?

例4: 这个例子有些刻薄,因为它与我对例子1的想法不同:

  • 192.168.1.0/24 - 11000000.10101000.00000001.00000000
  • 192.168.2.0/24 - 11000000.10101000.00000010.00000000

结果是 192.168.0.0/22
但是,我无法解释为什么这个不再起作用。

我希望这个论坛里有一些聪明人可以帮助我找到一个可行的解决方案。:)
提前谢谢

答案1

我想到了一种非常简单的方法来计算路由汇总地址,而无需转换为二进制。本质上,你只需将数字与位值进行比较,并确定它们是否在每个位上匹配。

例 1.

192.168.1.160/30

192.168.1.164/29

192.168.1.172/29

192.168.1.180/30

首先从要汇总的范围中取出最高数字和最低数字。

160,180。

然后将它们与从左边开始的位值进行比较。

128 64 32 16 8 4 2 1

因为两个数字都大于 128,所以它们在该位上都匹配,并且在该位上都具有 1 的值。

128 64 32 16 8 4 2 1

1

然后添加下一位的值(128 + 64 = 192)并确定两个数字是否高于或低于该值。因为 160 和 180 都低于 192,所以它们都在该位上匹配,并且该位的值均为 0。

128 64 32 16 8 4 2 1

1 0

现在因为两个数字都小于 192,所以将 128 添加到下一个位值 32 并忽略位值 64。(128 + 32 = 160)因为 160 和 180 都高于 160,所以它们都在该位上匹配,并且该位的值均为 1。

128 64 32 16 8 4 2 1

1 0 1

现在将汇总地址的累积值添加到下一个位值 16(128+32=160+16=176),因为 160 低于 176 而 180 高于 176,它们在此位上具有不同的值,因此该位不包含在汇总地址中。

128 64 32 16 8 4 2 1

1 0 1 xxxxx

因此您可以看到此示例的路由汇总地址是 192.168.1.160/27

我将在这里给出另一个例子,但是一旦你掌握了它,你就可以在脑海中很快地算出摘要地址。

示例 2

172.16.146.0/24

172.16.147.0/23

172.16.149.0/23

172.16.151.0/24

位值:128 64 32 16 8 4 2 1

查看示例中的最高数字和最低数字 146 + 151,它们是否都高于或低于第一位值 128。它们都较高,因此该位与值 1 匹配。

128 64 32 16 8 4 2 1

1

添加下一个位值(128+64=192)它们都高于还是低于 192?它们都较低,因此该位对于两者而言都有匹配的值 0。

128 64 32 16 8 4 2 1

1 0

将下一个位值 32 添加到累积摘要值 128(128 + 32 = 160)中,您会发现 146 和 151 都低于 160,因此该位对于这两个位来说都有匹配的值 0。

128 64 32 16 8 4 2 1

1 0 0

将下一个位值 16 添加到累积摘要值 128(128 + 16 = 144)中,您会发现 146 + 151 都高于 144,因此该位的匹配值为 1。

128 64 32 16 8 4 2 1

1 0 0 1

将下一个位值 8 添加到累积摘要值 144(128 + 16 = 144 + 8 = 152)中,您会发现两个数字都低于 152,因此两个数字在此位上仍然匹配,值为 0。

128 64 32 16 8 4 2 1

1 0 0 1 0

将下一个位值 4 添加到累积摘要值 144(128+16=144+4=148)中,您会发现 146 低于 148,而 151 高于 148,因此该位不匹配并且不是路由摘要地址的一部分。

128 64 32 16 8 4 2 1

1 0 0 1 0 xxx

因此本例的答案是 172.16.144.0/21

在您之前的示例(示例 3)中

192.168.6.000/27

192.168.6.064/27

192.168.6.128/26

192.168.6.160/26

192.168.6.192/28

192.168.6.208/28

192.168.6.224/30

192.168.6.228/30

192.168.6.232/30

只需查看最高和最低数字 0 + 232,一个高于 128,一个低于 128,因此您不需要进一步查看或计算任何其他内容,第一个值为 128 的位不匹配并且不是摘要地址的一部分。

有些范围比其他范围更容易,但我发现这是一种更快捷的方法,所以希望你也会发现它有用。

奥伊贝安

答案2

您的问题是,您想根据数字的值来比较数字,方法是使用数字的表示和分组方式。用简单的英语来说,您试图将德语翻译成法语,通过说中文。虽然可能使用不同的词语来表示完全相同的概念,但你仍然需要进行翻译直接地

除非使用某种编程语言或二进制计算器,否则您无法简单地写下十进制网络数字并始终看到清晰的模式。即使在您的示例中,如果您仔细想想,您也会在脑海中进行简单的二进制转换,因为数字的数值非常接近,因此它们的二进制表示不会有很大差异,从而使您可以在脑海中对数字进行分组并识别相同的分组。但是差异越大/您比较的数字越多,在脑海中做到这一点就越困难。

但是,如果按数字顺序列出 IP 号码,则可以先将第一个号码与第二个号码进行比较,以得出这两个号码的共同前缀。对于每个附加号码,比较前一个前缀用下一个数字进行比较,直到你比较完所有数字并得出最终前缀。但你仍然需要在脑海中进行二进制转换。

相关内容