OSPF报文结构
OSPF共有5中类型的协议报文
HELLO报文:周期性发送,用来发现和维持OSPF邻居关系
DD报文:database description packet描述本地的LSDB的摘要信息,用于两台路由器进行数据同步
LSR:link state request packet.向对方请求所需的LSA,只有在双方开始交换DD报文后才会向对方发出LSR.
LSU(link state update packet):向对方发送其所需的LSA或者泛洪自己更新的LSA
LSAck报文: link state acknowledgment packet,用来对LSA进行确认
OSPF中不需要确认的报文:LSAck报文 和 hello
OSPF报文格式:
LSA的格式和类型
在AS内部的每台路由器,根据分类产生一种或多种LSA.收到的LSA的集合形成LSDB;OSPF中对路由信息的描述都是封装在LSA中发布出去的常见类型:
Router-LSA; Network-LSA; Network-summary LSA; ASBR-LSA; AS-External-LSA及NSSA-External LSA
报文格式:
LS Age: 16bit,LSA产生后经过的时间,以s为单位
Option:8位,E:允许泛洪AS-External-LSA。MC:转发IP组播报文。N/P:处理Type7 LSA。
DC:处理按需链路。
Link State ID: 32位,与LS Type、Advertising Router一起用来在ospf中唯一标识一个LSA
Advertising Router | 32比特 | 产生此LSA的路由器的Router ID。 |
LS sequence number | 32比特 | LSA的序列号。其他路由器根据这个值可以判断哪个LSA是最新的 |
LS checksum | 16比特 | 除了LS age外其它各域的校验和。 |
Length | 16比特 | LSA的总长度,包括LSA Header,以字节为单位。 |
LSA类型的定义:
Router-LSA:每个设备都会产生,描述了设备的链路状态及开销,仅在所属区域泛洪
Network-LSA:由DR产生,描述MA网络的链路状态,仅在所属区域泛洪
Network-Summary-LSA,区域内某个网段的路由,由ABR产生向其他区域通告。泛洪范围仅在一个区域内
ASBR-Summary-LSA:由ABR产生,描述到ASBR的距离,通告范围除了ASBR所在区域外的其他区域。泛洪范围仅在一个区域内;ABR会在区域边界为其他区域再产生LSA4
AS-external-LSA:由ASBR产生,描述到AS外部的路由,可以泛洪到所有区域,(STUB和NSSA区域)
NSSA LSA:由ASBR产生,描述到AS外部的路由,仅在NSSA区域内泛洪
补充:Opaque LSA(Type9/Type10/Type11),用于OSPF扩展的通用机制。
其中,Type9 LSA仅在接口所在网段内泛洪。用于支持GR的Grace LSA
Type10在区域内泛洪,用于支持TE的LSA
Type11在AS内部泛洪,目前没有实际应用
LSA的泛洪机制
AREA内的所有路由器要有一个相同的LSDB,依靠的是LSA的泛洪过程
OSPF泛洪使用LSU和LSAck来保证泛洪的可靠性
OSPF的Update和LSAck可以携带多份LSA。在点到点网络中以组播方式发送到224.0.0.5,在NBMA类型和Vlink类型链路上单播方式泛洪给邻居
泛洪过程显式(ExplicitAck)和隐式确认(ImplicitAck),使用Update做确认是隐式确认;使用LSAck是显式确认。
当一份LSA被泛洪出去,当前路由器会记录在该接口的所有邻居数量并为之维护重传列表,没有收到显式或隐式确认的LSA会5s后单播重传。不管网络类型是什么
(重新通告的LSA与之前的相比,Age增加1外,其他内容一致)
完整的LSA只能通过LSU来传递
LSDB
LSDB中每份LSA都有唯一的身份ID,(LSA类型、link state id、router id)
判断LSA的新旧:
1.比较seq, 越大越新
2.seq相同,比较checksum ,越大越新
3.checksum相同,则判断lsa age 是否等于3600,如果等于3600s,则认为最新,用于删除一条LSA
4.lsa age 如果不等于3600s, 则判断LSA age 的差值,大于900s,则认为lsa age 小的最新, 小于900s则认为相同的LSA