变长子网掩码和路由聚合在网络设计中的应用


对于网络设计师而言 , 构造一个运行良好的网络要面临很多挑战 。在一个大型的 , 层次的 , 可伸缩的网络中 , 一个精心规划的IP地址分配策略和适时的路由聚合是至关重要的 。
传统的网络建立在有类别地址的基础上(A , B , C类地址) 。早期的路由协议 , 如RIPv1 , IGRP出于节省带宽的考虑 , 在路由更新时不传送子网掩码信息 , 因此在网络信息传输时需要对子网掩码做一些假设 。
1.假如路由器接收端口配置的IP地址和路由更新中传送的子网信息有相同的主类别网络 , 则该子网使用接收端口的掩码配置 。
2.假如传送的子网信息穿越不同主类别网络边界 , 则传送路由器自动在主类别网络边界执行路由聚合 , 并只传送经过聚合的路由 。
 
图1
如图1 , 网络中有三台路由器:A , B , C , 均运行RIPv1路由协议 , RIPv1是有类路由协议 , 路由更新中不传递子网掩码信息 。B的S0端口收到从A传送的子网信息10.1.0.0(不包括子网掩码) , 由于B的S0端口在10.2.0.0/16子网和10.1.0.0有相同的主类别网络10.0.0.0 , 所以B的路由表中会添加一条10.1.0.0/16的记录--使用的是B在S0端口的掩码/16 。当B向C传递10.1.0.0子网的路由信息时 , 由于B , C之间为172.16.1.0/24子网 , 主类别网络为172.16.0.0 , 不同于10.1.0.0的主类别网络10.0.0.0 , 因此B在向C传送10.1.0.0时会自动执行路由聚合到10.0.0.0 , C在路由表中添加10.1.0.0/16子网的路由信息将是10.0.0.0/8 , 使用的是主类别网络默认的掩码(A类地址/8位 , B类地址/16位 , C类地址/24位) 。
 
图2
如图2 , 路由器B的S0端口在10.2.0.0/24子网 , 即/24位掩码 , 由于从A传递的10.1.0.0子网要使用接收端口的掩码配置 , 因此也会使用/24位掩码 , 从而产生了一条错误的路由记录 , 这将导致某些经过B去往10.1.0.0/16的流量将无法到达 。为了避免上述情况 , 必须约定 , 同主类别网络的子网必须使用相同的掩码 。新约定又带来了新问题 , 即同主网络下地址无法有效的分配 。
 
图3
如图3 , 假如某局域网上使用了27位的掩码 , 则每个子网可以支持30台主机(2^5-2=30);而对于WAN连接而言 , 每个连接只需要2个地址 , 理想的方案是使用30位掩码(2^2-2=2) , 然而同主类别网络相同掩码的约束 , WAN之间也必须使用27位掩码 , 这样就浪费28个地址 。另外一个是不连续地址的问题 。
 
图4
如图4 , 根据前述约定 , 路由在经过不同主网络边界时会自动聚合到主类别地址边界 。A的10.1.0.0/16子网经过172.16.2.0/24传递到B , 由于经过不同主类别地址 , 所以会自动聚合 , 实际传送的是10.0.0.0;同理 , C的10.2.0.0/16子网经过172.16.1.0/24传递到B , 实际传送的是10.0.0.0 。这样 , 对于B而言 , 它收到两条去往10.0.0.0子网的路由记录 , B会添加两条到10.0.0.0/8路由记录到路由表 , 它们下一跳的地址不同 , 一条指向A的S1 , 另一条指向C的S0 。由于有相同的跳数 , 所以会自动启用负载平衡 , 这样经过B访问10.0.0.0的流量将无法区分是去往10.1.0.0的还是10.2.0.0的 , 它们都有50%的机会命中 , 所以就会出现间歇性的网络访问故障 。而对10.1.0.0和10.2.0.0而言 , 它们二者是不可见的 。由于有不连续地址的问题 , 所以 , 规划网络地址时必须保证一个主网络的子网必须连续存在 。
上述问题随着变长子网掩码 , 路由聚合和无类域间路由以及无类路由协议(RIPv2 , EIGRP , OSPF , IS-IS , BGPv4)等技术的引入而得到了良好的解决 。
变长子网掩码(VLSM) , 是指在一个层次结构的网络中 , 可以使用多个不同的掩码 , 也即可以对一个经过子网划分的网络再次划分 。变长子网掩码的引入 , 有效解决了地址分配的浪费问题 。

推荐阅读