背景
路由表中装载着路由器通过各种途径获知的路由条目,每一个路由条目包含目的网络地址/网络掩码、路由协议(路由的来源)、出接口、下一跳IP地址、路由优先级及度量值等信息。
路由来源
- 任何一台支持路由功能的设备都需要维护路由表以便正确地转发数据,在一个实际的网络中,一台路由器的路由表往往包含多条路由,这些路由可能从不同的来源获取。
- 如下图所示,路由表中路由信息的来源可归为三类,分别是直连路由、静态路由及动态路由协议。
- 路由表中“Proto”列显示了该条路由是从什么来源获取到的。
直连路由
- 路由器能够自动获取本设备直连接口的路由并将路由写入路由表,该种路由被称为直连路由(Direct Route ),
- 直连路由的目的网络一定是路由器自身某个接口所在的网络。
- 直连路由的发现是路由器自动完成的,无需人为干预。
示例
如下图所示的网络拓扑中,当完成三台路由器的接口IP地址配置并激活接口后,路由器将自动发现直连接口的路由。
- 以R2为例,由于GE0/0/0接口配置了IP地址192.168.12.2/24,R2能够根据这个IP地址及网络掩码判断出该接口处于192.168.12.0/24网段,
- 于是R2会在路由表中创建一条直连路由,路由的目的网络地址及掩码长度为192.168.12.0/24,
- 因为该条路由为直连路由,所以此协议类型为Direct,
- 直连路由优先级为0(直连路由优先级最高),度量值也为0(直连网络就在“家门口”,因此度量值为0),出接口为GE0/0/0,下一跳IP地址为其自身接口的IP地址192.168.12.2。
- 并且R2也能发现192.168.23.0/24这条直连路由。
接口物理状态和协议状态
-
一个接口的直连路由被加载到路由表的前提是该接口的物理状态(Physical Status)及协议状态(Protocol Status )都必须是Up的。
-
如下图所示,可以通过display ip interface brief命令(HW)查看:
-
以R2的Serial1/0/0接口为例,假设该接口所连接的线缆被拔除,则接口的物理及协议状态都将变成Down(关闭),此时接口的直连路由也就从R2的路由表中消失。
如果R2及R3采用PPP (Point-to-Point Protocol,点对点协议)链路互联:
- 即R2的Serial1/0/0与R3的Serial1/0/0接口均采用PPP作为数据链路层封装协议,并且这段链路使用PPP认证,R3作为PPP认证方,假设此时R2接口上配置的用于PPP认证的用户名或密码有误,导致PPP认证不成功,
- PPP认证如果不成功,会导致R2及R3的Serial 1/0/0接口出现物理状态为Up但是协议状态为Down的情况。在这种情况下,路由器仍然认为该接口不可用,并且该接口的直连路由也就不会出现在路由表中。
静态路由
- 为了让路由器能够到达远端网络(非直连网络),在路由器上可以部署手工配置静态路由(Static Route )。
- 通过这种方式维护路由表项虽然简单直接,但是可扩展性差,如果在规模较大的网络中完全使用静态路由,配置工作量就会很大,而且静态路由无法根据网络拓扑的变化作出动态响应,这也是其一大弊端。
动态路由
- 为了让路由器能够到达远端网络(非直连网络),在路由器上也可以部署动态路由协议(Dynamic Routing Protocol)。
- 一旦路由器激活动态路由协议,它们就相当于拥有了“交谈”的能力,设备之间可以交互信息从而自动计算或者发现网络中的路由。
路由的优先级
- 路由器可以通过多种方式获得路由条目:自动发现直连路由、手工配置静态路由或通过动态路由协议自动学习到动态路由。
- 当路由器从多种不同的途径获知到达同一个目的网段(路由的目的网络地址及网络掩码均相同)的路由时,路由器会比较这些路由的优先级,优选优先级值最小的路由。
示例
如下图所示的网络拓扑:
- R2与R1使用RIP交互路由信息,R2又通过OSPF与R3建立邻接关系,
- 因此R2同时从RIP及OSPF都学习到了去往1.1.1.0/24的路由,这两条路由来自两个不同的动态路由协议并且分别以R1和R3作为下一跳。
- 但是R2最终选择OSPF的路由加载到路由表,将R3作为实际到达1.1.1.0/24的下一跳,原因是OSPF内部路由的优先级值比RIP更小,故路由则更优。
- 需要注意的是,此时R2的路由表中到达1.1.1.0/24的路由只会存在一条,那就是通过OSPF获知的路由,而关于该网段的RIP路由则“隐藏”了起来,当这条OSPF路由失效时,RIP路由才会浮现并被R2加载到路由表中。
- 如下图所示,不同的路由协议或路由种类对应的优先级(HW)。这是一个众所周知的约定(对于不同的厂商,这个约定值可能有所不同)。
路由度量值
- 度量值(Metric )也是影响路由优选的因素之一。
- 路由表中“Cost”这一列显示的就是该条路由的度量值,因此度量值也被称为开销。
- 度量值就是设备到达目的网络的代价值。
- 直连路由的度量值为0(路由器认为这是自己直连的网络,也就是在“家门口”的网终,从自己家走到家门口自然不需要耗费任何代价)。另外静态路由的度量值缺省也为0,而不同的动态路由协议定义的度量值是不同的,比如RIP路由是以跳数(到达目的网络所需经过的路由器的个数)作为度量值,而OSPF则以开销(与链路带宽有关)作为度量值。
示例
如下图所示的网络拓扑中,
- 所有的路由器都部署了动态路由协议RIP。
- R1将直连网段1.1.1.0/24发布到了RIP中,
- 因此R5将会分别从R3及R4学习到RIP路由1.1.1.0/24,从R3学习到的1.1.1.0/24路由的跳数为3,而从R4学习到的路由的跳数为2,因此R5认为从R4到达目标网段要“更近一点”,花费的代价更小一点,于是它将R4通告过来的RIP路由加载到路由表,这样,当R5转发到达该目标网段的数据时,会将其发往R4。
- 另外当R5-R4-R1这段路径发生故障时,R5可能丢失R4所通告的1.1.1.0/24路由,此时R3通告的路由将会被R5加载进路由表,如此一来,到达1.1.1.0/24的数据流量将会被R5引导到R3-R2-R1这条路径。
- 通过上述示例可知度量值是一个影响路由优选的重要因素,基于此原因,在实际的项目中,我们经常利用度量值来实现各种路由策略,从而影响数据流的走向。
总结
一台路由器可以同时通过多种途径获得路由信息,当出现到达同一个目的网段的路由通过多种不同的途径学习到的情况时,路由器会比较路由的优先级,选择优先级值最小的路由。
而当路由器从多个不同的下一跳,通过同种路由协议获知到达同一个目的网段的路由时,它则会进行度量值的比较。另外有些路由协议的路由优选机制会更加复杂一些,例如OSPF或BGP,在执行路由优选时就并不只是单纯地比较度量值这么简单了。