5.路由协议
域内路由与域间路由
自治系统内部的路由选择称为域内路由选择,自治系统之间的路由选择称为域间路由选择
内部网关协议(Interior Gateway Protocol, IGP)
如RIP 和 OSPR
外部网关协改(External Gateway Protocol, EGP)
当数据报传到一个自治系统的边界时(两个自治系统可能使用不同的 IGP),就需要使用一种协议将路由选择信息传递到另一个自治系统中。
目前使用最多的外部网关协议是 BGP-4
每个自治系统自己决定在本自治系统内部运行哪个内部路由选择协议 (例如,可以是 RIP,也可以是OSPF),但每个自治系统都有一个或多个路由器(图中的路由器 R1和R2)。除运行本系统的内部路由选择协议外,还要运行自治系统间的路由选择协议(如 BGP-4)。

路由信息协议 (RIP)
RIP 是一种分布式的基于距离向量的路由选择协议,其最大优点就是简单。
RIP 是应用层协议,它在传输层使用 UDP
RIP 规定
- 网络中的每个路由器都要维护从它自身到其他每个目的网络的距离记录(因此这是一组距离,称为距离向量)。
- 距离也称跳数(Hop Count),规定从一个路由器到直接连接网络的距离(跳数)为1。而每经过一个路由器,距离(跳数)加1。
- RIP认为好的路由就是它通过的路由器的数目少,即优先选择跳数少的路径。
- RIP 允许一条路径最多只能包含 15个路由器(即最多允许15跳)。因此距离等于16时, 它表示网络不可达。可见 RIP 只适用于小型互联网。距离向量路由可能会出现环路的情况,规定路径上的最高跳数的目的是为了防止数据报不断循环在环路上,减少网络拥塞的可能性。
- RIP 默认在任意两个[1]使用 RIP 的路由器之间每30秒广播一次 RIP路由更新信息,以便自动建立并维护路由表(动态维护)。
- 在RIP 中不支持子网掩码的 RIP 广播,所以 RIP 中每个网络的子网掩码必领相同。但在新的 RIP2 中,支持变长子网掩码和 CIDR。
RIP 的特点(注意与 OSPF 的特点比较)
- 仅和相邻路由器交换信息
- 路由器交换的信息是当前路由器所知道的全部信息,即自己的路由表
- 按固定的时间间隔交换路由信息,如每隔30 秒。
最初,每个路由器只知道与自己直接相连的网络。经过若干 RIP 广播后,所有路由器都最终知道了整个IP网络的路由表,称为 RIP 最终是收敛的
坏消息传的慢
例如三个路由器,如图所示
当R2检测到 R3 不可达时,将其之间的距离设为 16,并将此信息传递给相邻的路由器R1,但是在R1 收到这个报文之前,R2 并不知道 R3 不可达,R2 只知道通过R1可以达到R3,故此时 R2 收到R1的路由表后,便会错误的认为通过R1可以到达R3,然后两者之间兜圈子,知道将这个到达 R3的距离刷到16,才结束这场乌龙
注意
通过 RIP 收敛后,每个路由器到每个目标网络的路由都是距离最短的(即跳数最少,最短路由),哪怕还存在另一条高速(低时延)但路由器较多的路由。
距离向量算法
每个路由表项目都有三个关键数据:<目的网络N,距离d,下一跳路由器地址X>。
算法步骤
- 对地址为X的相邻路由器发来的 RIP 报文,先修改此报文中的所有项目:把“下一跳”字段中的地址都改为 子,并把所有“距离” 字段的值加 1。
- 对修改后的 RIP 报文中的每个项目,执行如下步骤:
- 当原来的路由表中没有目的网络N时,把该项目添加到路由表中。
- 当原来的路由表中有目的网络N,且下一跳路由器的地址是X时,用收到的项目替换原路由表中的项目。
- 当原来的路由表中有目的网络N,且下一跳路由器的地址不是叉时,如果收到的项目中的距离d小于路由表中的距离,那么就用收到的项目替换原路由表中的项目;否则什么也不做。
- 如果 180 秒(RIP 默认超时时间为 180 秒)还没有收到相邻路由器的更新路由表,那么把此相邻路由器记为不可达路由器,即把距离设置为16 (距离为16表示不可达)。
- 返回。
优点
RIP 最大的优点是实现简单、 开销小、收敛过程较快
RIP 的缺点
- RIP 限制了网络的规模,它能使用的最大距离为 15(16 表示不可达)。
- 路由器之间交换的是路由器中的完整路由表,因此网络规模越大,开销也越大。
- 网络出现故障时,会出现慢收敛现象(即需要较长时间才能将此信息传送到所有路由器),俗称 “坏消息传得慢”,使更新过程的收敛时间长。
开放最短路径优先 (OSPF)协议
基本特点
OSPF 与 RIP 相比有以下4 点主要区别:
- OSPF 向本自治系统中的所有路由器发送信息,这里使用的方法是洪泛法。而 RIP 仅向自己相邻的几个路由器发送信息
- 发送的信息是与本路由器相邻的所有路由器的链路状态
- 只有当链路状态发生变化时,路由器才用洪泛法向所有路由器发送此信息
- OSPF 是网络层协议,它不使用 UDP 或TCP,而直接用 IP 数据报传送
此外,还有:
- 路径问的负载平衡
- 十分灵活,不同类型业务计算不同的路由
- 仅在可信赖的路由器之间交换链路状态信息
- 支持可变长度的子网划分和无分类编址 CIDR
- 每个链路状态都带上一个32位的序号,序号越大,状态越新
基本工作原理
- 由于各路由器之间频繁地交换链路状态信息,因此所有路由器最终都能建立一个链路状态数据库。这个数据库实际上就是全网的拓扑结构图,它在全网范围内是一致的(称为链路状态数据库的同步)。
- 然后,每个路由器根据这个全网拓扑结构图,使用Dijkstra 最短路径算法计算从自己到各目的网络的最优路径,以此构造自己的路由表。此后,当链路状态发生变化时,每个路由器重新计算到各目的网络的最优路径,构造新的路由表。
注意
虽然使用 Dijkstra 算法能计算出完整的最优路径,但路由表中不会存储完整路径,而只存储"下一跳"(只有到了下一跳路由器,才能知道再下一跳应当怎样走)。
为使 OSPF 能够用于规模很大的网络,OSPF 将一个自治系统再划分为若干更小的范围,称为区域。
划分区域的好处是:
- 将利用洪泛法交换链路状态信息的范围局限于每个区域而非整个自治系统,减少了整个网络上的通信量。
- 在一个区域内部的路由器只知道本区域的完整网络拓扑, 而不知道其他区域的网络拓扑情况。
- 这些区域也有层次之分。处在上层的域称为主干区域,负责连通其他下层的区域,并且还连接其他自治域。
五种分组类型
- 问候分组
- 数据库描述分组
- 链路状态请求分组
- 链路状态更新分组
- 链路状态确认分组
提示
由于一个路由器的链路状态只涉及与相邻路由器的连通状态, 因而与整个互联网的规模并无直接关系。因此,当互联网规模很大时,OSPF 要比 RIP 好得多, 而且OSPF 协议没有“坏消息传播得慢” 的问题。
边界网关协议 (BGP)
- 边界网关协议(BGP)只能力求寻找一条能够到达目的网络且比较好的路由(不能兜圈子), 而并非寻找一条最佳路由
- BGP 采用的是路径向量路由选择协议
- BGP 是应用层协议,它是基于 TCP的。
每个 BGP 发言人除必须运行 BGP 外,还必须运行该 AS 所用的内部网关协议,如OSPF 或RIP

BGP-4 共使用4 种报文:
- 打开(Open)报文。用来与相邻的另一个 BGP 发言人建立关系。
- 更新(Update)报文。用来发送某一路由的信息,以及列出要撤销的多条路由。
- 保活(Keepalive)报文。用来确认打开报文并周期性地证实邻站关系。
- 通知(Notification)报文。用来发送检测到的差错。

RIP协议规定,不相邻的路由器之间不交换信息。所以这里指的应该是相邻的任意两个 ↩︎
