Echo

Echo 关注TA

大家好,我是Echo!

Echo

Echo

关注TA

大家好,我是Echo!

  •  普罗旺斯
  • 自由职业
  • 写了309,679,512字

该文章投稿至Nemo社区   资讯  板块 复制链接


IPv4:超网,你是我的“神”

发布于 2022/11/18 20:56 255浏览 0回复 2,730

我们都学过把原本大网络分成若干小网络的划分子网。但是大家可曾听说过把原本数量众多的小网络汇聚成一个大网络的超网吗?

没有错!我们今天的主角 —— 构成超网,就是通过对 IP 地址的原有格式进行升级重组,进而产生的一种更为神奇的组网方式。

究竟有多“神奇”呢?让我们接着往下看

01、超网到底是什么东西?

构成超网也称 CIDR(Classless Inter-Domain Routing,无类别域间路由选择)。

简单来说,它就是一种将多个同类 IP 地址聚合成一个”地址块“的方法。超网的诞生使我们可以更加有效地分配 IPv4 地址空间。

超网的运用可以使 IPv6 在大规模使用前容许互联网的规模继续增长。

02、为什么要构成超网?

在传统的按照 IP 地址分类的方法中,不管是哪一类地址,网络号和主机号所占的长度都是固定不变的,只要确定了这个地址的网络号,那就是固定长度。

这种“顽固”的分类方法不仅使用起来不太灵活,同时也直接导致了路由器在交换路由表时所产生信息的冗余。

因此采用路由聚合构造超网,有利于减少路由器之间的路由选择信息的交换,从而提高了整个互联网的性能,避免路由信息的冗余。构成超网在进行一番聚合操作后,原本包含成千上万条转发信息的路由表摇身一变,“瘦”成了可能只有几条路由表项的路由表 Mini。

03、超网是如何进行聚合的?

接下来让我们看个小例子,如下图所示,在没有进行构造超网之前,路由器每进行一次路由信息交换,R2 就会收到 R1 更新的 5 条路由信息。

(此处省略十进制与二进制的转换关系,毕竟我们都是机智的通信人)

而构成超网会把网络前缀都相同的 IP 地址组成一个“CIDR 地址块”,又称聚合地址块。

将上图的五条地址转为二进制后,我们发现它们的前 20 位都是相同的,于是乎,将这 20 位取出来作为地址块中的共同前缀,而剩余的 12 位将默认补 0 作为地址块中的主机号。

这五条地址信息进行聚合后,就形成了一个 CIDR 地址块:168.100.128.0/20。此时,R2 在接收 R1 的路由转发表时,就只会收到一条 CIDR 地址信息了。

Tips

CIDR 还使用“斜线记法”,即在 IP 地址后面加上斜线“/”,然后写上网络前缀所占的位数。

我们只要知道 CIDR 地址块中的任何一个地址,再将地址中的主机号改成全 0 或全 1,就可以得到这个地址块中的最小地址和最大地址,而最大地址和最小地址之间所包含的这一片连续的地址,都可以用这个 CIDR 地址块来表示。同时,根据地址块中主机号的位数 n,我们也可以得到这个地址块中可以指派的地址数:2n-2。

Tips

“减 2”是因为主机号为全 0 和全 1 的两个地址为特殊地址,一般不作为源地址或者目的地址使用。

聚合得出的 168.100.128.0/20,把它展开成二进制后,这个地址所在的地址块中的最小地址和最大地址可以很方便地得出,如下表所示。

不难算出,这个地址块中能够包含 4096 个地址(4094 个可以指派的地址)。我们可以用地址块中的最小地址和网络前缀的位数指明这个地址块。例如,上面的最小地址块可记为 168.100.128.0/20。

我们惊奇地发现,这个最小地址居然与前文提到的聚合地址时一模一样的呀!

04、超网是如何进行匹配的?

那既然提到了 CIDR 地址块,就不能不提到与之相对应的最长前缀匹配机制。

这是因为我们在查找路由表项进行路由选择时可能得到不止一个匹配结果。这样就带来一个问题:我们应当从这些匹配的结果中选择哪一条路由呢?

直接公布正确答案:应当从匹配结果中选择具有最长网络前缀的路由。

当路由器收到一个 IP 数据包时,它会将数据包的目的 IP 地址与自己本地路由表中的所有路由表项分别进行逐位对比,对比完毕后,选择与之匹配度最长的路由表项。

举个例子:

假如本座 5 楼现在收到了一封 X 部门发往 Y 部门的邮件,已知 Y 部门的 IP 地址为:192.31.71.128,途经 5 楼的一个路由器现有的路由表项信息分别为:192.31.71.0/26、192.31.68.0/22,那么该路由器在收到这封邮件后应该发往哪个下一跳地址呢?

路由表项 对应的子网掩码 下一跳地址
192.31.71.0/26 11111111.11111111.11111111.11000000 192.31.31.19
192.31.68.0/22 11111111.11111111.11111100.00000000 192.31.31.89
目的地址 :192.31.71.128
所对应的二进制数为:11000000.00011111.01000111.10000000

Tips

这里需要解释的是,虽然 CIDR 不使用子网了,但由于目前仍有一些网络还在使用子网划分和子网掩码,为了更方便地进行路由选择,CIDR 所使用的 32 位地址掩码也可继续称为子网掩码。

例如,/20 地址块的地址掩码是:11111111 11111111 11110000 00000000 (20 个连续的 1)。斜线记法中,斜线后面的数字就是地址掩码中 1 的个数。

将每一个路由表项所对应的子网掩码与目的地址的二进制展开式两两进行“逻辑与”运算后再转换为十进制可得:192.31.71.0、192.31.68.0,运算步骤如下图所示:

我们发现:经过运算后所得到的地址都与对应路由表项相匹配,说明表中两条路由信息都可以作为下一跳地址进行分配。

But!根据最长前缀匹配机制,我们应该选择路由表项 1 所对应的下一跳地址作为转发地址,这是因为网络前缀越长,地址块越小,路由就越具体。

05、总结一下下~

CIDR 消除了传统的 A,B,C 类地址和划分子网的概念,更有效地分配 IPv4 的地址空间,使 IP 地址从三级编址(网络号,子网号,主机号)又回到无分类的两级编址,如下图所示。

CIDR 还使用“斜线记法”,即在 IP 地址后面加上“/”然后指明网络前缀所占的位数。CIDR 把网络前缀都相同的连续 IP 地址组成一个“CIDR 地址块”,即构成超网。

在使用 CIDR 时,在路由表中可能会有不止一个匹配结果,这时应当从所有匹配结果中选择能够匹配更长网络前缀的路由,因为网络前缀越长,其地址块就越小,所得路由就越具体。

本文来自微信公众号:中兴文档 (ID:ztedoc)


本文由LinkNemo爬虫[Echo]采集自[https://www.ithome.com/0/654/991.htm]

本文标签
 {{tag}}
点了个评