LSA的基本概念
LS age 16比特 LSA产生后所经过的时间,单位是秒。无论LSA是在链路上传输,还是保存在LSDB中,其值都会在不停的增长。
Options 8比特
LS type 8比特 LSA的类型:
• Type1:Router-LSA。
• Type2:Network-LSA。
• Type3:Network-summary-LSA。
• Type4:ASBR-summary-LSA。
• Type5:AS-External-LSA。
• Type7:NSSA-LSA。
Link State ID 32比特 与LS Type一起描述路由域中唯一一个LSA。
Advertising Router 32比特 产生此LSA的路由器的Router ID。
LS sequence number 32比特 LSA的序列号。其他路由器根据这个值可以判断哪个LSA是最新的。
LS checksum 16比特 除了LS age外其它各域的校验和。
length 16比特 LSA的总长度,包括LSA Header,以字节为单位。
Option字段补充:
DN:用来避免在MPLS VPN中出现环路。当PE向CE发送3类、5类和7类LSA时需要设置DN位,其他PE路由器从CE接收到该LSA时,不能够在它的OSPF路由计算中使用该LSA。
O:该字段指出始发路由器支持Opaque LSA(类型9、类型10和类型11)。
DC位:当始发路由器支持按需链路上的OSPF的能力时,该位将被设置。
EA:当始发路由器具有接收和转发External-Attributes-LSA(type8 LSA)的能力时,该位被置位。
N位:只用在Hello数据包中。N=1表明路由器支持7类LSA。N=0表明该路由器将不接收和发送NSSA LSA。
P位:只用在NSSA LSA。该位将告诉NSSA区域的ABR路由器将7类LSA转换为5类LSA。
如何比较LSA的新旧?
1.首先比较序列号,如果序列号越大,则越新。
2.如果序列号相同,则比较校验和,校验和越大越新。
3.如果校验和相同,则比较存活时间(LS Age),如果这些LSA中有一条存活时间为3600s,则认为该LSA是最新的,用于删除一条LSA。
4.如果所有LSA age不等于3600S,则判断LSA age的差值,如果大于900S(15分钟)则认为LSA age小的最新,如果小于900S则认为相同;
5.如果上述条件都一样的话,则认为这两条LSA是相同的,将本地的LSA保留。
Router LSA
- Link State ID:是指始发路由器的路由器ID。(这里的Link State ID是指LSA头部的该 字段)
- Flags
- V:设置为1时,说明始发路由器是一条或者多条具有完全邻接关系的虚链路的一 个端点。
- E:当始发路由器是一个ASBR路由器时,置为1。
- B:当始发路由器是一个ABR路由器时,置为1。
- Number of links:表明一个LSA所描述的路由器链路数量。
- Link Type
- 值为1表示为点到点网络,常见的PPP链路需要使用点到点网络描述。
- 值为2表示连接一个transit网络,有至少两台路由器的广播型网段或NBMA网段就 是一种Transit网段。
- 值为3表示连接stubnet网络,一般该网络上不存在邻居关系,如只有一个出口的 以太网或回环接口。(接口的网络地址和掩码)
- 值为4表示虚链路。
- Link ID
- Link Type为1时该值表示邻居路由器的路由器ID。
- Link Type为2时该值表示DR路由器的接口的IP地址。
- Link Type为3时该值表示IP网络或子网地址。
- Link Type为4时该值表示虚链接邻居路由器的路由器ID。
- Link Data
- Link Type为1时该值表示和网络相连的始发路由器接口的IP地址。
- Link Type为2时该值表示和网络相连的始发路由器接口的IP地址。
- Link Type为3时该值表示网络的子网掩码。
- Link Type为4时该值表示始发路由器的虚链路接口的IP地址。
- ToS:暂不支持。
- Metric:是指一条链路或接口的代价。
Router LSA描述TransNet
唯一标识一条lsa:Ls Type、Link State ID、Advertising Router
由Network LSA完整描述网段信息
报文示例:
R3用于描述G0/0/0口用的是router lsa中的stubnet,
Link ID: 192.168.10.0
Data : 255.255.255.0
Link Type: StubNet
Metric : 1
Priority : Low
环回口也用stubnet描述, Priority : media
- Router-LSA的重要字段含义总结:
Links Type | 网络类型 | Link ID | Link Data |
1 | 点到点网络 | 邻居路由器的Router ID | 和网络相连的始发路由器接口的IP地址 |
2 | transit网络 | DR路由器的接口的IP地址 | 和网络相连的始发路由器接口的IP地址 |
3 | stubnet网络 | IP网络或子网地址 | 网络的子网掩码 |
4 | 虚链接 | 虚链接邻居路由器的Router ID | 始发路由器的虚链路接口的IP地址 |
Network LSA
由DR产生
- Link State ID:是指DR路由器的接口地址。(这里的Link State ID是指LSA头部的该字段)
- Network Mask:指定这个网络上使用的地址或者子网的掩码。
- Attached router:列出该多路访问网络上与DR形成完全邻接关系且包括DR本身的所有路由器的路由器ID。
Network LSA描述MA网络
报文示例:
Summary LSA
- Type3和Type4的LSA有相同的格式,它们都是由ABR产生。
- Link State ID
- 对于3类LSA来说,表示所通告的网络或子网的IP地址。
- 对于4类LSA来说表示所通告的ASBR路由器的路由器ID。
- Network Mask
- 对于3类LSA来说,表示所通告的网络的子网掩码。
- 对于4类LSA来说,该字段没有实际意义,一般置为0.0.0.0。
- Metric:始发路由器到目的地址的路由的代价。
- TOS:服务类型
- TOS metric:和指定TOS值相关联的度量
- 通告缺省路由时,Link State ID和Network Mask都设置为0.0.0.0。
报文示例:
AS-external-LSA(Type5)
- Link State ID:表示所通告的网络或子网的IP地址。
通告给除stub,nssa区域的所有区域
- Network Mask:指所通告的网络的子网掩码。
- E:用来指定这条路由使用的外部度量的类型。
- 如果该E bit设置为1,那么度量类型就是E2;
- 如果该E bit设置为0,那么度量类型就是E1。
- Metric:指路由的代价。由ASBR设定。
- Forwarding Address:是指到达所通告的目的地的数据包应该被转发到的地址。如果转发地址是0.0.0.0,那么数据包将被转发到始发ASBR上。
FA是Forwarding Address的简写。FA是ASBR通告的TYPE 5 LSA中的字段,它的作用是告诉OSPF域内的路由器如何能够更快捷地到达LSA 5所通告路由的下一跳地址。以免OSPF内部路由器在广播网络上以ASBR为下一跳,再由ASBR自己转发到正确的下一跳,而产生额外的路由。
5类LSA FA字段可以为全0或者非0两种选择,有以下几个规则:
1、当与引入路由的下一跳关联(互连)的接口没有启动OSPF时,FA设置为0;
2、当下列所有条件均满足的情况下,TYPE 5 LSA中FA字段设置为非0:
1、在ASBR上,与引入外部路由下一跳关联的接口启动了OSPF,即位于Network
命令范围内。
2、在ASBR上,与引入外部路由下一跳关联的接口不能配置被动接口;
//前两个规则是确保LSA能够被通告。
3、在ASBR上,与引入外部路由下一跳关联的接口配置的OSPF网络类型不能是P2P或P2MP。(确保网络类型是Broadcast或NBMA的共享网络。)
在满足以上条件后,5类LSA的转发地址为连接外部路由下一跳的接口IP
FA是如何影响OSPF的路由选择的?
1、计算外部路由时,首先检查通告TYPE 5 LSA的ASBR是否存在,否则忽略该LSA;OSPF路由器收到外部路由时候,先看这条五类LSA是否携带FA,如果FA地址位非0则会根据FA地址进行迭代查询,如果可达则该五类LSA携带的路由可以加表,如果不可达则不加路由表。
2、检查TYPE 5 LSA的FA地址是否为0。如为0,说明路由必须经过ASBR转发,那么优选到ASBR metric最短的路径。当有多个最短路径时,优选从较大area ID学习到的。
3、如果FA非0,那么优选到FA地址 metric最短的路径。
- External Route Tag:标记外部路由。
示例:
NSSA LSA(Type7)
NSSA(no so stubby area)是一类特殊区域,可以在其中部署ASBR,引入外部路由。同时不会学习来自OSPF网络其他区域的外部路由
NSSA区域连接着骨干区域,其区域边界路由器ABR,同时也是ASBR.
NSSA区域边界路由器ABR的特性:
传递区域间路由;ABR执行7/5翻译;向NSSA区域通告LSA7的默认路由;如果区域是Totally NSSA,ABR也可以向NSSA产生LSA3默认路由
LSA7的作用:
用于通告外部引入的路由信息;由ASBR产生,扩散范围仅限于NSSA区域
NSSA的区域边界路由器ABR,执行7/5操作;LSA4/LSA5不会流入NSSA区域
LSA7的FA一定要是非0,用于区域间选路
FA地址使用场景
LSA7中的FA地址:
1.与LSA5的FA内容上的区别
LSA5的FA可以是0和非0两种情况
FA=0的七类LSA的外部路由不会被通告到骨干区域
FA!=0,并且满足五类中FA的四条规则,FA是ASBR上外部路由的下一跳地址
FA!=0,不满足某条规则,FA是ASBR上某个接口的IP地址,优选环回接口地址,如果没有环回接口,则使用物理接口地址
LSA5和LSA7对比:
两者具有相同的格式,包括外部路由及掩码、Forwarding-Address Tag、Cost-Type及Cost
不同:
LSA7仅在NSSA区域里泛洪;
LSA7的FA为非0;如果为0,则不会被ABR翻译成LSA5
外部路由在NSSA区域里以LSA7传递,在其他区域以LSA5传递,ABR负责做7/5翻译
LSA7选项位P-bit用于通告翻译路由器该条Type7 LSA是否需要翻译
缺省情况下NSSA区域内Router ID最大的区域边界路由器作为转换路由器
只有P-bit置位并且FA!=0的LSA7 才能被转换成LSA5
在ABR上引入外部路由,产生的Type7LSA不会P-bit置位,所以不会通告到区域0
SPF算法举例
结果验证
OSPF区域间路由的计算过程:
主要通过3类LSA进行计算,三类LSA内容如下:
Network-Summary-LSA(三类LSA)中主要包括以下内容:
Ls id:目的网段地址。
Adv rtr:ABR的Router ID。
Net mask:目的网段的网络掩码。
Metric:ABR到达目的网段的开销值。
实验,如下图所示:
R2在区域1中,R1作为ABR。当R2收到了三类LSA,查具体的内容:
当R2得到了R1发送的3类LSA,可以看一下里面有什么:有与R1相连的192.168.3.0网段和来自区域2的192.168.4.0网段。
由于三类LSA本来就是路由信息,可以作为叶子信息直接挂在ABR(R1)上,具体的cost值等于ABR上三类LSA携带的cost值加上R1到R2使用一类和二类LSA计算的COST值。
同时,3类LSA路由的最初下一跳为ABR(R1),通过区域内路由计算如何到达ABR。
所以在OSPF在区域中是链路状态计算,区域间其实更像距离矢量的路由协议。因此,区域间的路由可能会出现环路,所以三类LSA的计算是需要遵循一点的规则的,也被称为水平分割原理(四类LSA同样遵守)。
OSPF防环
处于区域边界路由器可能有多种情形:
处于多个非骨干区域之间,比如处于Area 1和Area 2之间,比如下图中的R5,并不是ABR。
处于骨干区域和非骨干区域之间,但在骨干区域里没有邻居,比如ABR在Area0有接口,但没有邻居,如图中的AR3,并不是真正的ABR。
处于骨干区域和非骨干区域之间,且在骨干区域里有邻居,这才是真正意义上的ABR,比如图中的AR4
OSPF区域外路由的计算过程与FA值实验
OSPF区域路由的计算主要是通过5类和4类LSA完成的。其中5类LSA提供了目的网络地址,而4类LSA则提供了下一跳地址。5类LSA可以在整个区域中泛洪,不遵循ABR的泛洪规则(水平分割),同时不需要进入Vlink,具体如何保证没有环路,则是通过1类、2类、3类和4类LSA完成。如果设备与ASBR不在同一区域,依靠4类LSA定位ASBR位置;如果有FA地址,在一些情况下通过三类LSA找到ASBR地址(在NSSA区域路由计算中说明);如果与设备与ASBR在同一个区域,则通过1类、2类LSA而非4类LSA辅助找到ASBR的具体位置。
区域外路由计算实验:
实验思路:
在R5上将静态路由引入到ospf中。
具体步骤:
在R1上查看5类LSA:
从5类LSA中我们可以得到的信息:LS id为外部的网络地址6.6.6.6,并且还带有相应的子网掩码,metric值始终为1,因为我们可以看出这是type2类型的路由条目(不在内部累加,外部metric值可以进行修改);如果是type1类LSA,metric值会在内部叠加。FA值我们之后进行相应的讨论,并且还有相应的tag字段。同时可以发现,5类LSA只知道发布者的RID,不知道如何到达此路由器。
补充:
Type 1外部路由:当外部路由的开销与自治系统内部的路由开销相当,并且和OSPF自身路由的开销具有可比性时,可以认为这类路由的可信程度较高,将其配置成Type1 External。
Type 2外部路由:当ASBR到自治系统之外的开销远远大于在自治系统之内到达ASBR的开销时,可以认为这类路由的可信程度较低,将其配置成Type2 External。
这时候就需要四类LSA进行辅助了,在R1上查看4类LSA:
可以看到两条4类LSA,分别是R1和R4两台ABR产生的。LS ID就是5.5.5.5,说明ASBR就是5.5.5.5,adv rtr是R1和R4,含义就是如果想去外部路由,那么将信息发给R1(R2和R3通过R1到达外部路由)和R4即可,通过1类,2类LSA就知道如何到达R1和R4,这样就可以计算出相应的路由条目了。
这里我们需要注意,一个路由器只知道本区域中的其他设备的RID,并不知道其他区域中的RID,因为无论是3类还是5类都没有带有RID信息,只带有目的的网段信息。所以需要四类LSA进行相应的辅助。
5类LSA中FA地址:
五类LSA的FA地址在大部分情况下都是0.0.0.0,当满足下面三个条件时候则会出现非零的情况:
重分发条目下一跳的接口在OSPF路由域中(也就是对应接口开启了OSPF)。
连接外部路由的接口不是被动接口(不接收也不发送ospf报文)。
连接外部路由的接口必须是MA环境(NBMA、Brocast)。
将R5的e0/0/0口宣告进ospf中:
可见,FA地址变为192.168.5.2,5类LSA的转发地址为连接外部路由下一跳的接口IP。
OSPF路由器收到外部路由时候,先看这条五类LSA是否携带FA,如果FA地址位非0则会根据FA地址进行迭代查询,如果可达则该五类LSA携带的路由可以加表,如果不可达则不加路由表。以七类LSA FA地址的情况为例。
5类LSA的FA值实验:
实验背景:
在R10上将RIP重分发进入OSPF,并在R10上查看相应的现象。
实验分析:
正常情况下,如果没有FA位的话,R8上回环口的路由条目只能通过RIP重分发进入OSPF,OSPF中五类LSA的下一跳为R10的g0/0/0接口(ASBR),那么就会产生次优路径,没有直接选择同一网段的R8。
将R8的G0/0/0接口既通告进入了OSPF也通告进入了RIP,并且没有开启为被动接口,为broadcast环境,在满足以上条件后,5类LSA的转发地址为连接外部路由下一跳的接口IP。这时,FA位就变为了R8g0/0/0接口的IP地址(R2上学习到RIP路由的下一跳)。在R1收到R2发送的外部条目的时候,发现FA值不为0,为R8g0/0/0接口的IP地址,和自己同一网段,避免了次优路径。
OSPF NSSA区域路由的计算过程与FA值实验
概述:
NSSA区域中不存在5类LSA,但是为了描述区域外的路由条目,则用7类LSA代替5类LSA。
7类LSA仅在NSSA区域中存在,当7类LSA离开NSSA区域进入普通区域时,可以转化为5类LSA。
NSSA-LSA报文格式和5类LSA相同:
其中,option字段中,P位,只用在NSSA LSA。该位将告诉NSSA区域的ABR路由器将7类LSA转换为5类LSA。如图:
例如10.1.1.0/24的条目在R4重分发入NSSA区域,P为1,当R2和R3中RID大的ABR会进行7转5。重点是不带有P字段的情况,如果在R3上有一个环回口,重分发进入ospf,那么P位就为0,因为他可以通过R3直接向区域0里面进行5类LSA的透传,当然同时也会向NSSA区域中透传,只是没有必要再进行7转5再次发区域0中了。可以理解为自己为ABR再重分发路由条目就不会进行7转5。
实验:NSSA-LSA转化过程
实验思路:
将将静态路由引入OSPF的区域2(NSSA区域)。
注意:先配置nssa,再引入静态路由。如果先引入静态路由,就会产生五类LSA,泛洪到整个区域,此时就算配置了nssa,由于LSA还未老化,故LSDB中就会有两条外部路由。
实验步骤:
区域2为完全NSSA区域,R5的g0/0/1没有开启OSPF。在R5上查看相应的LSA信息:
可以看到有两条由R4发送的默认路由,一条为7类,1条为3类,因为区域间路由优于区域外的路由。实际上使用的是三类区域间的路由,可以查看路由表进行验证:
现在主要看7类LSA怎么转换为5类LSA进入骨干区域中,在R4上查看相应的LSA信息:
可以发现R4这个ABR将7类LSA转换为了5类的LSA,并且将advRouter修改为了自己的RID。继续在R4上查看详细的7类LSA信息:
再查看详细的5类LSA进行相应的比较:
除了type字段其他都相同,在这里我们会发现FA值为192.168.4.2,但是在非nssa引入外部路由的5类LSA中在目前的情况下是没有的FA值的,这里就引出了FA值在5类LSA和7类LSA中存在的差别:
相同点在于:
七类LSA中的FA地址,当满足五类LSA的三条规则的时候:
重分发条目下一跳的接口在OSPF路由域中(也就是对应接口开启了OSPF)。
连接外部路由的接口不是被动接口(不接收也不发送ospf报文)。
连接外部路由的接口必须是MA环境(NBMA、Brocast)。
FA就是ASBR路由表中该路由的下一跳地址(对于这一点和五类LSA完全相同)。
不同的地方在于:
7类LSA是一定要带FA的,可以通过命令强制使其不带,但会出现次优和环路的问题
当不满足5类LSA中生成FA的三条规则的时候,则FA地址设置为该ASBR上某个OSPF路由域内的网段(例如loopback0接口)的接口IP地址(注意这些网段是必须被通告进入ospf的),有多个网段时选IP地址最大者,并且回环口优先于物理接口。
如果在R4上有一个环回口,重分发进入ospf,那么P位就为0,因为他可以通过R4直接向区域0里面进行5类LSA的透传,当然同时也会向NSSA区域中透传,只是没有必要再进行7转5再次发区域0中了。可以理解为自己为ABR再重分发路由条目就不会进行7转5。如下图,4.4.4.4仍为七类LSA,但p没有置位。
实验:NSSA负载分担解决次优路径问题
分析次优路径产生的原因:
次优路径是由于7转5只有在一个设备上进行,如果没有FA值就会导致其他区域的流量始终会通过7转5这个路由器转发进入NSSA区域,这样可能就会错过更好的ABR进行转发。而普通5类转发则是每个ABR都会转发,所以自然而然会有最优的路径供选择,所以FA值可以为0。
但是我们将FA值设置为ASBR上的接口IP地址,并且是OSPF区域中的(保证可达)。当其他区域的设备收到了对应的外部路由,那么就用ASBR上的可达接口作为下一跳进行迭代累加cost值,这样保证迭代出来的就是最优的路径了。
总的来说FA也就是起了一个重定向的作用,重新定义下一跳,然后避免次优路径的产生。否则下一跳就是7转5的路由器的对应接口地址,自然可能产生次优路径。
注意:
OSPF区域去往外部AS的的时候,一条路由的时候,内部选路永远是看内部的cost值,也就是到最初的下一跳的cost值。而外部cost值的用处是比较两条7类或者5类LSA的tpye2类的路由条目时有作用。
具体步骤:
将R3到达5.5.5.5的静态路由引入OSPF环境中,R3的g0/0/0不需要通过进入OSPF,然后我们在R4上查看:
发现FA只有R3上回环口的IP地址,这样去往外部路由的下一跳就是通过3.3.3.3进行迭代,因为没有修改链路的cost值,所以会出现负载均衡的场景:
当我们将R2上e0/0/1接口的cost值修改为10时,再观察R4产生的路由条目:
现在的路径只有一条了,就是通过R1去往外部网络,这就是FA值避免次优路径的解决方案。
为了进行对比,如果没有FA地址的话会发送什么错误,可以在7转5的时候可以将FA地址去掉,在本题目上是在R2上进行的7转5,所以们在R2上开启抑制7转5 的功能:
[R2-ospf-1-area-0.0.0.1]nssa suppress-forwarding-address //在相应nssa区域中配置
然后我们继续在R3上查看OSPF的5类LSA:FA值为0了
既然FA值为0,所以R4以为ASBR就是R2,通向外网的时候直接发送R2,我们查看相应的条目:
这个时候,可以发现产生了次优路径。
实验:FA解决NSSA区域环路的问题
拓扑描述:
区域1为NSSA区域,各链路的cost如图所示
在R1上把1.1.1.1引入OSPF,此时R1会产生关于1.1.1.1网段的7类LSA。
R2与R3作为Area1的ABR,都有责任进行7转5的动作,但OSPF规定默认情况下只有R-ID大的才能进行7转5,即R3会进行7转5的动作,由R3产生关于1.1.1.1的5类lsa,并在Area0中泛洪。R4从Area 0中收到此5lsa,并泛洪给R2。
我们来分析R4如何去往1.1.1.1,此时会有两种情况:
情况一:R4收到的这条5类LSA中FA地址为0.0.0.0。根据OSPF外部路由的选路规则,当5类LSA中FA地址为0时,则计算去往ASBR的路径。
此时产生此条5类LSA的是R3,所以R3为ASBR,R4可直接通过Area 0到达ASBR(R3)。
R3是通过Area 1学习到的1.1.1.1网段,所以R3可通过Area1去往1.1.1.1,即把数据包发送给R2。
此时R2可通过两条LSA学习到1.1.1.1的路由,
第一条:R1产生的7类LSA。类型为Type2,外部Cost为1(外部cost默认都为1),内部cost为10(内部cost,本路由器到ASBR的cost)
第二条:R3产生的5类LSA,由R4泛洪给R2(参考上面第二步),类型为Type 2,外部Cost为1,内部Cost为2(R2-R4-R3的cost)
R2执行选路规则,两条LSA同为Type2类型,先对比外部cost值,都为1,然后对比内部cost值,第一条为10,第二条为2,所以R2会优选第二条(R3产生的5类lsa),即会把数据包转发给R4。
环路形成:R4-R3-R2-R4
当FA地址不为0时,此时FA地址为192.168.1.1。R4是通过3类LSA学习到的(192.168.1.1位于Area 1中,R2与R3都为ABR,都会产生关于192.168.1.1网段的3类lsa),R4此时其实可以收到两条192.168.1.1的3类LSA,一条R2产生,一条R3产生,通过计算cost后发现,选择R2去往10.1.12.1更近,所以R4会把数据包转发给R2。
R2同样执行选路计算,计算去往FA地址192.168.1.1的路径,此地址是R2的一个直连路由,所以R2会把数据包转发。此时全程的路径为:R4-R2-R1,解决了环路问题。