10.4 RIP:选路信息协议 本节对R I P进行了描述,这是因为它是最广为使用(也是最受攻击)的选路协议。对于R I P 的正式描述文件是RFC 1058 [Hedrick 1988a],但是该R F C是在该协议实现数年后才出现的。 10.4.1 报文格式 RIP报文包含中在UDP数据报中,如图10-2所示(在第11章中对UDP进行更为详细的描述)。 图1 0 - 3给出了使用I P地址时的R I P报文 格式。 命令字段为1表示请求,2表示应答。还 有两个舍弃不用的命令( 3和4),两个非正 式的命令:轮询( 5)和轮询表项( 6)。请 求表示要求其他系统发送其全部或部分路由
图10-2 封装在UDP数据报中的RIP报文 表。应答则包含发送者全部或部分路由表。 版本字段通常为1,而第2版R I P(1 0 . 5节)将此字段设置为2。 紧跟在后面的2 0字节指定地址系列( address family)(对于I P地址来说,其值是2)、I P地 址以及相应的度量。在本节的后面可以看出, R I P的度量是以跳计数的。 采用这种2 0字节格式的R I P报文可以通告多达2 5条路由。上限2 5是用来保证R I P报文的总 长度为2 0×25 + 4 = 504,小于5 1 2字节。由于每个报文最多携带2 5个路由,因此为了发送整 个路由表,经常需要多个报文。 10.4.2 正常运行 让我们来看一下采用R I P协议的r o u t e d程序正常运行的结果。R I P常用的U D P端口号是5 2 0。 • 初始化:在启动一个路由守护程序时,它先判断启动了哪些接口,并在每个接口上发送 一个请求报文,要求其他路由器发送完整路由表。在点对点链路中,该请求是发送给其 他终点的。如果网络支持广播的话,这种请求是以广播形式发送的。目的U D P端口号是 5 2 0(这是其他路由器的路由守护程序端口号)。 这种请求报文的命令字段为1,但地址系列字段设置为0,而度量字段设置为1 6。这是一 种要求另一端完整路由表的特殊请求报文。 • 接收到请求。如果这个请求是刚才提到的特殊请求,那么路由器就将完整的路由表发送 给请求者。否则,就处理请求中的每一个表项:如果有连接到指明地址的路由,则将度 量设置成我们的值,否则将度量置为1 6(度量为1 6是一种称为“无穷大”的特殊值,它 意味着没有到达目的的路由)。然后发回响应。 • 接收到响应。使响应生效,可能会更新路由表。可能会增加新表项,对已有的表项进行 修改,或是将已有表项删除。 • 定期选路更新。每过3 0秒,所有或部分路由器会将其完整路由表发送给相邻路由器。发 送路由表可以是广播形式的(如在以太网上),或是发送给点对点链路的其他终点的。 • 触发更新。每当一条路由的度量发生变化时,就对它进行更新。不需要发送完整路由表, 而只需要发送那些发生变化的表项。 每条路由都有与之相关的定时器。如果运行R I P的系统发现一条路由在3分钟内未更新, 就将该路由的度量设置成无穷大( 1 6),并标注为删除。这意味着已经在6个3 0秒更新时间里 没收到通告该路由的路由器的更新了。再过6 0秒,将从本地路由表中删除该路由,以保证该 路由的失效已被传播开。 10.5 RIP版本2 10.5 RIP版本2 RFC 1388 [Malkin 1993a]中对R I P定义进行了扩充,通常称其结果为R I P - 2。这些扩充并 不改变协议本身,而是利用图1 0 - 3中的一些标注为“必须为0”的字段来传递一些额外的信息。 如果R I P忽略这些必须为0的字段,那么,R I P和R I P - 2可以互操作。 图1 0 - 1 0重新给出了由R I P - 2定义的图。对于R I P - 2来说,其版本字段为2。
选路域(routing domain)是一个选路守护程序的标识符,它指出了这个数据报的所有者。 在一个U n i x实现中,它可以是选路守护程序的进程号。该域允许管理者在单个路由器上运行 多个R I P实例,每个实例在一个选路域内运行。 选路标记(routing tag)是为了支持外部网关协议而存在的。它携带着一个E G P和B G P的自 治系统号。 每个表项的子网掩码应用于相应的I P地址上。下一站I P地址指明发往目的I P地址的报文该 发往哪里。该字段为0意味着发往目的地址的报文应该发给发送R I P报文的系统。 R I P - 2提供了一种简单的鉴别机制。可以指定R I P报文的前2 0字节表项地址系列为0 x ffff, 路由标记为2。表项中的其余1 6字节包含一个明文口令。 最后, R I P - 2除了广播(第1 2章)外,还支持多播。这可以减少不收听R I P - 2报文的主机 的负载。
DR/BDR DR/BDR 1. DR/BDR简介 在广播网和NBMA网络中,任意两台路由器之间都要交换路由信息。如果网络中有n台路由器,则需要建立n(n-1)/2个邻接关系。这使得任何一台路由器的路由变化都会导致多次传递,浪费了带宽资源。为解决这一问题,OSPF协议定义了指定路由器DR(Designated Router),所有路由器都只将信息发送给DR,由DR将网络链路状态发送出去。
如果DR由于某种故障而失效,则网络中的路由器必须重新选举DR,再与新的DR同步。这需要较长的时间,在这段时间内,路由的计算是不正确的。为了能够缩短这个过程,OSPF提出了BDR(Backup Designated Router,备份指定路由器)的概念。 BDR实际上是对DR的一个备份,在选举DR的同时也选举出BDR,BDR也和本网段内的所有路由器建立邻接关系并交换路由信息。当DR失效后,BDR会立即成为DR。由于不需要重新选举,并且邻接关系事先已建立,所以这个过程是非常短暂的。当然这时还需要再重新选举出一个新的BDR,虽然一样需要较长的时间,但并不会影响路由的计算。 DR和BDR之外的路由器(称为DR Other)之间将不再建立邻接关系,也不再交换任何
路由信息。这样就减少了广播网和NBMA网络上各路由器之间邻接关系的数量。 如图7所示,用实线代表以太网物理连接,虚线代表建立的邻接关系。可以看到,采用DR/BDR机制后,5台路由器之间只需要建立7个邻接关系就可以了。
图7 DR和BDR示意图 2. DR/BDR选举过程 DR和BDR是由同一网段中所有的路由器根据路由器优先级、Router ID通过HELLO报文选举出来的,只有优先级大于0的路由器才具有选取资格。 进行DR/BDR选举时每台路由器将自己选出的DR写入Hello报文中,发给网段上的每台运行OSPF协议的路由器。当处于同一网段的两台路由器同时宣布自己是DR时,路由器优先级高者胜出。如果优先级相等,则Router ID大者胜出。如果一台路由器的优先级为0,则它不会被选举为DR或BDR。 需要注意的是: 只有在广播或NBMA类型接口才会选举DR,在点到点或点到多点类型的接口上不需要选举DR。 DR是某个网段中的概念,是针对路由器的接口而言的。某台路由器在一个接口上可能是DR,在另一个接口上有可能是BDR,或者是DR Other。 路由器的优先级可以影响一个选取过程,但是当DR/BDR已经选取完毕,就算一台具有更高优先级的路由器变为有效,也不会替换该网段中已经选取的DR/BDR成为新的DR/BDR。 DR并不一定就是路由器优先级最高的路由器接口;同理,BDR也并不一定就是路由器优先级次高的路由器接口。
OSPF的报文格式
2008-09-12 19:07:13 标签:OSPF [推送到技术圈] OSPF的报文格式 OSPF报文直接封装为IP报文协议报文,协议号为89。一个比较完整的OSPF报文(以LSU报文为例)结构如图8所示。
图8 OSPF报文结构
1. OSPF报文头 OSPF有五种报文类型,它们有相同的报文头。如图9所示。
图9 OSPF报文头格式 主要字段的解释如下: Version:OSPF的版本号。对于OSPFv2来说,其值为2。
Type:OSPF报文的类型。数值从1到5,分别对应Hello报文、DD报文、LSR报文、LSU报文和LSAck报文。
Packet length:OSPF报文的总长度,包括报文头在内,单位为字节。 Router ID:始发该LSA的路由器的ID。
Area ID:始发LSA的路由器所在的区域ID。
Checksum:对整个报文的校验和。
AuType:验证类型。可分为不验证、简单(明文)口令验证和MD5验证,其值分别为0、1、2。 Authentication:其数值根据验证类型而定。当验证类型为0时未作定义,为1时此字段为密码信息,类型为2时此字段包括Key ID、MD5验证数据长度和序列号的信息。 说明: MD5验证数据添加在OSPF报文后面,不包含在Authenticaiton字段中。
2. Hello报文(Hello Packet) 最常用的一种报文,周期性的发送给邻居路由器用来维持邻居关系以及DR/BDR的选举,内容包括一些定时器的数值、DR、BDR以及自己已知的邻居。Hello报文格式如图10所示。