lec8 - 路由协议RIP与OSPF
博客中的很多内容来自PPT和学长博客:
EagleBear2002 的博客
SpriCoder的博客
1. RIP
1.1. RIP 的历史
-
RIP v1 被认为是一种内部网关协议,IGP(interior gateway protocol)
- RIP v1是基于距离矢量的,它与邻居路由器定时广播发送整个的路由表,默认的定期交换时间是30秒
- RIP是基于跳数的,15 就是跳数的最大值
-
RIP v1 能够 (load balancing) 负载均衡,在6个等代价的路径上进行负载均衡
-
RIPv1是有下列的局限性:
-
他不会在更新中添加子网掩码信息(有类路由)
-
他会以255.255.255.255的形式进行广播,只能传播给 邻居 而不是 相邻的路由器(效率受限制)
-
它不支持身份认证
-
不可以支持VLSM(variable length subnet mask)或者CIDR(classles interdomain routing)无类域间路由
-
VLSM和CIDR之间有什么关系??
这里有一篇博客讲述了一些例子
计算机网络:子网划分、子网掩码、CIDR 、路由聚合相关计算详解_ip地址子网掩码聚合-CSDN博客VLSM是将一个大型网络分配成多个不同掩码的子网的过程,对应了我们的子网划分题目;
但是CIDR可以用来进行地址分配和路由聚合,对应了我们的路由聚合,使用最长前缀匹配方法减小路由表的条目数量
-
1.2. RIP的配置
-
router rip
命令选择 RIP 作为路由协议。
network
命令分配基于 NIC 的网络地址,路由器将直接连接到该网络地址。如何理解基于NIC的网络地址??
可以这样理解,network可以用来确定,究竟是那些端口需要运行rip协议,他们要进行更新和发送,那么大概也是基于接口网络进行选择在那些接口上运行
1.3. RIP v2
- RIP v2 是 v1的改进版本:
- 使用 hop count,跳数指标,是距离矢量协议
- 使用 holddown timers 抑制计时器来避免路由环路 - 默认时间是180s
- 使用到水平分割来避免路由环路
- 使用 16 跳及以上就是不可以达到
1.4. v1 对比 v2
- v2支持无类路由,但是v1不支持
- v2会再进行路由表更新的时候会发送子网掩码信息
- v2支持 (prefix routing)前缀路由,同一个网络中的不同子网可以有不同的子网掩码(VLSM)
- v2需要身份认证才确定是否继续进行接收
- v1 广播 255.255.255.255, 但是v2采用 组播 地址224.0.0.9,只有RIP接收,可以提高效率
1.5. RIP v2的配置
-
router rip
:表示启动某一个协议 -
network
命令导致三个功能:不得不说,这里的三个功能的说法很不清晰,因为不是考试重点这里暂时略过,后期可能补全
2. OSPF
2.1. 概述
- OSPF是一种链路状态路由协议,open shortest path first
- 网络工程任务组(IETF, Internet Engineering Task Force)的多个标准对此进行了描述
- OSPF正在成为首选的IGP,内部网关协议,因为具有很好的可扩展性 scalable
2.2. 路由信息
- 链路的状态 是对接口及其相邻路由器的关系的描述
- 连接状态的集合形成了一个 link state database 链路状态数据库,也叫拓扑数据库
- 路由器使用 SPF(dijkstra shortest path first)算法来构建SPF树,并且每个路由器把自己作为这棵树的 根(这也是显然的,dijkstra算法本来就是求出一个源点到其他点的最短路径)
- 路由器通过 SPF 树计算最佳路径,然后选择最佳路径放在路由表中
2.3. OSPF 与 RIP 比较
- OSPF:事件驱动,利用 带宽 等作为指标
- subdivide a network into areas 可以把网络进一步分成区域,适合大型网络
- 更快速的收敛
- equal-cost multipath 支持同代价的多路
2.4. OSPF特征
-
特点:更健壮,而且可扩展性
-
关于区域划分的问题:
- 将大的网络分成多个area,每一个area都只是与 area0 (backbone)相连接,保证area没有回路
- 最多只有两层,
- 链路database主要是在一个area内部同步
2.5. OSPF一些术语
-
连接(Link):两个设备之间的物理链路
-
邻居(Neighbors):相邻的路由器
-
链路状态(Link-State):物理链路的信息,包括路由器连接关系、通过什么接口、链路带宽、网络类型(点对点、多路复用)等,不同网络类型处理代价不同(两种网络类型:点对点,多路复用)
-
代价/费用(Cost):不同网络链路处理的时候的代价,和链路带宽相关,成反比关系,一般是固定值除以带宽(计算的时候切切看清)
-
自治系统(Autonomous System,AS):多个 Area 形成一个自治系统
-
Neighbours 必须在一个 Area 中,Neighbour 之间交换拓扑数据库(Topology Databases)当中存的是 link-state,也就是说,neighbor是相对于同一个area的概念,每个 area 都有自己的 拓扑数据库
-
一个 Area 中获得全部 Link-State 后计算 Tree,生成表
-
指定路由器(Designated Router,DR):只有在 多路复用 的链路下使用,被选举出来
为什么是多路复用?
kimi:
-
备用指定路由器(Backup Designated Router,BDR):如果 DR 坏了,再次选举会出现问题,如果 DR 损坏,BDR 立即成为 DR,目的是提高交换效率
2.6. OSPF域
- 域 使用32位数进行标识,可以IP格式0.0.0.0,也可以是十进制数字0;
- OSPF 不会多与 两层层次结构
- 在多区域 OSPF 网络中,要求所有区域都连接到区域 0(主干)。
- 注意,Area 是对端口的划分,即一个路由器的不同端口可以属于不同 area。(在图中可以看出,实际上ABR就是不同端口分给了不同区域,而且一定是会分给 area0 的)
- ABR(Area Border Router):区域边界路由器,有一定的约束,一个路由器最多连接3个路由器
- 单个的Area中最多50个路由器,否则就会计算量太大
2.7.OSPF的五个步骤和七个状态
-
OSPF使用邻居的邻接关系来获取网络的全部信息
-
五个步骤:(比较抽象,后面会进一步展开)
- 建立 adjacency relationships 邻接关系
- 选出 DR 和 BDR(如果需要,多路复用的时候才用到)
- 发现路由
- 选择合适的路由
- 维护路由信息
-
七个状态:
- 关闭(Down)
- 初始化(Init)
- 双向操作(2Way)
- 预先启动(Ex Start)
- 交换(Exchange)
- 加载(Loading)
- 完成(Full)
来自kimi:
2.8. 串起OSPF的一些知识点
2.8.1. 选择DR BDR
OSPF的网络类型包括
- 广播多路复用,比如以太网
- 点对点
- NBMA(non Broadcast Multi-access)非广播多路复用
2.8.2. DR 与 BDR
2.8.2.1. 为什么选出DR,BDR
-
实际上可以理解成,把 O ( n 2 ) O(n^2) O(n2)的连接数量降低到 O ( n ) O(n) O(n)
-
再次强调,只有多路复用的实现方式需要DR BDR
-
连接方式:每个路由器都会与DR BDR 形成邻接关系
-
DR 使用 224.0.0.5 的 组播地址 发送给 所有运行OSPF的路由器
-
为了确保DR/BDR看到所有路由器发送的链路状态,使用的是 224.0.0.6 组播地址
2.8.2.2. 多路复用中的OSPF
- Giga/Fast/Ethernet,FDDI,Token Ring
- 几个 Area 有几个 DR 和 BDR(是在不同 Area 上)
- DR 和 BDR 归属于区域
2.8.3. OSPF报文
Fuction | Name | |
---|---|---|
Hello | 哈喽 | Hello |
Database Description | 数据库描述 | DBD |
Link-State Request | 链路请求 | LSR |
Link-State Update | 链路更新 | LSU |
Link-State Acknowledgement | 链路确认 | LSAck |
2.8.3.1. hello协议
- 当路由器在某个接口上启动OSPF协议之后,他会发送hello数据包并且每隔一段时间就发送数据包
- govern(管理)hello报文交换的规则就叫 hello 协议
- Hello 数据包一定在 224.0.0.5 的地址上
- 默认情况下,广播多路访问和点对点网络上每 10 秒发送一次 Hello 报文
- 在连接到 NBMA 网络的接口(例如帧中继)上,默认时间是 30 秒
Hello 报文的 Type 字段设置为 1
2.8.4. 怎么选举DR/BDR
- 优先级 + router ID,最大的就是DR,其次是BDR
- 优先级范围:1 - 255,默认是1
- Router ID 怎么来:
- 如果设置了环回IP地址,那么就用它
- 如果没有,就是用 物理接口 的最高IP地址
- 如果接口都故障,那么路由器必须重新建立邻接关系并重新转换LSA(re-establishing adjacency and readvertising LSA)
2.9. OSPF操作的完整步骤
- 一开始的状态是 Down State
- 然后发送 Hello 报文(Init State)
- B 收到 A 的报文(收到报文一定是邻居):Hello 报文的 TTL 是 1,所以不会跨路由器传播,收到即丢弃
- 收到后,B 也会发送自己的 Hello,然后 A 收到后进入 Two Way 状态
- 准备交换数据库(Exstart state)
- 首先确认主方(发送方)、从方(接受方),保证数据有序,简单就是谁的 Router ID 高
- Router ID 高的(主方)发送自己 DBD 报文,从方对主方发送的 DBD 接受处理并发送
- 交换完成后,各自检查自己是不是有全部的信息
- 如果有完整的信息,则发送 LSAck
- 如果发现有没有的,则发送 LSR,等待 LSU(整个链路的详细信息,不是 LSA)来进行学习,之后收到完成后发送 LSAck
2.10. 回顾OSPF操作
2.10.1. 建立邻接关系
- 路由器每隔一段时间发送一次 hello 数据包,Hello 报文的 TTL 是 1,表明不会跨路由传播
- 如果邻居被发现了:将邻居添加到邻居数据库
- 发现网络类型
- 如果是多路复用网络,进入 DR/BDR 选举过程,然后进入步骤 2
- 如果是点对点或点对多点网络,则不会举行 DR/BDR 选举过程,并跳过步骤 2
- 如果 hello 数据包标头中的 DR/BDR 字段已被占用(即 DR/BDR 对已经存在),则不会进行 DR/BDR 选举,并跳过步骤 2
- 如果对方的 DP/BDP 优于我的 DP/BDP,则接受对方的。
2.10.2. 选举DR/BDR
- 如果没有其他路由器联机,则该路由器将成为 DR。下一个要“启动”的路由器将是 BDR
- 如果多个路由器(两个或更多)同时联机,则
- 优先级最高的路由器成为 DR:优先级为零表示“从不 DR”
- 如果存在平局,则具有最高 Router ID 的路由器将成为 DR: Router ID 是最高的环回或接口 IP 地址
- 具有第二高优先级或 Router ID 的路由器成为 BDR
- 如果 DR 无效,则 BDR 变为 DR
- 然而
- 如果新的 OSPF 路由器以更高的优先级或 Router ID 加入网络,则当前的 DR 和 BDR 不会更改
- 仅当当前 DR 失败时,它才成为新的 BDR
2.10.3. 发现路由
- 这一步从 Ex Start 状态转换到 Full 状态
- 路由器确定“主/从(master/slave)”关系
- 多路复用网络中的 DR/BDR 交换 LSA,并且所有其他 DR 将其 Type 2 DBD 发送给 DR/BDR
- 如有必要,路由器可以通过发送请求更多信息的 LSR 进入负载状态:所有路由器必须在“加载状态”中等待,直到完全更新请求的路由器
- 路由器现在进入Full状态
2.10.4. 选择适当路由
- 现在,将与网络上的所有其他路由器并行地计算 SPF 算法。
- 切记:在发生这种情况之前,所有路由器必须具有相同的链接状态数据库
- SPF 使用 Cost 作为指标
- SPF 将从其自身到目的地的每条路径的成本相加,并以路由器为根来构建树
- OSPF 然后在路由表中安装成本最低的路径:最多将安装 4 条等价路径以进行负载共享
2.10.5. 维护路由信息
- 常规的 Hello 交换是 OSPF 用于检测新邻居或故障(downed)邻居的机制
- 根据网络的类型,Hello 数据包以不同的默认间隔发送(确定对方是不是还好)
- 对于速度为 T1(1.544 Mbps) 或更高的链接,每 10 秒:广播多路访问和点对点链接
- 对于小于 T1 的链接,每 30 秒:非广播多路访问链接
- “死间隔” 是问候间隔的四倍。(如果在这样子对方还没有成功则对方死了)
2.10.6. 链路状态出现变化
-
Router A tells all OSPF DRs on 224.0.0.6(组播地址)
-
Event 触发交换:比如 A 连接的网段断掉了,否则不会有影响,只在有 event 发生时才会更新
-
A 使用 LSU(linkState update)告知DR
-
DR tells others on 224.0.0.5
-
DR 通过 LSU 告知所有的路由器
- 如果 B 连接了别的 Area,则继续进行交换
-
所有的路由信息交换完毕后,同时更新路由表。