【深入理解计算机网络09】路由算法与路由协议
目录
路由算法
距离 - 向量路由算法
链路状态路由算法
路由协议
分层的路由协议
RIP 路由信息协议(Routing Information Protocol)
OSPF 开放最短路径优先协议(Open Shortest Path First)
基本工作原理
OSPF的分组类型
路由算法
根据能否随网络的通信量或拓扑自适应地进行调整变化来划分,路由算法可以分为两大类:
- 静态路由算法。指由网络管理员手工配置每一条路由。
- 动态路由算法。路由器根据网络流量负载和拓扑结构的变化来动态调整自身的路由表。
距离 - 向量路由算法
网络中的每个节点都从其直接相连的邻居接受路由信息,进行计算后,再将计算结果分发给邻居,无需依赖中心节点。无需关心完整网络节点关系拓扑结构。
一片区域有多个目的网络,因此一个节点可以用向量来表示到每个目的网络的距离。假设有三个目的网络,那么节点v1的最短距离就为<d(net1), d(net2), d(net3)>。
链路状态路由算法
与距离 - 向量算法 “仅依赖邻居信息” 不同,该算法要求每个节点掌握全网拓扑信息,通过全局计算生成最短路径。
链路状态路由算法就是 迪杰斯特拉Dijkstra算法 在路由中的应用。
路由协议
RIP路由协议:基于距离向量路由算法。网络数量越大,距离向量越大。
OSPF路由协议:基于链路状态路由算法。要求每一台路由器都要建立整个网络的拓扑图。
分层的路由协议
但全世界的路由器、网络数量庞大,不能让每一台路由器都知道全世界的网络情况。因此需要分层的路由协议。
- 将全世界的网络划分为多个相互独立的自治系统AS(Autonomous System)。每一个自治系统拥有全球唯一的 AS编号(Autunomous System Number, ASN)
- AS 的管理单位有权决定在本自治系统内,使用何种内部路由协议(如:RIP、OSPF)。
- 每个 AS 至少要有一台自治系统边界路由器(如 R6)与其他自治系统相连。各边界路由器之间,使用统一的外部路由协议(如:BGP-4)。
- 自治系统之间的路由选择也称域间路由选择,自治系统内部的路由选择也称域内路由选择。
互联网把路由协议分为两大类:
- 内部网关协议(Interior Gateway Protocol,IGP):用于AS内部的路由选择,如RIP、OSPF
- 外部网关协议(External Gateway Protocol,EGP):用于AS之间的路由选择,如BGP
RIP 路由信息协议(Routing Information Protocol)
RIP 属于应用层,使用 UDP 传送数据
定义了两种报文:
- Request报文:请求邻居路由器发送其路由表,用于启动和查询
- Response报文:响应请求或定期发送给邻居 路由表,携带完整或部分路由表(由于每个 Response 报文最多携带 25 个路由表项信息,因此如果路由表太大,就需要拆分为多个 Response 报文,每个报文携带部分路由表)
如何定义路径长度?
- RIP 使用跳数(Hop Count)(或称距离)来衡量到达目的网络的距离。路由器到直连网络的距离为 1;而每经过一个路由器,距离就加 1。
- RIP 认为好的路由就是跳数最少的。
- RIP 允许一条合法路径距离不能超过 15。距离等于 16 时表示网络不可达。可见 RIP 只适用于小型自治系统。
如何定义路由表格式?
- 每个路由器都要维护自己的路由表,路由表项有三个关键字段:<目的网络 N,距离 d,下一跳路由器地址 X>。
- 每个路由器都要维护从它自身到其他每个目的网络的距离记录,即距离向量(事实上,距离向量信息包含在路由表中,RIP 协议使用 “距离向量路由算法” 计算最短路径)
运行 RIP 的路由器之间如何交换必要信息?
- 仅和直接相邻的路由器交换信息。其实就是距离向量
- 交换的信息是本路由器所知道的全部信息,即自己的路由表。
- 通常按固定的时间间隔(通常为 30 秒)交换路由信息。为了加快 RIP 收敛速度,也可以引入触发更新(Triggered Update)机制:当路由器发现网络拓扑发生变化时,立即向相邻路由器通告拓扑变化后的路由信息,而不必等待 30 秒。
OSPF 开放最短路径优先协议(Open Shortest Path First)
- OSPF 属于网络层
- OSPF 使用 IP 协议提供的服务,IP 首部的协议字段 = 89
- OSPF 的 PDU 常译为 “OSPF 分组” 或 “OSPF 数据报”
OSPF 协议定义了 5 种 OSPF 分组类型:
原理:
基于链路状态路由算法计算最佳转发路径,因此首先得让每一台路由器都建立整个网络的拓扑图。
每台路由器如何建立拓扑图?
每个节点可以直接探测到自己与哪些节点直连,并形成一个链表。依次扫描所有节点,将所有的链表拼接起来就是整个网络的拓扑图。
路由器怎么把自己探测到的信息给其他路由器?
- 要传播的信息是与自己直连的所有链路状态(LS, Link - State)
- 洪泛法(flooding)来传播信息
- 路由器探测到与自己直连的链路或节点发生变化时,就立即洪泛最新的链路状态信息
特点:
- 允许对每条路有设置不同的代价
- 若到同一目的网络有多条代价相同的路径,则可以将通信量分配给这几条路径,实现负载均衡
- 具有鉴别功能,保证仅在可信赖的路由器之间交换链路状态信息
- 支持可变子网划分和无分类编制 CIDR
基本工作原理
- 虽然使用 Dijkstra 算法能计算出完整的最优路径,但路由表中不会存储完整路径,而只存储 “下一跳”
- 若网络拓扑发生变化,就会立即引起洪泛,从而引起各台路由器的 LSDB(Link-State Database链路状态数据库,即为路由器内部的网络拓扑图) 变化,并再次运行 Dijkstra 算法,构造新的路由表
为了使OSPF能用于规模更大的网络,可以将一个自治系统再划分为若干区域(Area),划分区域后,洪范法交换链路状态信息的范围局限在各个区域内,可以减少网络通信量
- 一个 OSPF 自治系统内,只有一个主干区域(Backbone Area)
-
- 主干区域的作用是连通其他区域
- 主干区域的标识符 Area ID = 0
- 主干区域内,至少有一台自治系统路由器(ASBR)与其他自治系统相连
- 每一个非主干区域,都至少有一台区域边界路由器(ABR)与主干区域相连
OSPF的分组类型
Type 值 | 英文全称 | 英文缩写 | 中文译名 |
1 | Hello Packet | Hello Packet | 问候分组 |
2 | Database Description Packet | DD Packet | 数据库描述分组 |
3 | Link State Request Packet | LSR Packet | 链路状态请求分组 |
4 | Link State Update Packet | LSU Packet | 链路状态更新分组 |
5 | Link State Acknowledgment Packet | LSAck Packet | 链路状态确认分组 |