边界网关协议学习指引( 七 )


& 本部分有下列要点:
1、在多出口的情况下 , 为了控制流量通过哪条出口链路出去 , 我们引入了本地优先的概念 , 仔细体会本地优先的含义 , 它是在AS内部控制路由选择的 , 而当把路由通过外部对等体连接通告的时候 , 本地优先清空 。
2.6 需求之五—出口流量控制(二)
前面介绍的本地优先属性用于控制数据流怎样出AS , 有些情况下 , AS需要控制数据流怎样进入本AS , 举一个例子:
在这个网络中 , ISP1通过两条上行链路连接ISP2的两个不同的路由器 , 假设在ISP2中有这样两个网络: 210.52.83.0/24(在后面的介绍中以83代表)和210.52.82.0/24(在后面的介绍中以82代表) , 这两个网络都通过我们引入的扩展RIP协议通告给了ISP1的边界路由器RT3 。这时候 , ISP2的治理者想达到这样一个目的:从ISP1来的到82的数据流通过RT2路由器到达 , 而从ISP1来的到83的数据流通过RT1到达 。可以看出 , 跟前面在AS内部控制数据流的出口不同的是 , 我们需要在AS内部控制数据流怎样流入该ISP 。
跟前面的思路相同 , 我们还是给通告的路由一种标记 , 这种当对端接收到同一条路由的时候 , 根据该标记决定选择哪条路由 。按照这个思想 , 我们这样解决:
1、在ISP2的边界路由器RT1上 , 当向外发布路由82和83的时候 , 给83打上标记100 , 而给82打上标记50;
2、在ISP2的边界路由器RT2上 , 当向外发布路由82和83的时候 , 给82打上标记100而给83打上标记50;
3、当ISP1路由器RT3通过外部对等体连接分别从RT1和RT2获得同样的路由时 , 会选择RT1作为83的下一跳而选择RT2作为82的下一跳 。
这种标记我们也以属性的方式实现 , 在实现中这个标记是一个整数 , 数值越大 , 在选择中越有优势 , 我们称这种标记为MED(外部度量) 。可以看出 , 跟本地优先不同的是 , MED控制流量怎样进入AS , 而本地优先则控制流量怎样流出AS 。请认真体会这两个属性的差异 。
在这里我们对本地优先属性和MED属性做一个对比:
1、本地优先是在AS内部控制流量怎样流出AS , 而MED属性则是控制流量怎样进入AS;
2、本地优先只在AS内部有效 , 在通过外部对等体通告路由的时候 , 本地优先被过滤掉 , 而MED属性则只在外部对等体关系中有效 , 在内部对等体之间通告路由的时候 , MED属性被忽略掉 。
& 本部分有下列要点:
1、引入MED属性来控制数据流从哪个入口流入AS , 注重跟本地优先属性进行比较 。
2.7 路由选择分析
细心的读者一定有一个问题:在路由器通过不同的连接接收到同一条路由的时候 , 该怎样选择呢?按照上面我们介绍的本地优先和MED属性的概念 , 这两个因素是选择的时候需要考虑的 , 但却不是唯一要考虑的 。实际上 , 在进行路由选择的时候 , 是按照下列顺序进行的:
2.7.1 下一跳可达与路由选择
在这里 , 我们首先引入一个重要规则:
路由器通过内部对等体连接向外通告路由的时候 , 是不修改下一跳信息的 , 但可以通过命令强行使路由器更改下一跳为自己 。而通过外部对等体连接向外通告路由的时候 , 默认情况下是修改下一跳信息 , 除非通过命令更改了这种默认的行为(这在上面的小节中曾经讲过) 。引入这样的规则后 , 问题就产生了 , 如下图所示:

在这个网络中 , 两个ISP的边界路由器通过我们扩展的RIP协议连接起来 , 并互相发布路由 。在RT1上 , 也同RT2路由器建立了内部对等体连接 。这样 , 根据前面我们给出的规则 , RT1在接收到从RT3来的路由后 , 会直接传送给RT2而不对下一跳进行修改 。这样假如RT2上没有到RT1和RT3之间网络的路由 , 也就是说 , 假如RT2不知道怎么到达RT3 , 问题就产生了:RT2收到了一条下一跳不可达的路由 。这时候RT2就会把它丢弃 。

推荐阅读