分类: 系统运维
2011-10-20 10:53:56
通常,在连接到广播类型IP网络情形中,使用距离矢量路由协议的路由器会使用水平分割(Split horizon)机制来减少可能出现的路由环路。水平分割功能可以阻止从一个接口上接收或学习到的路由信息再从该接口上被通告出去。其实可以从其名称的“水平分割”加以理解,水平分割就是要求路由消息一直向前发送,不要回头。这样要求发送的路由消息中目的地址就不能是路由源接口。
下面举一个示例进行介绍(网络结构参见本章前面的图7-6)。
如果Router B的S1接口从Router C S0接口上接收到了一个到达10.20.40.0网络的路由通告信息(假设为路由①)。该路由为:Router C的S0接口→Router C的E0接口→目的网络就是10.20.40.0。
这时,Router B会在自己的路由表中创建一条新路由(假设为路由②)。该路由为:Router B的S1接口→Router C的S0接口→目的网络10.20.40.0。
如果此时Router B通过其S1接口向Router C的S0接口发送这个路由的更新通告,告诉Rouer C它学习到了这条新路由,则Router C又会创建一条新路由(假设为路由③)。该路由为:Router C的S0接口→Router B的S1接口→目的网络10.20.40.0。
这样在Router C上就相当于有两条到达同一目的网络的①和③路由。而在Router B中已有②路由。这样Router B如果要访问目的网络10.20.40.0,则首先会采用路由②,它指出下一跳地址为Router C的S0接口,当数据包到达Router C时,由于有路由③,它又指出从Router C的S0接口出发的一条路由的下一跳地址为Router B的S1接口。结果显然,数据包永远不会到达真正的目的网络10.20.40.0,而是在从Router C的S0接口和Router B的S1接口之间无穷循环。尽管在Router C中还有一条同样是以S0接口为源地址的路由①,但是路由③俦级明显高于路由①,因为Router C的S0接口与Router B的S1接口的IP地址属于同一网络,度量为0,而Router C的S0与E0接口的IP地址通常不是在同一网络的,度量至少为1。所以实际上路由①是根本取不到作用的。
这种行为通常用于优化多个路由器间的通信,特别是在需要阻止某些链路通信时。但是,非广播类型网络,如帧中继和SMDS(交换多兆位数字系统),因为出现路由环路的机会相当小,所以你可以禁止RIP的水平分割功能。除了采用了帧中继或者SMDS封装的其他所有接口,默认是启用了水平分割的。如果在接口配置中包括了“encapsulation frame-relay”或者“encapsulation smds”命令,则默认是禁用水平分割功能的。使用任何X.25协议封装的接口默认都不禁用水平分割功能的。
另外,如果一个接口配置辅助IP地址,并且启用了水平分割功能时,则通过辅助IP地址进行路由更新时也可能将不会成功。路由更新是基于每个标准网络进行的(也就是基于整个网络进行更新的),而不是基于子网进行的,除非你禁止了水平分割功能。启用了水平分割功能后,路由器上的有些接口就可能被阻止消息的发送了。
在使用水平分割功能时要注意,在有些情况下还应禁止它。最常见的一种环境是帧中继的Hub-Spoke结构的网络。Hub路由器接收到Spoke端的路由更新,必须再从这个接口发出去,以便其他Spoke路由器来接收这些路由。如果启用了水平分割,从一个Spoke传递到Hub的路由将无法到达其他Spoke路由器,导致Spoke路由器之间相互没有路由。
本文摘自《路由器配置与管理完全手册(Cisco篇)试读样章》第七章