选路信息协议 = Routing Information Protocol = RIP
开放式最短路径优先 = Open Shortest Path First = OSPF
边界网关协议 = Border Gateway Protocol = BGP
无分类域间选路 = Classless Inter-Domain Routing = CIDR
动态选路是指相邻路由器之间进行通信,以告知对方每个路由器当前所连接的网络。路由器上的路由守护程序(routing daemon)运行选路协议,根据从相邻路由器接收到的信息,动态地增加或删除路由表中的信息。Unix系统中常见的路由守护程序包括routed和gated。
Internet是以一组自治系统(Autonomous System)的方式组织的,每个自治系统通常由单个实体管理。每个自治系统可以选择该自治系统中各个路由器之间的选路协议。我们将其称之为内部网关协议(Interior gateway protocol, IGP)或域内选路协议(Intradomain routing protocol),其中包括选路信息协议RIP和开放最短路径优先OSPF协议。
外部网关协议(Exterior gateway protocol, EGP)或域内选路协议的分隔选路协议用于不同自治系统之间的路由器。边界网关协议BGP意在取代EGP。
RIP是最广为使用的选路协议。RIP报文包含在UDP数据报中。使用IP地址时的RIP版本1报文格式如下:
RIP报文 = 1字节命令(1-6)+ 1字节版本(=1)+ 2字节(置0)
+ 2字节地址系列(=2)+ 2字节(置0)+ 32位IP地址 + 8字节(置0)+ 4字节度量(1-16)
+ 最多24个另外的路由(与前20字节格式相同)
其中:
命令字段为1表示请求,2表示应答,3和4已舍弃不用,两个非正式命令5和6分别表示轮询和轮询表项。请求表示要求其他系统发送其全部或部分路由表,应答则包含发送者全部或部分路由表。
版本字段通常为1。第二版RIP设置为2。
紧跟在后面的20字节指定地址系列(address family)、IP地址以及相应的度量。对于IP地址而言,地址系列字段的值为2。RIP的度量是以跳计数的。
采用这种20字节格式的RIP报文可以通告多达25条路由。上限25是用来保证RIP报文的总长度为 20 × 25 + 4 = 504 20×25 + 4 = 504 20×25+4=504,小于512字节。为了发送整个路由表,通常需要多个报文。
RIP常用的UDP端口号是520。采用RIP协议的routed程序正常运行的逻辑如下:
如果运行RIP的系统发现一条路由在3分钟内未更新,就将该路由的度量设置成无穷大(即16),并标注为删除。再过60秒,将从本地路由表中删除该路由,以保证该路由的失效已被传播开。
度量
RIP所使用的度量是以跳(hop)计算的。所有直接连接接口的跳数为1。如果在某个自治系统内从一个路由器到一个网络有多条路由,那么路由器将选择跳数最小的路由,而忽略其他路由。
跳数的最大值是15,这意味着RIP只能用在主机间最大跳数值为15的自治系统内。度量为16表示到无路由到达该IP地址。
RIP协议的缺陷
一个例子
使用 ripquery -n netb 命令获取下一站路由器netb的选路信息。metric 1 表示度量为1。
运行ripquery程序的tcpdump输出结果。使用 -i s10 指定SLIP接口。rip-poll 表示一个非正式请求(轮询命令,命令字段为5)。rip-req 表示一个常规RIP请求。
RIP-2利用版本1中的置0字段传递一些额外信息,其报文格式如下:
RIP报文 = 1字节命令(1-6)+ 1字节版本(=2)+ 2字节路由域 + 2字节地址系列(=2)+ 2字节路由标记 + 32位IP地址 + 32位子网掩码 + 32位下一站IP地址 + 4字节度量(1-16)+ 最多24个另外的路由(与前20字节格式相同)
路由域(routing domain)是一个路由守护程序的标识符,指出了数据报的所有者。在一个Unix实现中,它可以是选路守护程序的进程号。该域允许管理者在单个路由器上运行多个RIP实例,每个实例在一个路由域内运行。选路标记(routing tag)是为了支持外部网关协议而存在的。它携带着一个EGP和BGP的自治系统号。
每个表项的子网掩码应用于相应的IP地址上。下一站IP地址指明发往目的IP地址的报文该发往哪里。该字段为0意味着发往目的地址的报文应该发给发送RIP报文的系统。
RIP-2除支持广播外,还支持多播。
与采用距离向量(跳数)的RIP协议不同的是, OSPF是一个链路状态协议。
在一个链路状态协议中,路由器并不与其邻站交换距离信息。它采用的是每个路由器主动地测试与其邻站相连链路的状态,将这些信息发送给它的其他邻站,而邻站将这些信息在自治系统中传播出去。每个路由器接收这些链路状态信息,并建立起完整的路由表。从实际角度来看,二者的不同点是链路状态协议总是比距离向量协议收敛更快(路由发生变化后稳定下来)。
OSPF直接使用IP,并不使用UDP或TCP。对于IP首部的protocol协议字段,OSPF有其自己的值。OSPF相对于RIP协议的主要优点包括:
BGP是一种不同自治系统的路由器之间进行通信的外部网关协议。RFC 1267和RFC 1268对BGP进行了描述。
BGP系统与其他BGP系统之间交换网络可到达信息。这些信息包括数据到达这些网络所必须经过的自治系统AS中的所有路径。这些信息足以构造一幅自治系统连接图。然后,可以根据连接图删除选路环,制订选路策略。
我们将一个自治系统中的IP数据报分成本地流量和通过流量。在自治系统中,本地流量是起始或终止于该自治系统的流量。其信源IP地址或信宿IP地址所指定的主机位于该自治系统中。其他的流量则称为通过流量。在Internet中使用BGP的一个目的就是减少通过流量。
可以将自治系统分为以下几种类型:
因此,可以将Internet的总拓扑结构看成是由一些残桩自治系统、多接口自治系统以及转送自治系统的任意互连。残桩自治系统和多接口自治系统不需要使用BGP——它们通过运行EGP在自治系统之间交换可到达信息。
BGP允许使用基于策略的选路。BGP与RIP和OSPF的不同之处在于BGP使用TCP作为其传输层协议。BGP是一个距离向量协议,但是与(通告到目的地址跳数的) RIP不同的是,BGP列举了到每个目的地址的路由(自治系统到达目的地址的序列号)。BGP通过定期发送keepalive报文给其邻站来检测TCP连接对端的链路或主机失败。两个报文之间的时间间隔建议值为30秒。
由于B类地址的缺乏,因此现在的多个网络站点只能采用多个C类网络号,而不采用单个B类网络号。尽管分配这些C类地址解决了一个问题( B类地址的缺乏),但它却带来了另一个问题:每个C类网络都需要一个路由表表项。无类型域间选路( CIDR)是一个防止Internet路由表膨胀的方法,它也称为超网(supernetting)。
CIDR的基本观点是采用一种分配多个IP地址的方式,使其能够将路由表中的许多表项总和(summarization)成更少的数目。例如,如果给单个站点分配16个C类地址,以一种可以用总和的方式来分配这16个地址,这样,所有这16个地址可以参照Internet上的单个路由表表项。
要使用这种总和,必须满足以下三种特性:
CIDR同时还使用一种技术,使最佳匹配总是最长的匹配:即在32 bit掩码中,它具有最大值。“无类型”的意思是现在的选路决策是基于整个32 bit IP地址的掩码操作,而不管其IP地址是A类、B类或是C类。