持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第1天,点击查看活动详情
接上文:
上文提到了交互各种报文。
ospf的报文有Hello,DBD,LSA,LSR,LSAck。
各报文都有着十分重要的作用,前文提到了在OSPF各阶段交互的报文不一样。
hello : 发现、建立和维护邻居关系
DBD: 只有初次建立邻居时才会交互DBD,为了选举主从,进行可靠有序的传输DD报文。
LSR: 接收到DBD报文后将DBD报文中的LSA摘要信息和本地的LSDB作为对比,如果有本地不存在的LSA,需要发送LSR请求具体的LSA内容,所以需要请求的LSA都会放到“链路状态请求列表”中等待LSR请求。
LSU: 接收到LSR后,发送LSU,通告具体的LSA内容。
LSAck: 接收到LSU后回复LSAck,用于确认接收到LSU。
以上是ospf的报文。以下是在状态机和报文中常见的问题,我大概记录了一些:
OSPF邻居建立的可靠性主要体现在:TCP3次握手,DBD的隐式确认,LSA的显示确认,报文的重传机制。
LSA的老化机制是什么?
LSA每隔半小时周期性更新(1800S),谁产生谁负责周期性更新, seq+1,cheaksum重新算,ls age置0。LSA age到达3600S还没更新。则老化。链路状态变化的触发更新。(头部之外的信息)
序列号:使用顺序序列号。不是循环的。0x80000000(第一个8是负的)到0x7FFFFFFF,,第一个序列号从0x80000001开始,当最大后 重新开始算。一般用不完。 为了实现同步,对LSA的数据结构做出定义,要实现如下功能:
1.如何实验唯一的区分一条LSA? ① LSA type
② Link State ID
③ adv router。
三个参数相同则认为是同一条LSA,如果一样需要进行新旧判断,用新的去同步旧的(LSR)
2.如何实现LSA的新旧判断? ①序列号,越大越新
② lsa checksum 越大越新
③lsa age是否等于3600S,如果等于则最新。用于删除一条LSA。不等于则比小,小的新。900S以内 不比较。
为什么要设计DD报文?
实现按需同步,提高收敛速度。