说在前面
计网理论课就这样结束了,还是有点感慨。
据说期末要进考期。其实是一门像数据库一样,适合考前系统学习的课程。
不过已经学了也没关系!说不定能帮上计网实验?
实则基本帮不上。至少这次实验让我痛彻心扉。
理论课由于时间限制,只是草草讲了有所谓DV、LS算法,
而且因为DV算法更好笔试考察,理论课对OSPF的讲解可以说是一笔带过。
但无论如何,我们先复习一下:
什么是ospf
-
Link-State的核心逻辑就是互相传递已知的链路信息,
一致收敛到每个路由器都拥有完整的带权拓扑图(也即链接状态数据库,lsdb),
然后对拓扑图执行Dijkstra算法。
-
OSPF采用L-S算法,使用基于带宽的metric,封装于IP报文,
协议号为89,组播地址为224.0.0.5与224.0.0.6。
-
OSPF有Area的概念,一个Area包含多个网段。
其中Area0称为Backbone区域。其他所有区域必须与Area0相连。
Area内部独立进行最短路径计算。
-
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类报文:
- Hello(Type 1,Hello) 发现邻居、维持邻居、参与 DR/BDR 选举。
- DD/DBD(Type 2,Database Description) 交换 LSDB 的目录摘要,先看彼此有什么 LSA。
- LSR(Type 3,Link State Request) 看到你有我没有的 LSA,就点名请求。
- LSU(Type 4,Link State Update) 真正发送 LSA 内容(一个 LSU 可带多个 LSA)。
- 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 增量同步。
后记
就先写这么多吧。笔者区域划分实验还没做完。
这一次写的比较详细,因为本人确实也吃了没预习的亏,在前面的地方卡了很久,一个小实验就差不多一个小时。
依旧给出一些经验:
-
实验课前的预习非常重要。请把这个预习当成其他实验课的课下部分来看。
-
善用dis cu进行调试。(display current-configuration)
-
找老师答疑解惑可能会扣除少量分数。(未独立完成)