赞
踩
通过双方交互Hello报文完成邻居发现。一共有三个状态机:
在形成邻居关系过程中,需要对Hello报文携带的参数进行协商,否则无法正常建立邻居关系:
hello报文抓包内容:
带有hello时间,dead时间,并且有接口的接口优先级用来选举DR和BDR,也有属于的区域和自己已知的邻居路由器。
在广播网络或者NBMA网络中普通路由器需要和DR、BDR建立OSPF邻接关系,普通路由器之间只需要建立邻居关系即可。在P2P和P2MP网络中,设备间建立的都是邻接关系。
选举DR和BDR的作用:
DR/BDR选举规则:
DR/BDR选举算法:
DR/BDR选举的过程:
分为两个子阶段:主从关系建立阶段和数据库同步阶段。
通过双方交互DD(DBD)报文完成。一共有两个状态机,Exstart和Exchange:
隐式确认机制: 也就是通过序列号进行确认,主设备每发送一个DD报文,备设备都会发送同样序列号的DD报文进行确认,保证DD报文不会丢失。
抓包内容: 带有LSA的head字段,DB Description字段、Interface MTU字段等
此阶段中,需要对DD报文携带的MTU参数进行协商,否则无法正常建立邻居关系(也可以忽略检查):
默认情况下,DD报文的interface MTU值为0,表示不执行一致性检查。在华为设备上使用命令ospf mtu-enable后,可以开启接口填充及检查MTU。如果检查MTU值,整个过程协商过程,小的一方停留在Exstart状态,另一方停留在Exchange阶段。
通过双方交互LSR、LSU、LSAck报文完成。一共有两个状态机loading和Full:
显式确认机制: LSU对LSR确认,LSAck对LSU确认,具体是通过{type、ls id、advrouter} 字段来判断是否是一条LSA。
隐形确认机制: LSU对于LSU的确认,在MA网络中使用这种方式进行确认,原因是因为DR需要将DRother发送来的LSU,重新通过224.0.0.5这个组播地址发送到整个网段中,此LSU的产生者当然也会收到,就可以当做确认了,否则在MA网络中,DR使用LSAck报文进行确认就太过于繁琐。
抓包内容:
LSR报文:带有需要请求的具体LSA的信息{type、ls id、advrouter}
LSU报文:带有具体的LSA信息
LSAck报文:带有LSA的头部信息
泛洪的原因:
泛洪的过程是路由器把自己产生或学来的LSA向所有其他邻居或路由器通告的过程。OSPF在区域内通过LSDB中的LSA计算出拓扑和路由信息,为了保证没有环路,每一个区域内的LSDB的内容是相同的,LSDB的一致性及快速同步直接影响OSPF路由的收敛性能。
泛洪的机制:
数据库包含所有LSA,数据库中任何LSA的变化都会触发当前路由器通告该变化给邻居路由器并泛洪至所属区域;如果没有变化,默认每30min会进行一次泛洪。
OSPF的LSU/LSAck可以携带多份LSA,通过在邻居之间泛洪LSU/LSAck,最终通告到全网络。在点到点网络,更新以组播方式发送到224.0.0.5,在点到多点(NBMA)类型和Vlink类型链路上则以单播方式泛洪给邻居。
每台路由器在一个接口收到泛洪的LSA报文,会继续向其他接口泛洪。例如,在MA网段上,若DRother向DR/BDR泛洪,则DR会以组播方式将LSU (包含LSA)向其他DRother泛洪。NBMA网络,上DRother单播给DR/BDR,DR再单播给DRother。泛洪过程是个可靠过程,有确认机制。其中每份泛洪的LSA都必须被确认,确认包括显式或隐含确认, 使用
当一份LSA被泛洪出去,当前路由器会记录在该接口的所有邻居数量并为之维护重传列表,没有收到显示或隐含确认的LSA会在5s后单播重传更新(不管网络类型是什么)。
具体步骤:
每台路由器都有相似的工作行为以生成一致的LSDB。
如何判断本地是否存在该LSA:
LSDB中每份LSA都有唯一的身份证ID,由三个参数构成:LSA类型、链路状态ID (Link State ID)和通告路由器的RouterID。如果这三个参数相同,表示是通一个LSA。
如和判断LSA的新旧:
判断相同ID的“新的”LSA要依次比较以下内容:LSA序列号( Sequence Number)、LSA报文校验和(Checksum)和LSA年龄(LSA Age)。
序列号:有符号32位整数,采用线性递增的序列号,初始序列号从08000001到最大值0x7FFFFFF,序列号越大代表越新,LSA会周期(30min) 产生新的LSA,每次产生的LSA序列号都会增加1。到了最大值0x7FFFFFFF会发送AGE标记为60min的lsa,然后全部删掉重新从最小开始0x00000001开始。
Checksum: 16 位数,对刚收到的LSA做计算,Age 字域不在计算内。即使LSA存放在LSDB中,路由器也会每5分钟重新计算一次。
Age: 16 位无符号整数。LSA的最大年龄是3600s,LSA在路由器间泛洪时每经过一跳年龄增加1,在LSDB中存放时年龄也增加1。若LSA的年龄达到3600s(即Maxage),路由器会从LSDB中清除该LSA。在拓扑稳定的场合下,每份存放在LSDB中的LSA间隔30min都会被周期产生的新LSA刷新。
判断LSA新旧的规则如下:
判断LSA是否相同和新旧的参数都在LSA的报头中:
参考资料:华为hedex文档、HCIE学习指南
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。