1. 内部网关协议 RIP
路由信息协议(Routing Information Protocol,RIP)是内部网关协议中最先得到广泛使用的协议,RIP 使用距离向量算法(Distance Vector Algorithm)更新路由表,常用于小型的自治系统。
距离向量算法要求每个路由器在路由表中列出到所有已知目的网络的最佳路由,并且定期把自己的路由表副本发送给与其直接相连的其他路由器。
为了确定最佳路由,使用测度度量路由优劣。可以使用表示数据报到目的网络必须经过的路由器数目的测度,即跳数。也可以使用表示数据报经历的时延、发送数据报的开销或其他的测度。RIP 使用跳数测度,这样,所谓的最佳路由就是能够以最少跳数到达某目的网络的路由。
RIP 和 OSPF 都是分布式路由选择协议,它们的共同特点是每一个路由器都要不断地和其他一些路由器交换路由信息。RIP 路由信息交换与更新有以下几个特点:
-
RIP 路由器仅和本自治系统内与自己相邻的路由器交换信息。RIP 规定,信息仅在相邻的路由器之间交换,所谓相邻指在一个网络上。此外,主机可以参与接收 RIP 广播并更新自己的路由表,但主机不发送路由更新报文。
-
RIP 支持 2 种信息交换方式。一种是定期的路由更新,即路由器按固定的时间间隔向所有邻居广播一次更新报文,其中包含路由器当前所知道的全部路由信息,即自己的路由表。另一种是触发的路由更新,无论何时只要路由表中有路由发生改变,路由器就可立即向与其直连的主机和路由器发送触发更新报文。
-
路由表更新的原则是按照距离向量算法,确定并记录到各目的网络的最短距离(以跳数计)和路径上的下一跳。
RIP 存在 2 个版本,版本 2 (RIP-2)的更新报文中还增加了子网掩码信息,以支持变长子网地址或无分类地址。RIP-2 更新报文包含 4 元组 (网络地址,子网掩码,到网络的下一跳,到网络的距离)。
RIP 作为内部网关协议,存在一些限制:
-
用一个小的跳数值(16)表示无穷大,限制了使用 RIP 的互联网规模。
-
路由器周期地向邻居广播或组播完整的路由表,随着网络规模的增大,开销也会增大,路由更新的收敛时间也会延长。
-
RIP 只使用跳数测度,不支持负载均衡,路由选择相对固定不变。
2. 内部网关协议 OSPF
2.1 OSPF 概述
OSPF 是 IETF 的一个工作组设计的一个内部网关协议,它使用链路状态(Link State)算法,或称最短路径优先(Shortest Path First,SPF)算法。
在链路状态路由选择协议中,每个路由器维护一个描述自治系统拓扑的数据库,该数据库称为链路状态数据库(LSDB)。LSDB 的基本元素是 LSA(Link State Advertisement,链路状态通告),LSA 是描述一个路由器或网络的本地状态的数据单位。LSDB 包含路由器的本地状态。路由器通过洪泛法(flooding)向整个自治系统发布自己的本地状态。路由器将 LSA 发送给邻接路由器,它们收到 LSA 后将分别更新自己的 LSDB,并将 LSA 转发给自己的其他邻接路由器,LSA 这种扩散方法称为洪泛法。洪泛法可以使网络拓扑发送变化时所有路由器都能更新数据库,从而每个参与的路由器都有相同的数据库。
每个路由器基于 LSDB 使用 Dijkstra 最短路径算法,构建一个以自己为根的最短路径树(SPF 树)。最短路径树给出到自治系统中每个目的地的路由。从外部得到的路由信息在树中作为叶子出现。每个路由器根据最短路径树得到前往每个目的地的最佳路由,并加入到路由表中。
OSPF 能提供负载均衡(Load Balancing)功能,即如果到一个目的站存在若干条代价相同的路由,则把流量均匀地分配给这些路由。
2.2 OSPF 基本路由选择算法
OSPF 允许将一个自治系统中的网络分成若干组,每组称为一个区域(Area)。一个区域的拓扑相对于自治系统的其他部分来说是隐藏的。
单个区域内协议的运转如下:
-
当路由器启动时,首先初始化路由协议数据结构,之后等待低级协议指示其接口已经工作。
-
然后路由器使用 OSPF 的 Hello 协议获得邻居。路由器发送 Hello 分组给它的邻居,接着收到邻居返回的 Hello 分组。
-
路由器将尝试与其新获得的邻居中的一些形成邻接关系(Adjacency)。一对邻接路由器之间的链路状态数据库是同步的。
-
路由器周期地通告它的状态,也称为链路状态。路由器也在其状态改变时通告链路状态。
-
LSA 在整个区域内洪泛发送。OSPF 使用可靠的洪泛算法,确保一个区域中的所有路由器有完全相同的链路状态数据库。
2.3 OSPF 分组和链路状态通告
OSPF 通过组播发送报文,其分组直接封装在 IP 数据报中发送,协议号为 89。
OSPF 共有 5 中分组类型:
-
Hello 分组。在每个运行的路由器接口上发送。用于发现和维护路由器的邻接关系。
-
数据库描述(Database Description)分组。包含 LSDB 摘要,即有关 LSDB 中链路状态通告(LSA)的摘要信息。
-
链路状态请求(Link State Request)。用于向另一路由器请求下载 LSDB 中特定的链路状态记录。
-
链路状态更新(Link State Update)。用于 LSDB 的更新。
-
链路状态确认(Link State Ack)。用于对洪泛的确认。
除了 Hello 分组,OSPF 路由选择分组都仅在邻接路由器上发送。
3. 外部网关协议 BGP
3.1 BGP 概述
BGP(Border Gateway Protocol)是设计用于 TCP/IP 互联网自治系统之间的路由选择协议。BGP-4 版本增加了对 CIDR 的支持。早期版本不能用于当今互联网。
并非每个自治系统(AS)都需要使用 BGP,一个 AS 如果只有一条到因特网或另一个 AS 的连接,则不需要使用 BGP,而应使用默认路由或静态路由。提供中转服务的 AS(如 ISP 互联网服务提供商),有多条连接到其他 AS 的 AS,一般需要对数据流进出 AS 的路由选择策略和路由选择方式进行控制,在这些 AS 中应使用 BGP。
经由 BGP 交换的路由选择信息仅支持基于目的的转发模式(Destination-Based Forwarding Paradigm),它假设路由器转发分组仅基于分组的 IP 首部中携带的目的地址。BGP 仅能够支持符合基于目的转发模式的策略。
3.2 BGP 特点
-
BGP 是一个自治系统之间的路由选择协议,并对自治系统之间的互连拓扑不作限制。
-
经由 BGP 交换的路由选择信息仅支持基于目的的转发模式。
-
BGP 使用 TCP 作为传输协议,在 TCP 端口 179 上监听。TCP 提供可靠的传输服务,因此 BGP 不需要执行显式的 BGP 报文分段、重传、确认和排序。
-
BGP 采用增量更新以节约网络带宽。BGP 不要求定期地刷新 BGP 表。
-
BGP 支持策略,不是简单地通告本地路由表中的路由,而是可以执行本地管理员选择的策略。例如,BGP 路由器经过配置,能够把自治系统内可达的目的地和允许通告给其他自治系统的目的地区分开。
-
BGP 需要周期地发送保活报文确保连接是活跃的。当连接出现错误时,发送通知报文并关闭 TCP 连接。
-
BGP 提供鉴别机制,允许接受方对报文进行鉴别,即确认发送方的身份。
3.3 BGP 报文
BGP 定义了五种基本报文类型:OPEN(打开)、UPDATE(更新)、NOTIFICATION(通知)、KEEPALIVE(保活)和 ROUTE-REFRESH(路由刷新)。
3.3.1 OPEN 报文
两个 BGP 对等端一旦建立了 TCP 连接,就分别发送一个 OPEN 报文。OPEN 报告中声明发送者自己的 AS(自治系统)号,并设置其他操作参数。如果 OPEN 报文被接受,对等端就会确认 OPEN 而发回 KEEPALIVE 报文。
3.3.2 UPDATE 报文
两个 BGP 对等端发送 OPEN 报文并得到确认后,使用 UPDATE 报文互相传送路由选择信息。UPDATE 报文用于告知一条可行路由或撤销多条不可用路由。
UPDATE 报文格式如下图所示:
路径属性描述了报文通告的可行路由。路径属性中必须包含且能被所有 BGP 实现支持的属性称为周知强制属性。以下介绍三种周知强制属性:
-
ORIGIN:指明该路由来源。值 0、1、2 分别对应学自内部网关协议、学自外部网关协议与通过其他方式学习到的路由
-
AS_PATH:保存该条路由经过的 AS 。 其可能形式有有序的AS_SEQUENCE 和无序的 AS_SET
-
NEXT_HOP:若选用该路由,下一跳的网络地址
3.3.3 KEEPALIVE 报文
BGP 不使用 TCP 保活机制确定对等端是否可达,BGP 对等端之间通过足够多次交换 KEEPALIVE 报文来避免保持计时器超时。
3.3.4 NOTIFICATION 报文
当检测到错误状况时,BGP 发送 NOTIFICATION 报文,然后立即关闭 BGP 连接。
3.3.5 ROUTE-REFRESH 报文
BGP 发言人之间可以动态地交换路由刷新请求,然后再重新通告各自的 Adj-RIB-Out(允许通告的路由信息)。