Featured image of post BUAA CN Week3 OSPF

BUAA CN Week3 OSPF

层层桎梏的路由协议

说在前面

计网理论课就这样结束了,还是有点感慨。

据说期末要进考期。其实是一门像数据库一样,适合考前系统学习的课程。

不过已经学了也没关系!说不定能帮上计网实验?

实则基本帮不上。至少这次实验让我痛彻心扉。

理论课由于时间限制,只是草草讲了有所谓DV、LS算法,

而且因为DV算法更好笔试考察,理论课对OSPF的讲解可以说是一笔带过。

但无论如何,我们先复习一下:

什么是ospf

  1. Link-State的核心逻辑就是互相传递已知的链路信息,

    一致收敛到每个路由器都拥有完整的带权拓扑图(也即链接状态数据库,lsdb),

    然后对拓扑图执行Dijkstra算法。

  2. OSPF采用L-S算法,使用基于带宽的metric,封装于IP报文,

    协议号为89,组播地址为224.0.0.5与224.0.0.6

  3. OSPF有Area的概念,一个Area包含多个网段。

    其中Area0称为Backbone区域。其他所有区域必须与Area0相连。

    Area内部独立进行最短路径计算。

  4. OSPF有5类报文:Hello、DD(DBD)、LSR、LSU、LSAck。

接下来讲解一些应对本次实验课,你应当知道的一些内容。

ospf相关指令

  • display ospf 信息很多,可以试着找找
  • display ospf peer 邻居信息
  • display ospf lsdb 显示LSA(LSA是什么?)
  • network xxx yyy area z 代表将xxx网段都接入area z 需要注意 yyy代表的是mask的反码!!
  • reset ospf process 重启OSPF,可用于更新DR和Router-id(这俩又是?)

什么是Loopback

Loopback 可以是路由器的一种逻辑虚接口

它的特点是永久物理状态恒为 Up,也就是永远连接,不受物理网线、接口插拔影响。

什么是router id

这是路由器的一种唯一标识

可以通过命令router id XXX 来直接配置。

没有主动配置时,默认是优先选取环回接口(Loopback)中最大的 IP 地址,其次是自动选取所有物理接口中状态为 Up最大 IP 地址,若所有接口均无 IP / 未启用,就无法自动生成 Router-ID。

Router ID 通常在 OSPF 进程启动时确定,后续对其更改需重启 OSPF 进程后才生效。

什么是LSA

LSA存储着Link-State信息的单元。有很多类,我们需要掌握5类,它们的功能分别是:

一类 LSA(router):每台路由器生成,描述本路由器链路,区域内泛洪(注意泛洪≠广播)。

二类 LSA(network):由 DR 生成,DR汇聚了同一网段成员清单,区域内泛洪。这个信息告诉哪些IP是同一子网。

三类 LSA(summary):由 ABR 生成,将某区域的路由概要发布向其他区域。

四类 LSA(asbr):由 ABR 生成,通告 ASBR 路由器的位置

五类 LSA(external):由 ASBR 生成,传递引入的外部路由,在整个 OSPF 自治系统内泛洪。

什么是DR

DR是每个广播网段选举出的一个代表,作为二类LSA的生成者。

选举逻辑是优先级数值更大者,若相同则是router id更大者。

优先级为0则为放弃参选DR/BDR。

选出DR后,再选出次大者作为BDR。

什么是BDR

DR执行 reset ospf process 后,BDR成为新的DR,按原规则重新选举BDR。

BDR执行 reset ospf process 后,按规则重新选举BDR(原BDR也参与选举)。

其他路由器执行时,不影响 DR、BDR 角色

什么是ABR

ABR是同时位于Area 0 和其他普通区域的路由器。

他掌握多区域信息,还拥有跨区域沟通能力,所以可以负责在区域之间传递路由信息(三类 LSA)。

四类 LSA 可以教大家导航到ASBR。

什么是ASBR

ASBR 是负责把 OSPF 域外路由引入 OSPF 的路由器。

用人话说,就是他有例如静态路由、RIP等其他协议这种渠道得到的路由信息

他可以发布五类LSA可以传递这些外部路由,让其他人也学习到。

这下知道为啥需要四类LSA了:

我学习外部路由时,只知道这个dest对应的下一跳是ASBR,怎么到达这个ASBR就需要ABR讲清楚。

说了这么多我觉得也差不多了。

具体LSA是什么结构,怎么实现上述的这些功能,就需要从实验中学习了。

静态路由

注意选择套件二的同学也要完成静态路由的学习,也就是RIP的1,2,3,6题。

这道题挺简单的,但是笔者被卡了很久,因为在做上机必做的undo interface vlan 1时,我手贱给交换机也执行了vlan 1的shutdown。

哈哈,那还说啥了。能ping通就有鬼了。

需要掌握的知识理论课都学过:

0.0.0.0/0是默认,因为他就是最大的网,互联网。

OSPF报文及简单交互

前面提到OSPF有5类报文:

  1. Hello(Type 1,Hello) 发现邻居、维持邻居、参与 DR/BDR 选举。
  2. DD/DBD(Type 2,Database Description) 交换 LSDB 的目录摘要,先看彼此有什么 LSA。
  3. LSR(Type 3,Link State Request) 看到你有我没有的 LSA,就点名请求。
  4. LSU(Type 4,Link State Update) 真正发送 LSA 内容(一个 LSU 可带多个 LSA)。
  5. LSAck(Type 5,Link State Acknowledgment) 确认收到 LSA,保证泛洪可靠。

具体来讲:

Down -> Init -> 2-Way 靠 Hello

收到对方 Hello,看到自己 RID 出现在对方邻居列表,进入 2-Way。

在广播网段里,非 DR/BDR 之间常停在 2-Way;与 DR/BDR 会继续到 Full。

2-Way -> ExStart 开始谈 DD 规则

双方先协商 DD 的主从关系和初始序列号。(此SM非彼SM)

主从是为了避免Exchange阶段双方同时主导 DD。

Master 控制 DD 交换节奏和序列号推进,Slave跟随并确认。

双方先发带协商标志的 DD。

何为协商? I(Init)=1,我们初次见面,这就是协商的意思。

刚见面时,都想当Master,而且后续也还有话要说(More),

所以MS=1,M=1

然后这一轮结束后Router ID 大的一方成为 Master。Master 的seq被定为初始 DD sequence number,并在后续 DD 中主导递增。

保证会话有序的逻辑是:Master 发一个 DD(含 seq),Slave 用相同 seq 应答其对应 DD。

注意这里的seq不是你TCP的那个seq与ack!别搞混了

所以接下来应该是Slave回应Master的第一句话,用Master第一句话的seq。

ExStart -> Exchange 大量 DD 交换

互相发送 DD 摘要,知道你有什么、我缺什么。

发送的过程满足I=0,M的MS=1,S的MS=0,M的seq是上次交流+1,S的seq与M的seq相同。

直到双方摘要交换完毕,M=0,进入 Loading。

这里可以为大家写一个交流示例

M->S (seq = A, I =1, MS =1, M =1)

S->M (seq = B, I =1, MS =1, M =1)

然后完成协商,S给出回应:

S->M (seq = A, I =0, MS =0, M =1)

然后Master开始主导对话进行exchange:

M->S (seq = A+1, I =0, MS =1, M =1)

S->M (seq = A+1, I =0, MS =0, M =1)

然后说完了:

M->S (seq = A+n, I =0, MS =1, M =0)

S->M (seq = A+n, I =0, MS =0, M =0)

Exchange -> Loading 疯狂学习LSA中

我缺哪些就发 LSR。

对方用 LSU 回复具体 LSA。

收到后回 LSAck。

Loading -> Full 数据库同步完成

邻接完成,后续拓扑变化直接用 LSU/LSAck 增量同步。

后记

就先写这么多吧。笔者区域划分实验还没做完。

这一次写的比较详细,因为本人确实也吃了没预习的亏,在前面的地方卡了很久,一个小实验就差不多一个小时。

依旧给出一些经验:

  1. 实验课前的预习非常重要。请把这个预习当成其他实验课的课下部分来看。

  2. 善用dis cu进行调试。(display current-configuration)

  3. 找老师答疑解惑可能会扣除少量分数。(未独立完成)

comments powered by Disqus
Easy Life and Easy Learning
使用 Hugo 构建
主题 StackJimmy 设计