路由器为了正确的交换数据包达到各自的目的地需要知道路由信息,可以手工地向路由表输入这些信息。
但是之前的都是静态路由,虽然可以精准地控制路由的走向,但是一旦网络的拓扑结构发生了变化,那么这些静态的路由信息又得重新的维护。
这里要学习的是路由器如果自动发现这些信息,并通过动态路由选择协议与其他路由器共享这些信息。
路由选择协议(routing protocol)作为路由器之间进行相互交流的语言,用于实现可达性信息和网络状态的共享。
动态路由选择协议:
执行路径决策和路由表更新功能;
在最优路径不可用时决策下一条最优路径
动态路由选择比静态路由选择而言最大的优势在于:动态路由选择能够缓解拓扑变化带来的影响。
为了正确通信,通信双方必须使用相同的语言。
如果一台路由器使用RIP与另一台使用OSPF的路由器进行对话,那么它们将无法实现信息共享。
以后会学习如果让一个路由器学会两种语言。
图 常见的路由协议
所有的路由选择协议都是围绕着一种算法来构建的,一种路由算法应指明以下内容:
- 向其他路由器传送网络可行性信息的过程
- 从其他路由器接受可达性信息的过程
- 基于现有的可达性信息决策最优路由的过程以及在路由表中记录这些信息的过程
- 响应、修正和通告网络中拓扑变化的过程
对于路由选择协议来说,几个共同的问题是:路径决策、度量、收敛和负载均衡。
路径决策
在网络内的所有子网都必须连接到一台路由器上,无论什么情况下,只要路由器有接口连接到一个网络上,那么该接口必须具有一个属于该网络的地址。
这个地址就是可达性信息的起点。
图中给出了一个包含3台路由器的网络。
路由器A知道网络:192.168.1.0、192.168.2.0和192.168.3.0的存在,因为路由器有接口连接到这些网络上,并配置了相应的地址和掩码。
路由器B知道网络192.168.3.0、192.168.4.0、192.168.5.0和192.168.6.0的存在
路由器C知道网络192.168.6.0、192.168.7.0和192.168.1.0的存在。
图 每台路由器从分配给它的接口地址和掩码可以知道它的直连网络
由于每个接口都实现了所连接网络的数据链路和物理层协议,因此路由器也知道网络的状态(工作正常"up"或发生故障"down")。
现在来看A的路由信息共享过程:
步骤1:路由器A检查自己的IP地址和相关掩码,然后推导出与自身所连接的网络是192.168.1.0、192.168.2.0和192.168.3.0。
步骤2:路由器A将这些网络连同某种标记一起保存到路由表中,其中标记指明了网络是直连网络。
步骤3:路由器A向数据包中加入了一下信息:我的直连网络是192.168.1.0、192.168.2.0和192.168.3.0。
步骤4:路由器A向路由器B和路由器C发送这些路由信息数据包的拷贝,或者叫做路由更新。
路由器B和路由器C执行与路由器A完全相同的步骤,并且也向路由器A发送带有与它们直接相连的网络的更新信息。
路由器A将接受到的信息连同发送路由器的源地址一起写入路由表,现在A知道了所有的网络,而且还知道连接这些网络的路由器的地址。
这个过程看似很简单,但是为什么路由选择协议比这要复杂很多呢?
- 路由器A将来自路由器B和路由器C的更新信息保存到路由表之后,它应该用这些信息做什么?例如,路由器A是否应该将路由器C的数据包信息传递给路由B,还是将路由器B的路由选择信息包传递给路由器C呢?
- 如果路由器A没有转发这些更新信息,那么就就不能完成信息的共享。例如,如果路由器B和C之间链路不存在,那么这两台路由器就无法知道对方的网络。因此路由器A必须转发那些更新信息,但是这样又会产生新的问题。
- 如果路由器A从路由器B和路由器C那里知道了网络192.168.4.0,那么为了达到该网路应该使用哪一台路由器呢?它们都合法吗?谁是最优路径呢?
- 什么机制可以确保所有路由器能够接收所有的路由器选择信息,而且这种机制还可以阻止更新数据包在网络中无休止地循环下去呢?
- 如果路由器共享某个直连网络(192.168.1.0、192.168.3.0和192.168.6.00),那么路由器是否仍应旧应该通告这些网络呢?
度量
当有多条路径可以到达相同的网络时,路由器需要有一种机制来计算最优路径。度量(metric)是指派给路由器的一种变量。
对于直连网络,路由器达到它们不需要进行路由选择。
但是对于非直连的网络,通过路由器B或者C都可以到达同一个网络时,那么优选选择哪一条路径呢?这就需要对度量对这两条路径进行等级划分。
不同的路由选择协议使用不同的度量。
例如,RIP定义的含有路由器跳数最少的路径是最优路径;EIGRP基于路径沿路最小带宽和总延时定义最优路径。
下面学习的是常用度量的基本定义,以及某些路由选择协议如何使用多个参数来计算度量以及如何处理度量值相同的路由。
1. 跳数
2. 带宽
3. 负载
4. 时延
5. 可靠性
6. 代价
收敛
动态路由选择协议必须包含一系列过程,这些过程用于路由器向其他路由器通告本地的直连网络,接受并处理来自其他路由器的同类信息,以及传递从其他路由器接受到的信息。
如果出现了这种情况,对于一个网络N,那么从路由器A确定了从路由器到达网络N是最优路径,而路由器C确定达到相同网络N的最优路径是经过路由器A,那么路由器A发向N的数据包到达路由器C之后又会被发回给A,路由器A再次发给C,如此往复循环。称这种在两个或者多个目标之间流量的持续循环为路由器选择环路(route loop)。
使路由表达到一致状态的过程叫做收敛(convergence)。全网实现信息共享以及所有路由器计算最优路径所花费的时间总和就是收敛时间。
如果网络一部分的拓扑结构发生了变化,但是其余的一部分路由器并未通知到这种状态的改变,此时网络处于未收敛的状态,正是在这段时间内可能发生路由器的选择错误。
因此,在一个网络中,收敛时间是一个很重要的因素。在拓扑结构发生变化之后,一个网络的收敛速度越快越好。