RIP路由协议与OSPF协议

提前知晓:

静态路由选择和动态路由选择

静态路由选择是指网络管理员手动配置路由器的路由表,指定数据包从一台设备到另一台设备的路径。静态路由选择的优点是简单、高效、安全,但缺点是不适应网络拓扑的变化,需要人工干预和维护。

动态路由选择是指路由器通过运行特定的路由协议,自动学习和更新路由表,根据网络状况选择最佳的路径。动态路由选择的优点是灵活、可扩展、可靠,但缺点是占用路由器的资源和网络带宽。

内部网关协议和外部网关协议

内部网关协议(IGP)是指在一个自治系统内部运行的路由协议,用于在同一个网络域中的路由器之间交换路由信息。常用的内部网关协议有RIP、EIGRP、OSPF和IS-IS等。

外部网关协议(EGP)是指在不同的自治系统之间进行路由选择的路由协议,用于在不同的网络域之间的路由器之间交换路由信息。常用的外部网关协议有BGP。

内部网关协议和外部网关协议的主要区别是:

  • 内部网关协议适用于单一管理的网络域,而外部网关协议适用于多个管理的网络域。
  • 内部网关协议通常使用距离矢量算法或链路状态算法来选择最佳路径,而外部网关协议通常使用路径矢量算法来选择最佳路径。
  • 内部网关协议的路由选择主要基于网络性能的度量,而外部网关协议的路由选择主要基于网络策略的度量。

距离向量路由选择

距离向量路由选择是一种动态路由选择协议,它基于Bellman-Ford算法,使用距离和方向作为路由的度量值。距离通常指从源端口到目的端口所经过的路由器个数,也称为跳数。方向指到达目的端口的下一跳路由器的地址。

距离向量路由选择的过程如下:

  • 每个路由器维护一个距离向量表,记录从自己到其他每个目的端口的最短距离和下一跳路由器。
  • 每个路由器定期向它的直接邻居发送自己的距离向量表,让邻居了解自己的路由信息。
  • 每个路由器收到邻居发送的距离向量表后,根据Bellman-Ford方程更新自己的距离向量表,选择到达每个目的端口的最优路径。
  • 这个过程不断重复,直到所有路由器的距离向量表收敛到稳定状态,即不再发生变化。

距离向量路由选择的优点是实现简单,维护容易,适合小型网络。缺点是收敛慢,不支持路由聚合和CIDR,不适合大型网络。距离向量路由选择可能出现计数到无穷的问题,即当网络出现故障时,路由器之间传递错误的信息,导致距离不断增加,直到达到最大值。

链路状态路由选择

链路状态路由选择是一种动态路由选择协议,它基于Dijkstra算法,使用带宽作为路由的度量值。链路状态路由选择的过程如下:

  • 每个路由器了解其自身的链路(即与其直连的网络),并向邻居发送Hello数据包,建立邻接关系。
  • 每个路由器创建一个链路状态数据包(LSP),其中包含与该路由器直连的每条链路的状态,如邻居ID、链路类型和带宽等。
  • 每个路由器将LSP泛洪到所有邻居,然后邻居将收到的所有LSP存储到数据库中,形成一个完整的拓扑图。
  • 每个路由器使用数据库和Dijkstra算法来计算通向每个网络的最佳路径,即最短路径优先(SPF)。

链路状态路由选择的优点是灵活、可扩展、可靠,适合大规模网络。缺点是占用路由器的资源和网络带宽,可能出现数据包泛滥和无限循环的问题。

因此,距离向量路由选择和链路状态路由选择有以下的区别:

  • 距离向量路由选择是基于Bellman-Ford算法的,它使用距离和方向作为路由的度量值,通常指从源端口到目的端口所经过的路由器个数,也称为跳数。链路状态路由选择是基于Dijkstra算法的,它使用带宽作为路由的度量值,支持路由聚合和CIDR,可以划分区域来减少路由信息的交换。
  • 距离向量路由选择是每个路由器向它的直接邻居发送自己的距离向量表,让邻居了解自己的路由信息,然后根据邻居的信息更新自己的距离向量表,选择到达每个目的端口的最优路径。链路状态路由选择是每个路由器向网络中的所有其他路由器发送它所知道的到达所有节点的最短路径的表信息,然后根据收到的信息为自己找到最短路径。
  • 距离向量路由选择的优点是实现简单,维护容易,适合小型网络,缺点是收敛慢,不支持路由聚合和CIDR,不适合大型网络,可能出现计数到无穷的问题,即当网络出现故障时,路由器之间传递错误的信息,导致距离不断增加,直到达到最大值。链路状态路由选择的优点是灵活,可扩展,可靠,适合大规模网络,缺点是占用路由器的资源和网络带宽,可能出现由于数据包泛滥而导致的大量流量,以及洪水可能导致无限循环的问题。

常见路由协议对比

RIP、OSPF、IS-IS、BGP是四种常见的动态路由协议,它们根据作用范围和算法的不同,有以下的特点和适用场景:

  • RIP(路由信息协议)是一种基于距离矢量算法的内部网关协议,它使用跳数作为路由的度量值,最大跳数为15,超过则认为不可达。RIP的优点是实现简单,维护容易,缺点是收敛慢,不支持路由聚合和CIDR,不适合大型网络。RIP有两个版本,RIP V1是有类别的,只支持广播方式,RIP V2是无类别的,支持组播方式和验证机制。
  • OSPF(开放最短路径优先)是一种基于链路状态算法的内部网关协议,它使用带宽作为路由的度量值,支持路由聚合和CIDR,可以划分区域来减少路由信息的交换,支持快速收敛和验证机制,适合大规模网络。OSPF有两个版本,OSPF V2用于IPv4网络,OSPF V3用于IPv6网络。
  • IS-IS(中间系统到中间系统)是一种基于链路状态算法的内部网关协议,它最初是为OSI网络设计的,后来扩展到支持IP网络,称为集成IS-IS或双IS-IS。IS-IS和OSPF有很多相似之处,如都支持区域划分、路由聚合、快速收敛等,但也有一些不同之处,如IS-IS使用CLNS地址来标识路由器,而OSPF使用IP地址,IS-IS没有区域0的概念,而OSPF必须有一个区域0作为骨干区域。
  • BGP(边界网关协议)是一种基于路径矢量算法的外部网关协议,它用于在不同的自治系统之间交换路由信息,是互联网的主要路由协议。BGP的优点是可以支持复杂的路由策略,缺点是收敛慢,配置复杂,需要大量的内存和CPU资源。BGP有两种类型,内部BGP用于同一自治系统内的路由器之间,外部BGP用于不同自治系统之间。

RIP协议报文分析

RIP 协议(RFC 1058)是一个基于距离向量路由选择的内部网关协议:每台路由器定期与邻居路由器交换各自路由表中的所有路由信息,使用 Bellman-Ford 算法计算路由表。RIP 协议的路由度量(Metric)是到目的网络的跳数(hop count),最大跳数值为 15。
运行 RIP 协议的路由器初始接入到网络上时,它的路由表中只有根据其接口上的 IP配置信息获得的直连网络的直连路由。随着 RIP 路由信息的不断交换,互联网中的每台RIP 路由器最终会掌握整个互联网的知识,即 RIP 协议收敛。
RIP 协议有 2 种类型的报文:RIP 请求报文和 RIP 响应报文,它们都封装在 UDP 数据报中广播发送。

  • RIP 请求报文可以询问特定路由项目或所有路由项目。当运行 RIP 协议的路由器刚接入网络中时,会广播发送一份询问所有路由项目的 RIP 请求报文。
  • RIP 响应报文可以是询问或非询问的。询问的 RIP 响应报文仅在回应 RIP 请求报文时单播发送给请求者,发送的内容是请求报文中所请求的特定路由项目或整个路由表的路由项目。非询问的 RIP 响应报文则是定期的广播发送,发送的内容是整个路由表中的路由项目。RIP 响应报文中携带的 RIP 路由通告信息只有目的网络地址和跳数值。

格式:
Ethernet II:
目的MAC地址:6个字节
源MAC地址:6个字节
协议类型:2个字节

Internet Protocol Version 4:
IP数据报固定首部:20个字节

User Datagram Protocol:
源端口:2个字节
目的端口:2个字节
长度:2个字节
校验和:2个字节

Routing Information Protocol:
命令:1字节
版本:1字节
保留:2字节

地址族标识符:2字节
保留:2字节
IP地址:4字节
保留:4字节
保留:4字节
度量值:4字节

保留字段:报文格式里面的保留字节是指在报文的某些字段中预留出来的一些字节,它们的作用是为了给报文的未来的发展或扩展留出空间,以便增加一些新的功能或选项。报文格式里面的保留字节通常必须全部置为0,以避免产生歧义或错误。

Ethernet II:目的MAC地址、源MAC地址、协议类型:

Alt text

Internet Protocol Version 4:IP数据报固定首部:
具体分析见ICMP协议报文分析
Alt text

User Datagram Protocol:源端口、目的端口、长度、校验和:
Alt text

Routing Information Protocol:命令、版本、保留:

Command(命令)标识值为1时,该报文为Request报文,用于向直连路由器请求全部或部分路由信息。
Command(命令)标识值为2时,该报文为Response报文,用于发送路由更新,该报文可以作为对Request报文的回应,也可以是路由器自主发送的,比如周期性发送路由更新或者触发性发送路由更新。

其中,IP地址字段表示路由的目的网络地址,度量值字段表示路由的距离,通常用跳数来衡量。
因此,RIP协议报文里面的IP Address: 172.16.2.0, Metric: 1表示该报文中包含了一条路由信息,目的网络地址为172.16.2.0,距离为1跳。Routing Information Protocol中有时候不止一条路由信息,大多数时候具有多条,一条路由信息一般20字节。

如果度量值大于或等于16,就表示路由不可达,也就是说无法从本网络到达目的网络。
因此,如果度量值为16,表示该路由是无效的,路由器会从路由表中删除该路由,并启动垃圾收集定时器,以防止该路由被其他路由器误认为是有效的。

Alt text

OSPF协议报文分析

OSPF 协议(RFC 2328)是一个基于链路状态路由选择的内部网关协议:路由器仅在网络拓扑变化时使用洪泛法(flooding)将自己的链路状态更新信息扩散到整个自治系统中。
为了增强 OSPF 协议的可伸缩能力(Scalability),OSPF 协议引入了区域的概念来有效并及时的处理路由选择。OSPF 区域是包含在 AS 中的一些网络、主机和路由器的集合,自治系统中所有 OSPF 区域必须连接到一个主干区域(Area 0)上。区域内的 OSPF 路由器(内部路由器,IR)使用洪泛法(flooding)传送本区域内的链路状态信息,区域边界的 OSPF 路由器(区域边界路由器,ABR)将本区域的信息汇总发给其他区域,自治系统边界的 OSPF 路由器(自治系统边界路由器,ASBR)将自治系统外的路由(外部路由)发布在自治系统中。主干区域中的 OSPF 路由器也称为“主干路由器”(BR)。ABR 不能向 OSPF 残桩区域(Stub Area)通告外部路由。在多址网络中,为了避免不必要的链路状态洪泛,需要选举 1 个指定路由器(DR)和 1 个备份指定路由器(BDR)。
OSPF 协议有 5 种类型的报文,它们被直接封装在 IP 分组中多播发送。ospf协议报文封装在IP报文内,可以采用单播或组播的形式发送。

  • 问候(Hello)报文:用来建立并维护 OSPF 邻接关系。在建立了邻接关系后,OSPF 路由器会定期发送 Hello 报文,来测试邻站的可达性。
  • 数据库描述(DBD)报文:描述 OSPF 路由器的链路状态数据库的概要信息,即数据库中每一行的标题,它在两台相邻路由器彼此建立邻接关系时发送的。
  • 链路状态请求(LSR)报文:由需要若干条特定路由信息的路由器发送出的,它的回答是 LSU 报文。新接入的路由器在收到 DBD 报文后,可以使用 LSR
    报文请求关于某些路由的更多信息。
  • 链路状态更新(LSU)报文:OSPF 的核心。OSPF 路由器使用 LSU 报文通告链路状态更新信息(即链路状态通告,LSA),每一个 LSU 报文可包含几个 LSA。OSPF 协议的 LSA 有 5 种常用类型:路由器链路 LSA、网络链路 LSA、汇总链路到网络 LSA、汇总链路到 ASBR LSA 和外部链路 LSA。这 5 种类型的 LSA由不同类型的 OSPF 路由器产生,在特定类型的区域范围内扩散。
  • 链路状态确认(LSAck)报文:用来确认每一个收到的 LSU 报文,使得 OSPF协议的路由选择更加可靠。

格式:

Cisco HDLC:
Address: 1字节
Control: 1字节
Protocol:2字节

Internet Protocol Version 4:
IP数据报固定首部:20个字节

Open Shortest Path First——OSPF Header:
版本号:1字节
报文类型:1字节
报文长度:2字节
路由器ID:4字节
区域ID:4字节
校验和:2字节
保留:2字节
数据:可变长度

Open Shortest Path First——OSPF Hello Packet:
网络掩码:4字节
Hello间隔:2字节
选项:1字节
路由器优先级:1字节
路由器死亡间隔:4字节
指定路由器:4字节
备份指定路由器:4字节
邻居:可变(4的倍数)

Open Shortest Path First——LS Update Packet
LSA个数:4字节
LSA:
LS Age(寿命):2字节
Options:可选项,1字节
LS Type:LSA的类型,1字节
Link State ID:与LS Type一起描述路由域中唯一一个LSA,4字节
Advertising Router:产生此LSA路由器的Router ID,4字节
Sequence Number:LSA的序列号,4字节
Checksum:校验和,2字节
Length:LSA的总长度,2字节
Netmask:目的网段的子网掩码,4字节
External Type:外部路由的类型,1字节
TOS:服务类型,1字节
Metric:到达目的网段的度量值,3字节
Forwarding Address:转发地址,4字节
External Route Tag:外部路由标签,4字节

Cisco HDLC:

Cisco HDLC是思科公司对高级数据链路控制(HDLC)协议的一种扩展,它是一种点对点的链路层协议,用于在串行接口上封装不同类型的网络层协议,如IP、IPX等。

ospf协议报文的Cisco HDLC
Address: Unicast (0x0f)
Control: 0x00
Protocol: IP (0x0800)
表示的是ospf协议报文使用Cisco HDLC协议进行封装,然后在点对点的串行链路上进行传输的过程。其中,Address字段表示目的地址,值为0x0f,表示单播地址;Control字段表示帧的类型,值为0x00,表示无编号信息帧;Protocol字段表示网络层协议,值为0x0800,表示IP协议;数据字段表示网络层数据,即ospf报文。

Alt text

Internet Protocol Version 4:IP数据报固定首部:
具体分析见ICMP协议报文分析

Alt text

Open Shortest Path First——OSPF Header:
版本号字段表示ospf协议的版本,目前有两个版本,OSPFv2用于IPv4网络,OSPFv3用于IPv6网络。

报文类型字段表示ospf协议报文的类型,有以下五种可能的值:
值为1时,该报文为Hello报文,用于发现和维护邻居关系,以及选举DR和BDR。
值为2时,该报文为DD报文,用于描述数据库的内容,以及同步链路状态数据库。
值为3时,该报文为LSR报文,用于请求链路状态信息。
值为4时,该报文为LSU报文,用于更新链路状态信息。
值为5时,该报文为LSAck报文,用于确认接收到链路状态信息。

路由器ID字段表示发送ospf协议报文的路由器的标识,通常为路由器上最高IP地址的接口地址,或者由管理员手动配置的地址。

区域ID字段表示发送ospf协议报文的路由器所属的区域的标识,通常为点分十进制表示的32位数。

校验和字段表示ospf协议报文的校验和,用于检测报文在传输过程中是否出错,只对报文头部进行计算,不包括数据部分。

保留字段表示保留的字节,目前没有特定的用途,必须置为0。

数据字段表示ospf协议报文的数据部分,根据报文类型的不同,有不同的格式和内容。

Alt text

Open Shortest Path First——OSPF Hello Packet:
网络掩码字段表示发送OSPF协议报文的路由器接口的网络掩码,用于识别同一网络的邻居。

Hello间隔字段表示发送OSPF协议报文的路由器的Hello间隔,即两个连续的Hello报文之间的时间间隔,单位为秒。

选项字段表示发送OSPF协议报文的路由器的选项,用于指示路由器的一些特性,如是否支持外部路由、NSSA、多播等。

路由器优先级字段表示发送OSPF协议报文的路由器的优先级,用于在多路访问网络中选举DR和BDR,优先级越高,越有可能成为DR或BDR,优先级为0的路由器不能成为DR或BDR。

路由器死亡间隔字段表示发送OSPF协议报文的路由器的路由器死亡间隔,即在没有收到邻居的Hello报文后,认为邻居失效的时间间隔,单位为秒。

指定路由器字段表示发送OSPF协议报文的路由器所在网络的DR的路由器ID,如果没有DR,则为0。

备份指定路由器字段表示发送OSPF协议报文的路由器所在网络的BDR的路由器ID,如果没有BDR则为0

邻居字段表示发送OSPF协议报文的路由器已经建立邻居关系的路由器的路由器ID,每个路由器ID占4字节,可以有多个邻居。

Alt text

Open Shortest Path First——LS Update Packet:

LS Age:标识LSA产生后所经过的时间,单位是秒。这里报文中的值是3,表示这个LSA刚刚产生。
Options:标识可选项,占用1字节。比如这里报文中的值是0x20,表示这个LSA支持按需链路上的OSPF的能力。
LS Type:标识LSA的类型,占用1字节。比如这里报文中的值是5,表示这个LSA是AS-External-LSA (ASBR)。
Link State ID:标识与LS Type一起描述路由域中唯一一个LSA,占用4字节。比如这里报文中的值是20.0.0.0,表示这个LSA描述的是到达20.0.0.0/16网段的外部路由。
Advertising Router:标识产生此LSA路由器的Router ID,占用4字节。比如这里报文中的值是4.4.4.4,表示这个LSA是由Router ID为4.4.4.4的路由器产生的。
Sequence Number:标识LSA的序列号,根据该序列号其他路由器可以判断哪个LSA是最新的,占用4字节。比如这里报文中的值是0x80000001,表示这个LSA是第一次产生的。
Checksum:标识出了LS age外其他各域的校验和,占用2字节。比如这里报文中的值是0x6a12,表示这个LSA的校验和是0x6a12。
Length:标识LSA的总长度,包括LSA header,单位是字节,占用2字节。比如这里报文中的值是36,表示这个LSA的总长度是36字节。
Netmask:标识目的网段的子网掩码,占用4字节。比如这里报文中的值是255.255.0.0,表示这个LSA描述的是到达20.0.0.0/16网段的外部路由。
External Type:标识外部路由的类型,占用1字节。比如这里报文中的值是1,表示这个LSA是Type 2的外部路由,也就是说,这个路由的度量值是比任何其他链路状态路径都大的。
TOS:标识服务类型,占用1字节。比如这里报文中的值是0,表示这个LSA没有指定服务类型。
Metric:标识到达目的网段的度量值,占用3字节。比如这里报文中的值是20,表示这个LSA描述的是到达20.0.0.0/16网段的外部路由的度量值是20。
Forwarding Address:标识转发地址,占用4字节。比如这里报文中的值是0.0.0.0,表示这个LSA没有指定转发地址,也就是说,到达目的网段的下一跳地址就是产生这个LSA的路由器的地址。
External Route Tag:标识外部路由标签,占用4字节。比如这里报文中的值是0,表示这个LSA没有指定外部路由标签,也就是说,这个LSA没有携带任何额外的信息。

Alt text