Internet 采用层次路由,AS 内部路由选择协议也称为 内部网关协议(interior gateway protocol, IGP),最常见的 AS 内部路由选择协议有: 路由选择信息协议(Routing Information Protocol, RIP)和 开放最短路径优先(Open Shortest Path First, OSPF)。
RIP 协议
RIP 是最早的自治系统(AS) 内部因特网路由选择协议之一,早在 1982 年便随 BSD-UNIX 操作系统发布,且目前仍在广泛使用。RIP 采用了距离向量路由算法:
- 距离度量:采用跳步数作为距离度量,每条链路 1 个跳步。由于距离向量路由算法可能出现无穷计数问题,RIP 定义
max=15 hops
来缓解无穷计数问题,这也反映了 RIP 协议适用于小规模的自治系统。 - 某路由器的距离向量发生变化时,向其邻居发送变化后的距离向量,称为通告(advertisement);且每隔 30 秒,无论距离向量变化与否,邻居之间交换一次距离向量。每个通告包含了该自治系统内最多达 25 个目的子网(IP 地址形式)的列表,以及发送方到其中每个子网的距离。
每个路由器维护一张称为路由选择表(routing table)的 RIP 表,一台路由器的路由选择表包括该路由器的距离向量和该路由器的转发表(允许路由聚合)。下图显示了路由器 D 的转发表,注意到该转发表有 3 列,第一列用于目的子网,第二列指示了沿着最短路径到目的子网的下一个路由器的标识(实际上是下一跳路由器接口 IP 地址,结合 ARP 协议获取相应的 MAC 地址后构造链路层数据帧发送到链路上),第三列指出了沿着最短路径到目的子网的跳步数。现假定 30 秒以后,路由器 D 收到来自路由器 A 的通告(注意到该通告正是来自路由器 A 的路由选择表信息),并更新其路由选择表。通告中的 next
列体现了毒性逆转技术,即路由器 A 到达目的子网
z
z
z 的最短路径的下一跳不是路由器 D。
下面考虑 RIP 协议实现方面的几个问题。如果一台路由器一旦超过 180 秒没有从邻居听到报文,则该邻居不再被认为是可达的:即要么其邻居死机了,要么连接的链路中断了。当这种情况发生时,RIP 修改本地路由选择表,如果路由选择表发生了改变就立即向邻居发送新的通告,邻居再依次向外发送通告(如果路由选择表改变)。
虽然 RIP 协议完成的是网络层的功能,但 RIP 是被当做一个应用层进程(称为 route-d)来实现的,该进程负责维护路由选择表并与相邻路由器中的 route-d 进程交换报文,它能在一个标准套接字上发送和接收报文,并且使用一个标准的传输层协议。如下图显示的那样,RIP 是一个运行在 UDP 上的应用层协议,这体现了计算机网络参考模型是根据功能来划分,而不是依据它们的实现方式来划分的;也说明了路由器上也可以运行 UDP、TCP 传输层协议(虽然不是端到端层),但是它们所提供服务的应用并不是为端用户而设计的,而是为了完成网络层的功能而设计的应用。
OSPF 协议简介
就像 RIP 一样,OSPF 路由选择也被广泛用于因特网的 AS 内部路由选择,它采用了链路状态路由选择算法:
- 它的核心是一个使用洪范链路状态信息的链路状态协议和一个 Dijkstra 最低费用路径算法,使用 OSPF,每台路由器构建了一幅关于整个自治系统(AS)的完整拓扑图。路由器在本地运行 Dijkstra 算法,以确定一个以自身为根节点的到该 AS 内所有子网的最短路径路由信息。
- 各条链路费用由网络管理员配置。管理员也许会将所有链路费用设为 1,因而实现了最少跳步数路由选择;或者可能会选择将链路权值按与链路容量成反比来设置,从而不鼓励流量使用低带宽链路。
- 不同于RIP,使用 OSPF 时路由器向自治系统内所有其他路由器广播路由选择信息,而不仅仅是向其相邻路由器广播,即 OSPF 通告在整个 AS 范围泛洪。每当一条链路的状态发生变化时,路由器就会广播链路状态信息;即使链路状态未发生变化,它也要周期性地(至少每隔 30 分钟一次)广播链路状态。OSPF 报文直接封装到 IP 数据报中。
OSPF 协议被认为是 RIP 的后继者,因为它具有许多优点(RIP 不具有):
- 安全:所有 OSPF 报文可以被认证,可以预防恶意入侵。
- 允许使用多条费用相同的路径。当到达某目的地有多条相等费用的路径存在时,无需仅选择单一的路径来承载所有的流量。RIP 只能选一条。
- 对于每条链路,可以针对 IP 数据报不同的 TOS(服务类型)设置多个不同的费用度量。
- 对单播与多播路由选择的综合支持。多播 OSPF(MOSPF) 提供对 OSPF 的简单扩展,以便提供多播路由选择。MOSPF 使用现有的 OSPF 链路数据库,并为现有的 OSPF 链路状态广播机制增加了一种新型的链路状态通告。
- OSPF 支持对大规模自治系统的分层。
一个较大的 OSPF 自治系统可以继续进行层次划分,即两级分层:一个主干(backbone)区域和若干个局部区域。链路状态通告只限于区域内,且每个路由器只需掌握其所在区域的详细拓扑,每个区域都运行自己的 OSPF 链路状态路由选择算法。每个局部区域包含一台或多台区域边界路由器(area boarder router)负责为流向该区域外的分组提供路由选择。主干区域包含了自治系统内所有的区域边界路由器,并且可能还包含一些非边界路由器,和若干个网关路由器。