最近有不少刚朋友有些疑惑,为什么串行链路在配置静态路由的时候,只用指出接口,而在MA(多路访问)链路上要采用“出接口+下一跳”的方式指静态路由,让人迷惑的是,在MA链路上采用“出接口+下一跳”能避免递归查找的问题。今天我写了这边文章,希望能对大家有所帮助。  
    首先介绍下什么是递归查找:

     众所周知,路由器在转发数据包的时候会参考路由表的路由表项,确定到特定网段的出接口,从而实现路由功能。通过具体实例,来讲解更具说服力,上拓扑:
 
这是用GS画的一个简单拓扑,在R3上指静态路由时用: 
R3(config)#ip route 12.0.0.0 255.255.255.0 23.0.0.2  (仅采用下一跳的形式,R2的e2/0接口ip add:23.0.0.2/24)
例如当有一个数据包由R3转发给R1,过程会是怎样呢?
 
第一步,查看数据包的目的地址,去往12网段
 
第二步查看路由表,OK,有去往12网段的静态路由,可以转发此数据包,但是路由表项中没有出接口,而路由器路由最终是确定出接口,所以再次查找路由表,确定出接口,发现可以通过e1/0接口到达目的网段。
OK,可以开始转发数据包了——通过两次,或者多次的查找路由表来确定出接口,这种方式被称为“递归查找”,递归查找会降低路由效率,所以应该尽量避免。
 
如果使用:
R3(config)#ip route 12.0.0.0 255.255.255.0 e1/0 23.0.0.2(出接口加下一跳)这样一次查找就可以确定出接口了,避免了递归查找的问题
 
     而如果是在串行链路上,例如从R1路由一个数据包到R3,那么我们可以采用出接口的静态路由
R1(config)#ip route 23.0.0.0 255.255.255.0 e2/0 12.0.0.2
 
有人会问,为什么从R3到R1不直接采用出接口的方式指静态路由呢?因为以太网是多路访问网络,在这条链路上有很多个路由器,它们是同一网段。如果只指明出接口,可能会发生错误的路由。而串行链路则是一对一,点到点的链路,不用担心出现此类问题