1. OSPF报文
OSPF报文 Hello 报文、 DD 报文、 LSR 报文、 LSU报文、LSAck 报文
OSPF 头部
OSPF 用 IP来封装协议报文,协议号89,5种OSPF的报文具有相同OSPF 头部。
OSPF 头部中关注的字段主要有:
- version: IPv4 OSPFv2 值为2;IPv6 OSPFv3值为3,1Byte;
- Type:描述为何种OSPF报文,
1:Hello报文,2:DD报文,3:LSR报文,4:LSU报文,5:LSAck报文,1Byte; - Router ID: 发送OSPF 报文的源Router ID,4Byte;
- Area ID:发送OSPF 报文接口所属的OSPF 区域ID,4Byte;
- checksum:对除认证字段的OSPF 报文进行校验,2Byte;
- Auth 类型字段:定义OSPF认证类型,0:不验证;1:简单认证;2:MD5认证,2Byte。
- Auth 字段:当验证类型为0时未作定义;类型为1时此字段为密码信息;类型为2时此字段包括Key ID、MD5验证数据长度和序列号的信息。
OSPF Hello报文
Hello 报文周期性发送,用于发现和维护OSPF的邻居关系,在MA网络中用来选取OSPF的DR/BDR。
Hello报文中不携带LSA信息,除Hello报文其他OSPF报文都携带LSA信息。
OSPF Hello报文如下:
Hello报文需要关注的字段:
- netmask:掩码,发送Hello报文的接口所在网络的掩码,在MA网络中判断接口是否在一个网段
- Hello/Dead interval: Hello报文发送时间间隔,以及dead 时间,缺省dead时间位hello intervall的4倍,不同的网络类型的hello interval并不一定相同。
- Router Priority: 路由器优先级,用于选举OSPF 的DR/BDR,默认为1,如果为0表示路由器不参与DR/BDR的选举
- Designated Router: 指定路由器,DR接口的IP地址吗,如果为0.0.0.0表示未选举DR路由器
- Active Neighbor: 描述OSPF 的邻居路由器的RID列表,表示路由器已经从邻居路由器收到合法的hello报文
- Option 字段:8个可选项 DN O DC EA N P MC E MT
DN:用于基于MPLS的三层VPN,Down 比特位
DC:按需链路
N/P:N只出现在hello数据包中,N=1表明该路由器支持7类LSA
P:仅用在NSSA区域的7类LSA头部,用来告诉NSSA区域非末节区域的ABR将七类LSA转换为五类LSA
E:具有接收外部LSA的能力。当始发路由器具有接收OSPF外部LSA的能力时,该位置位1。在所有5类LSA和始发于骨干区域以及非末节区域的LSA中,该位置为1。而始发于末节区域的LSA中,该位置为0。Hello报文中该位置位表明一个接口具有接收和发送5类LSA的能力。
OSPF DD报文
DD报文:Database Description报文,描述本地LSDB(Link State Database)的摘要信息,用于两台设备进行数据库同步。报文内容包括LSDB中每一条LSA的Header(LSA的Header可以唯一标识一条LSA)。
OSPF 第一个DD报文不携带LSA信息,只用来协商主从,后续DD报文才会携带LSA 摘要信息。
摘要信息的内容包含:Adv Router、Link State ID、LS Type、Options字段、LSA Age、校验和、序列号;
Adv Router、Link State ID、LS Type三者唯一的标识一类LSA;
LSA Age、校验和、序列号用于区分LSA的新旧;
OSPF DD报文如下:
DD报文种需要关注的字段:
- I:initial,当发送连续多个DD报文时,如果这是第一个DD报文,则置为1,否则置为0
- M:more,当发送连续多个DD报文时,如果这是最后一个DD报文,则置为0。否则置为1,表示后面还有其他的DD报文
- MS: master/slave:当两台OSPF路由器交换DD报文时,需要进行主从的选举,MS置1表示为主。
- DD Sequence:DD报文序列号。主从双方利用序列号来保证DD报文传输的可靠性和完整性。
- Interface MTU:接口MTU,华为设备缺省不检查,值为0,VLink中字段为0
OSPF LSR报文
用于向对方请求所需的LSA。
设备只有在OSPF邻居双方成功交换DD报文后才会向对方发出LSR报文。
OSPF LSR报文如下:
LSR报文种需要关注的信息:
- 请求信息:LSA的三要素:LS Type、Link State ID、Adv Router
- LSR中不携带Options字段。
OSPF LSU报文
用于向对方发送其所需要的LSA
OSPF LSU报文如下:
OSPF LSAck报文
用来对收到的LSA进行确认
2.OSPF LSA
主要分析OSPF 1类、2类、3类、4类、5类、7类LSA,使能OSPF的路由器会产生一种或多种LSA,收到的LSA的集合形成LSA的数据库LSDB。
LSA的头部报文结构
所有的LSA具有相同的头部
- LS age:lsa产生的时间,以s为单位,缺省情况下没经过一台路由器LSA增加1.
- Option:与OSPF Hello报文种的一直,注意P选项仅出现在7LSA种,用于7转5,P即通告位,E 表示支持5类LSA的泛洪
- LS type + Link State ID + Advertising Router 用来标识一个唯一的LSA
- LS type: 不同类型的LSA
- Link State ID:不同类型LSA内容不同
- Adv Router:通告者,为产生此LSA的Router ID
- LS sequence number:序列号,判断LSA的新旧
- LS checksum:校验和,还可用于判断LSA新旧
1类LSA Router LSA
- 所有运行OSPF协议的设备都会产生,用来描述设备的链路状态和开销
- 区域内泛洪
- LS type:值为1
- Link State ID = Adv Router= 设备的Router ID
- Flag位:V E B ,V表示始发路由器是具有邻接关系Vlink的一个端点,E表示始发路由器是一个ASBR,B表示始发路由器是一个ABR
- Router LSA中定义了4中link 类型:
- 点到点 :描述点到点类型链路,Link ID:邻居路由器RID,Link Data:本端接口IP地址
- TransNet:描述MA类型链路,Link ID:DR接口IP地址,Link Data:自己接口IP地址;TransNet是指向伪节点
- StubNet:描述末节网络,Link ID:网段信息,Link Data:掩码信息;仅当有 stub link,loopback 接口网络 or P2P link 上的网络号都是以 stubnet形式出现。
- Vlink:描述虚链路,Link ID:VLink对端的RID,Link Data:本地VLink的接口IP地址
2类LSA Network LSA
- MA网络中由DR产生,描述MA(广播与NBMA)网络的链路状态
- 区域内泛红
- LS type:值为2
- Link State ID:DR的接口IP地址
- Adv Router:产生2类LSA路由器的RID
- Netmask:结合Link State ID即可算出2类LSA的网络号
- Attach Router:此MA网络中所有邻居路由器的RID
OSPF路由器通过1类、2类LSA进行SPT树的逻辑拓扑的计算。
3类LSA Network-summary LSA
- 由ABR产生,向其他非骨干区域通告,描述区域内某个网段
- LSA3在区域见传递路由,但是泛洪区域为区域内
- ABR位为骨干区域内的每条OSPF路由各产生一条3类LSA向其他非骨干区域进行通告
- Link State ID:网络号
- Adv Router:ABR的RID
- 结合Netmask字段与Link State ID即可知道3类LSA携带的网段信息下图为:3.3.3.3/32
- Metric:开销,ABR到目的网络的开销值(即ABR1.1.1.1到目的网络3.3.3.3/32的开销值)
4类LSA ASBR-summary LSA
- 由ABR产生,描述到ASBR的距离,为5类LSA服务,通告给除ASBR所在区域的其他区域
- 区域内泛洪
- 报文格式与LSA3相同
- Link State ID: ASBR的RID
- Adv Router:ABR的RID
- Netmask:无意义
- Metric:ABR到ASBR的开销
5类LSA AS-external LSA
- 由ASBR产生,描述AS外部的路由
- 泛洪到所有普通区域(除了STUB(totally)与NSSA区域(totally))
- Link State ID:引入外部路由网络号
- Adv Router:产生5类LSA的路由器的RID
- Netmak:引入外部路由的掩码
- Option:E 描述的为外部路由
- External Type:外部路由的类型,缺省为2,Type1与Type2的区别:Type2仅考虑外部成本,Type1考虑端到端的成本(ospf内部成本+外部成本),Type2优先级由于Type1.
- Metric:ASBR到外部路由的开销
- Forwarding Address:可以是0.0.0.0,也可以不是,如果是0.0.0.0,访问外部路由将报文转发给ASBR,如果不是0.0.0.0,报文转发给此非零地址,路由器根据FA地址来决定访问外部路由是通过ASBR还是FA地址。
- Tag:用来标记外部路由,缺省为1,可手动配置
7类LSA NSSA-external LSA
- 由ASBR产生,描述AS外部路由
- 仅在NSSA区域泛洪,NSSA区域区别与Stub区域,可以引入外部路由
- Link State ID:外部路由网络号
- Adv Router:产生7类LSA的路由器RID
- Netmask:外部路由掩码
- Option:P,P置位标识ABR将7类转为5类LSA,产生的此5类LSA 三要素会发生变化,但是FA地址不变(可达的前提下)。
- External Type:与5类相同,缺省为type 2
- FA地址:缺省情况下7类LSA携带FA地址,目的防止环路与次优路径
LSA的新旧规则
序列号越大越新
序列号相同,checksum越大越新
序列号与checksum都相同,比较age时间
- 若 Age时间为3600,为最新,表明该LSA要更新
- 若两个LSA的age时间间隔大于900s,则age时间小的为新
- 若两个LSA的age时间间隔在900内,视为相同LSA,保留其中一条LSA
3. LSA的一些场景实践
场景1:同区域内存在几个1类LSA,几个2类LSA
AR1,AR2,AR3都产生一个一类LSA,AR2与AR3网络类型为广播,DR产生一个二类LSA。
AR1的链路类型为P2P,一类LSA中的Link Type:P2P,Subnet。
AR3的链路类型为广播,一类LSA中的Link Type:Transit。
AR2左侧链路P2P,产生Link Type:P2P,Subnet;右侧链路广播,Link Type:Transit。
如果上述路由器存在loopback口,将在1类LSA中新增Link Type为subnet的信息
区域0的LSDB中包含:3条一类LSA,1条二类LSA。
场景2 不同区域场景
三类LSA由ABR产生,
将区域0的一类LSA转换为3类LSA,传递到区域1,同时将区域1的1类、2类LSA转换为三类LSA,传递到区域0.
场景3:AR1引入外部路由1.1.1.1/32
提问:
1,区域1为普通区域,图中哪些路由器产生4类LSA,描述的内容?
2,AR4上可以收到几条4类LSA?
3,如果区域1是NSSA区域,AR2和AR3的角色?
4,AR4上可以收到几条4类LSA?
5,在区域2的AR7上可以收到几条4类LSA?
6,如果在AR2上引入一条外部路由,AR3上是否做7转5,如何选路?AR7上有几条4类LSA?
分析:
1.4类LSA只能由ABR产生,通告给除ASBR所在区域的其他区域,图中区域0的ABR有4个,AR2,AR3,AR5,AR6。4类LSA描述的内容为去往ASBR的距离。
2.当区域1为NSSA区域时,缺省为RID大的进行7转5,ABR如果进行7转5产生5类LSA,同样角色为ASBR。
结论:
1,区域1为普通区域,引入外部路由后,在区域0中AR2 AR3 AR5 AR6都是ABR,都会产生4类LSA,在AR4上可以收到2条4类LSA,分别由AR2 AR3产生,内容:Linkstate ID:1.1.1.1,Adv Router:2.2.2.2/3.3.3.3,描述的是到ASBR的开销。AR5与AR6上相同,同样描述的是到ASBR 1.1.1.1的开销,所以在AR7上可以收到两条2类LSA。
2,当区域1为NSSA区域,AR2 AR3的角色ABR,ASBR;由RID大的AR3将7类LSA转为5类LSA,
3,在区域0不会产生4类LSA,因为5类LSA在区域0产生,区域0通往1.1.1.1/32的外部路由是通过去往FA地址的3类LSA,AR5 AR6上可以产生4类LSA,分别指向ASBR,因为在区域0有两个ASBR,判断是否是ASBR是根据一类LSA中V B E位,所以会分别产生指向2.2.2.2/3.3.3.3的4类LSA,即AR5产生两条4类LSA,AR6产生两条4类LSA。AR7共收到4条4类LSA。与一条携带FA地址的5类LSA,AR7访问AR1的外部路由是通过FA地址即3类LSA。
4,在AR2上引入外部路由,在区域1表现为7类LSA,其他区域以5类LSA的方式泛洪,在AR3上会收到一条5类LSA,一条7类LSA,AR3不会进行7转5,因为7类LSA中的NP位没有置位。选路是比较5类和7类的开销来决定。AR7上仍然收到4条4类LSA。3类,5类LSA都是描述的路由信息,每一条路由信息,都会产生一条3类或5类LSA。