如何聚合给定 IP 地址及其子网掩码的路由表

网络工程 路由 子网
2021-07-10 07:02:40

新手网络在这里。

我似乎无法在网上找到任何直接的答案。

例子:

  IP             SUBNET           NEXT HOP
> 129.10.112.0   255.255.255.0    R1
> 129.10.80.0    255.255.255.0    R1
> 129.10.0.0     255.255.0.0      R2
> 129.10.63.0    255.255.255.0    R4
> 129.10.63.0    255.255.255.0    R4
> 129.10.64.0    255.255.192.0    R3
> 129.10.65.0    255.255.255.0    R4
> 129.10.66.0    255.255.255.0    R4

将这些条目聚合为最少条目数的正确方法是什么?

2个回答

首先,按下一跳分隔条目。您必须分别总结它们:

IP             SUBNET           NEXT HOP
129.10.112.0   255.255.255.0    R1
129.10.80.0    255.255.255.0    R1

129.10.0.0     255.255.0.0      R2

129.10.64.0    255.255.192.0    R3

129.10.63.0    255.255.255.0    R4
129.10.63.0    255.255.255.0    R4
129.10.65.0    255.255.255.0    R4
129.10.66.0    255.255.255.0    R4

然后对于每个下一跳,将所有网络地址转换为二进制。这里只是第一个:

10000001.00001010.01110000.00000000 = 129.10.112.0 
10000001.00001010.01010000.00000000 = 129.10.80.0

现在找到所有相同的数字,从左边开始。在这种情况下,直到第 18 位的数字都相同。所以你的新面具是/18。现在,使用地址和 /18 掩码,通过对地址和掩码进行 AND 运算来找到网络地址:

10000001.00001010.01110000.00000000 = 129.10.112.0
11111111.11111111.11000000.00000000 = /18 (255.255.192.0)
-------------------------------------
10000001.00001010.01000000.00000000 = 129.10.64.0 /18

所以前两条路由的最佳汇总是129.10.64.0/18。

(剩下的留给读者作为练习)

有来自 ISC 的工具 Aggregate。

我已经转储了 Google IP(6760 个子网)

$ cat google-ip | wc -l
6760
$ head google-ip
66.249.64.0/20
66.249.80.0/20
74.125.57.240/29
216.239.44.0/24
216.239.45.0/24
23.251.128.0/23
23.251.128.0/24
23.251.129.0/24
23.251.130.0/23
23.251.130.0/24

用法汇总

$ aggregate < google-ip > google-ip-agged
$ cat google-ip-agged | wc -l
58
$ head google-ip-agged
1.0.0.0/24
1.1.1.0/24
1.2.3.0/24
8.8.4.0/24
8.8.8.0/24
8.15.202.0/24
8.34.208.0/20
8.35.192.0/20
23.236.48.0/20
23.251.128.0/19

我的大转储仅聚合到 58 个子网。

aur/aggregate从 Archlinux 使用。