路由汇总及算法
 
●路由汇总
在已知子网的情况下,怎样确定最佳的路由汇总策略?——这个问题在IP地址计算中十分常见。关于这个问题,有两种考量方法:
1)包含汇总路由:单条汇总路由包含了所有已知子网,也可能包含其它不存在的子网。
2)排他汇总路由:使用尽可能少的路由包含所有已知子网,不能包含其它不存在的子网。
这两种情况各有其存在的理由,比如说,当局域网中需要保留一些地址在未来使用时(扩展的需要),会考虑采用第1)种方法;而对于局域网间地址路由的汇总,可能不希望包含其它地址(因为这些地址可能已经被其他网使用),这时会考虑采用第2)种方法。

●计算包含汇总路由的方法
标准方法(二进制):
1)写出每个子网号的二进制形式;
2)找出这些子网号中连续且值相同的位,这些位数即前缀值x;
3)写一个新的32位数,该数复制子网号的前x位数,剩余位的值都为0,这就是汇总的路由;
4)将该数转换成10进制形式。
快速方法(10进制):
1)计算已知子网的个数,找到最小值x,使得2x >= 子网个数;
2)找到子网中最大的前缀值y,令y=y-x;
3)假定地址值最小的子网号为一个IP地址,令其前缀为y,计算出该假设地址所在的子网号;
4)假定地址值最大的子网号为一个IP地址,令其前缀为y,计算出该假设地址所在的子网号,如果所得子网号与3)所得一样,那么这就是汇总的路由;
5)如果4)所得子网号与3)所得不一样,那么再重复3)和4)的步骤,但是y=y-1。
举例:已知子网168.34.12.0/24、168.34.13.0/24、168.34.14.0/24、168.34.15.0/24和168.34.16.0/25,求其包含汇总路由。步骤如下:
1)子网个数为5,所以求得x=3,使得23 = 8 > 5;
2)子网中最大的前缀值为25,所以y=25-3=22;
3)地址值最小的子网号是168.34.12.0,假定其为一个IP地址,前缀为22,则计算出其所在子网为168.34.12.0/22;
4)地址值最大的子网号是168.34.16.0,假定其为一个IP地址,前缀为22,则计算出其所在子网为168.34.16.0/22;
5)地址值最小的子网号是168.34.12.0,假定其为一个IP地址,前缀为21,则计算出其所在子网为168.34.8.0/21;
6)地址值最大的子网号是168.34.16.0,假定其为一个IP地址,前缀为21,则计算出其所在子网为168.34.16.0/21;
7)地址值最小的子网号是168.34.12.0,假定其为一个IP地址,前缀为20,则计算出其所在子网为168.34.0.0/20;
8)地址值最大的子网号是168.34.16.0,假定其为一个IP地址,前缀为20,则计算出其所在子网为168.34.16.0/20;
9)地址值最小的子网号是168.34.12.0,假定其为一个IP地址,前缀为19,则计算出其所在子网为168.34.0.0/19;
10)地址值最大的子网号是168.34.16.0,假定其为一个IP地址,前缀为19,则计算出其所在子网为168.34.0.0/19;与9)所得相同,此即为汇总的路由。

●计算排他汇总路由的方法(二分法、SLSM)
1)先找出包含汇总路由,称为候选排他汇总路由;
2)看该候选路由是否包含了不存在的子网,如果没有包含,那么该候选路由即所求的一部分;
3)如果候选路由包含了不存在的子网,则将其分割成两半,形成两条新的候选路由(前缀增1);
4)如果候选路由中的一条包含了不存在的子网,那么再将其一分为二,如果候选路由中的一条完全不包含已知的子网,则丢弃此条路由;
5)重复2)和4)直到没有新的可能的候选路由产生为止。
举例:已知子网168.34.20.0/24、168.34.21.0/24、168.34.22.0/24、168.34.23.0/24和168.34.24.0/24,按前面的方法可得到其包含汇总路由为168.34.16.0/20,求排他汇总路由的步骤如下:
1)因为168.34.16.0/20包含了不存在的子网,所以将其一分为二:168.34.16.0/21和168.34.24.0/21;
2)对于168.34.16.0/21,仍然包含不存在的子网,再将其一分为二:168.34.16.0/22和168.34.20.0/22,此时168.34.20.0/22已经不包含不存在的子网,所以它是所求的一部分,而168.34.16.0/22完全不包含已知子网,所以它被丢弃;
3)再看168.34.24.0/21,仍然包含不存在的子网,再将其一分为二:168.34.24.0/22和168.34.28.0/22,此时168.34.28.0/22完全不包含已知子网,所以它被丢弃;
4)对于168.34.24.0/22,仍然包含不存在的子网,再将其一分为二:168.34.24.0/23和168.34.26.0/23,此时168.34.26.0/23完全不包含已知子网,所以它被丢弃;
5)对于168.34.24.0/23,仍然包含不存在的子网,再将其一分为二:168.34.24.0/24和168.34.25.0/24,此时168.34.25.0/24完全不包含已知子网,所以它被丢弃,而168.34.24.0/24已经不包含不存在的子网,所以它是所求的一部分,此时已经没有候选路由。
综上所述,求得排他汇总路由为:168.34.20.0/22和168.34.24.0/24。