一 路由基础
1 路由器的工作内容:
- 路由器知道目的地址,查看数据包
- 发现到达目标地址的可能路由
- 选择最佳路由(路由表)
- 维护路由信息
2 路由表里的路由条目:
- 路由获取渠道(静态,协议)
- 目标网络号
- 通过本路由器哪个接口出去或者下一跳扔给谁(下一跳路由器的接口IP)
3 路由来源:
- 直连路由:直接连到路由器上的网络,根据直连接口的信息,提取到路由信息;
- 静态路由:管理员手工构建路由表;
- 动态路由:路由器之间动态学习到的路由表;
4 网关:
就是的三层设备的接口的IP地址,可以是路由器、或三层交换机、防火墙。
默认网关,查不到的走默认网关
二 距离矢量路由选择协议
1 距离矢量
- 自身与目的网络之间的距离(跳数)
- 应该往哪个方向或使用哪个接口转发数据包
- 会周期性广播整张路由表
2 路由器工作
- 路由器初始启动:路由器直连网段,通过接口配置提取出路由,直连网络写入路由表
- 交换路由表时,根据收到的表的接口,决定此路由的出接口
- 收敛完成后,路由表包含相同的网络信息,收敛完后才正常工作
3 metric与AD
- metric度量值
一路由器从同种动态路由协议,但不同方向铉锡到去往同一目的地的路由,比较metric,metric不同,可分为最优/次优;metric相同,可负载均衡。
- 管理距离AD
一台路由器,当它从不同的动态路由选择协议中,学习到去往同一个目的地的路由,比较AD值,取小的,将路由装入路由表;另一条路径在优选路径down时,才出现使用。
4 依照传闻的更新(广播,更新路由表)
- 逐跳更新
- 可能产生环路
- 消除路由环路的机制:定义最大度量以防止计数至无穷大,水平分割,抑制计时器,路由毒化或毒性反转,触发更新
- 定义最大跳数(比如16跳为不可达),同时也限制了网络范围;
- 水平分割,路由器从某个接口接收到的更新信息不允许再从这个接口发回去。
- 抑制计时器:一条路由信息无效之后,一段时间内这条路由都处于抑制状态,即在一定时间内接收但忽略关于同一目的地址的路由更新。抑制计时器超时后,才会选择另一条路由。
如果,路由器从一个网段上得知一条路径失效,然后,立即在另一个网段上得知这个路由有效。这个有效的信息往往是不正确的,抑制计时避免了这个问题,而且,当一条链路频繁起停时,抑制计时减少了路由的浮动,增加了网络的稳定性。
-
路由中毒:是指在路由信息在路由表中失效时,先将度量值变为无穷大,而不是马上从路由表中删掉这条路由信息。(这句话要理解,如RIP协议中,其度量值变为16,意味着路由不可达)再将其信息发布出去,这样相邻的路由器就得知这条路由己无效了。
毒性反转与路由中毒概念是不一样的,它是指收到路由中毒消息的路由器,不遵守水平分割原则将中毒消息转发给所有的相邻路由器,也包括发送中毒信息的源路由器,也就是通告相邻路由器这条路由信息己失效了。主要目的是达到快速收敛的目的。
- 触发更新,若网络中没有变化,则按通常的30秒间隔发送更新信息。但若有变化,路由器就立即发送其新的路由表。这个过程叫做触发更新。
5 RIP
- 初始状态:路由器开启RIP进程,宣告相应接口,则设备就会从相关接口发送和接收RIP报文。
- 构建路由表:路由器依据收到的RIP报文构建自己的路由表项
- 维护路由表:路由器每隔30秒发送更新报文,同时接收相邻路由器发送的更新报文以维护路由表项。
- 老化路由表项:路由器为将自己构建的路由表项启动180秒的定时器。180秒内,如果路由器收到更新报文,则重置自己的更新定时器和老化定时器。
- 垃圾收集表项:如果180秒过后,路由器没有收到相应路由表项的更新,则启动时长为120秒的垃圾收集定时器,同时将该路由表项的度量置为16。
- 删除路由表项:如果120秒之后,路由器仍然没有收到相应路由表项的更新,则路由器将该表项删除。
三 EIGRP
1 三张表:邻居表(物理上直连且都运行EIGRP,hello报文交换),拓扑表,路由表
2 metric: 带宽,延时,可靠性,MTU,负载
3 DUAL算法:用于计算最佳无环路径与备用路径
- 特点:无环拓扑;可立即使用的无环备用路径;快速收敛;低带宽利用率(通过限定更新实现)
- 后继路由器successors: 被实际选中作为到达某一个目的地所使用的吓一跳路由器,该条路由保存在路由表中。
- 可行距离(feasible distance):计算出通向目的网络的最小度量值(路由表里的)
- 可行后继(feasible successor): 是一条备份路由,只保存在拓扑表中。要成为可行后继,下一跳路由器前往某个特定网络的AD值必须比当前后继的FD小(备用路由器到目标网络的代价比原来的路由的代价小)。
- 通告距离(advertise distance)即为EIGRP邻居通向相同目的网络的它自己的可行距离。第四条可解释为,当邻居通向一个网络的通告距离比本地路由器通向同一个目的网络的可行距离短时。
6. 三张表
- EIGRP会通过以下途径生成并更新拓扑表:本地注入的网络(加入EIGRP的直连接口、本地重分布的路由).以及接收到的EIGRP更新包、査询包、响应包、SIA査询包和SIA响应包中通告的网络。所有通过EIGRP学习到的网络都会被放入拓扑表中。
-
拓扑表中集中存储了EIGRP进程的数据。拓扑表这个名称可能并不特別贴切.因为EIGRP毕竟还是一项距离矢量路由协议.它本身对网络的拓扑一无所知。尽管如此.拓扑表是EIGRP储存所有路由信息的地方.其中包含以下这些内容:•每个己知目的地网络的前缀(地址/网络掩码);•目的地网络的可行距离;•每个通告了目的地网络的邻居路由器地址.以及去往这个邻居的出接口;•每个邻居通告的目的地网络度量值.以及通过这个邻居去往目的地网络的路径度量值;•目的地网络的状态;•网络的其他信息(各种内部标记、网络类型和源等)。
Delay is supposed to be a calculation of the amount of time it takes a bit to be transmitted to an adjacent neighbor.
But in reality it is simply a constant value based upon the interface bandwidth. However, since this factor is additive,
it essentially works as a hop count. Or maybe we should say a smart hop count, since it also factors each hop’s bandwidth.
四 OSPF 开放最短路径优先
1 链路状态
- 链路:路由器接口
- 状态:链路状态是对接口及接口与相邻路由器的关系的描述。
- 例如接口的信息包括接口的IP地址、掩码、所连接的网络的类型、连接的邻居等。所有这些链路状态的集合形成链路状态数据库。
2 metric
- 每个路由器都把自己当作根,并且给予累积成本(cost值)来计算到达目的地的最短路径。
- cost=参考带宽(10^8)/接口带宽(b/s);
- cost计算规则:METRIC是路由条目传递方向,经过所有路由器的入接口的COST总和。
- OSPF是接口敏感形协议;
3 基本概念
OSPF支持的网络类型
OSPF根据链路层协议类型,将网络分为所列四种类型。
网络类型 |
含义 |
---|---|
广播类型(Broadcast) |
当链路层协议是Ethernet、FDDI时,缺省情况下,OSPF认为网络类型是Broadcast。 在该类型的网络中:
|
NBMA类型(Non-Broadcast Multi-Access) |
当链路层协议是帧中继、X.25时,缺省情况下,OSPF认为网络类型是NBMA。 在该类型的网络中,以单播形式发送协议报文(Hello报文、DD报文、LSR报文、LSU报文、LSAck报文)。 |
点到多点P2MP类型(Point-to-Multipoint) |
没有一种链路层协议会被缺省的认为是Point-to-Multipoint类型。点到多点必须是由其他的网络类型强制更改的。常用做法是将非全连通的NBMA改为点到多点的网络。 在该类型的网络中:
|
点到点P2P类型(point-to-point) |
当链路层协议是PPP、HDLC和LAPB时,缺省情况下,OSPF认为网络类型是P2P。 在该类型的网络中,以组播形式(224.0.0.5)发送协议报文(Hello报文、DD报文、LSR报文、LSU报文、LSAck报文)。 |
报文类型
报文类型 |
报文作用 |
---|---|
Hello报文 |
周期性发送,用来发现和维持OSPF邻居关系。 |
DD报文(Database Description packet) |
描述本地LSDB(Link State Database)的摘要信息,用于两台设备进行数据库同步。 |
LSR报文(Link State Request packet) |
用于向对方请求所需的LSA(链路状态通告)。 设备只有在OSPF邻居双方成功交换DD报文后才会向对方发出LSR报文。 |
LSU报文(Link State Update packet) |
用于向对方发送其所需要的LSA。 |
LSAck报文(Link State Acknowledgment packet) |
用来对收到的LSA进行确认。 |
区域
- OSPF 基于两层的区域层次结构,其中包含骨干区域和非骨干区域。每个区域都有自己的拓扑数据库,该数据库在区域外面不可见。
- 属于多个区域的路由器(ABR)有多个拓扑数据库 —— 它连接的每个区域一个。
- 所有区域都必须与骨干区域直接相连或通过虚链路连接到骨干区域。骨干区域必须是连续的,而非骨干区域可以是不连续的。
虚链路
- 但是在实际网络中由于网络环境合并、网络设计部合理等造成了骨干区域不连续或非骨干区域没有和骨干区域相连的问题。如果更改OSPF区域内的所有路由器的配置,工作量较大,还会造成短时间的断网情况,这时,就需要使用虚链路连接。
- 如果在现实工作环境中配置了一条虚链路,管路员应该仅仅把它用来修复无法避免的网络拓补问题的一个临时手段。
- 虚链路的“逻辑通道”是指两台ABR之间的多台运行OSPF的路由器只是起到一个转发报文的作用(由于协议报文的目的地址不是这些路由器,所以这些报文对于它们是透明的,只是当作普通的IP报文来转发),两台ABR之间直接传递路由信息。这里的路由信息是指由ABR生成的type3的LSA,区域内的路由器同步方式没有因此改变。
- 虚链路实际上就是一个逻辑通道,数据包可以通过选择最优的路由路径从一端到达另一端。在配置虚链路的时候,需要注意的是:
- 虚链路必须配置在两台ABR路由器之间;
- 虚链路经过的区域必须拥有全部的路由选择信息,这样的区域又称为传送区域;
- 传送区域不能使一个末梢区域(包括NSSA区域)必须是一个标准区域;
- 虚链路的稳定性取决于其经过区域的稳定性;
- 虚链路有助于提供逻辑冗余。原文链接
路由器类型
路由器类型 |
含义 |
---|---|
区域内路由器(Internal Router) |
该类设备的所有接口都属于同一个OSPF区域。 |
区域边界路由器ABR(Area Border Router) |
该类设备可以同时属于两个以上的区域,但其中一个必须是骨干区域。 ABR用来连接骨干区域和非骨干区域,它与骨干区域之间既可以是物理连接,也可以是逻辑上的连接。 |
骨干路由器(Backbone Router) |
该类设备至少有一个接口属于骨干区域。 所有的ABR和位于Area0的内部设备都是骨干路由器。 |
自治系统边界路由器ASBR(AS Boundary Router) |
与其他AS交换路由信息的设备称为ASBR。 ASBR并不一定位于AS的边界,它可能是区域内设备,也可能是ABR。只要一台OSPF设备引入了外部路由的信息,它就成为ASBR。 |
路由类型
AS区域内和区域间路由描述的是AS内部的网络结构,AS外部路由则描述了应该如何选择到AS以外目的地址的路由。OSPF将引入的AS外部路由分为Type1和Type2两类。
下表按优先级从高到低顺序列出了路由类型。
路由类型 |
含义 |
---|---|
Intra Area |
区域内路由。 |
Inter Area |
区域间路由。 |
第一类外部路由(Type1 External) |
第一类外部路由是指接收的是IGP(Interior Gateway Protocol,内部网关协议)路由(例如静态路由和RIP路由)。这类路由的可信程度高一些,所以计算出的外部路由的开销与自治系统内部的路由开销是相当的,并且和OSPF自身路由的开销具有可比性。 到第一类外部路由的开销=本设备到相应的ASBR的开销+ASBR到该路由目的地址的开销。 |
第二类外部路由(Type2 External) |
第二类外部路由是指接收的是EGP(Exterior Gateway Protocol,外部网关协议)路由。这类路由的可信度比较低,所以OSPF协议认为从ASBR到自治系统之外的开销远远大于在自治系统之内到达ASBR的开销。 所以,OSPF计算路由开销时只考虑ASBR到自治系统之外的开销,即到第二类外部路由的开销=ASBR到该路由目的地址的开销。如果计算出开销值相等的两条路由,再考虑本路由器到相应的ASBR的开销。 |
区域类型
区域类型 |
作用 |
---|---|
普通区域 |
缺省情况下,OSPF区域被定义为普通区域。普通区域包括标准区域和骨干区域。
|
STUB区域 |
不允许发布自治系统外部路由,,如来自非 OSPF 路由器的路由(也就是该区域不接受 LSA 4 和 LSA 5)。只允许发布区域内路由和区域间的路由。 在STUB区域中,路由器的路由表规模和路由信息传递的数量都会大大减少。 为了保证到自治系统外的路由可达,由该区域的ABR发布Type3缺省路由(用 0.0.0.0 表示)传播到区域内,所有到自治系统外部的路由都必须通过ABR才能发布。末节区域不能包含 ASBR(除非 ABR 也是 ASBR)。 |
Totally STUB区域 |
不允许发布自治系统外部路由和区域间的路由,(也就是该区域不接受 LSA 3 / 4 / 5),只允许发布区域内路由。 在Totally STUB区域中,路由器的路由表规模和路由信息传递的数量都会大大减少。 为了保证到自治系统外和其他区域的路由可达,由该区域的ABR发布Type3缺省路由传播到区域内,所有到自治系统外部和其他区域的路由都必须通过ABR才能发布。绝对末节区域中不能有 ASBR(除非 ABR 也是 ASBR)。 |
NSSA区域(Not-So-Stubby Area) |
NSSA区域允许引入自治系统外部路由,由ASBR发布Type7 LSA通告给本区域,这些Type7 LSA在ABR上转换成Type5 LSA,并且泛洪到整个OSPF域中。 NSSA区域同时保留自治系统内的STUB区域的特征。(也就是该区域不接受 LSA 4 和 LSA 5,但有 LSA 7) 该区域的ABR发布Type7缺省路由传播到区域内,所有域间路由都必须通过ABR才能发布。 |
Totally NSSA区域 |
Totally NSSA区域允许引入自治系统外部路由,由ASBR发布Type7 LSA通告给本区域,这些Type7 LSA在ABR上转换成Type5 LSA,并且泛洪到整个OSPF域中。 Totally NSSA区域同时保留自治系统内的Totally STUB Area区域的特征。(也就是该区域不接受 LSA 3 / 4 / 5,但有 LSA 7)。它使用默认路由前往区域外的网络。 该区域的ABR发布Type7缺省路由传播到区域内,所有域间路由都必须通过ABR才能发布。 |
STUB区域
STUB区域是一些特定的区域,STUB区域的ABR不传播它们接收到的自治系统外部路由,在这些区域中路由器的路由表规模以及路由信息传递的数量都会大大减少。
STUB区域是一种可选的配置属性,但并不是每个区域都符合配置的条件。通常来说,STUB区域位于自治系统的边界,是那些只有一个ABR的非骨干区域。
为保证到自治系统外的路由依旧可达,该区域的ABR将生成一条缺省路由,并发布给STUB区域中的其他非ABR路由器。
配置STUB区域时需要注意下列几点:
- 骨干区域不能配置成STUB区域。
- 如果要将一个区域配置成STUB区域,则该区域中的所有路由器都要配置STUB区域属性。
- STUB区域内不能存在ASBR,即自治系统外部的路由不能在本区域内传播。
- 虚连接不能穿过STUB区域。
NSSA区域
NSSA(Not-So-Stubby Area)区域是OSPF特殊的区域类型。NSSA区域与STUB区域有许多相似的地方,两者都不传播来自OSPF网络其它区域的外部路由。差别在于STUB区域是不能引入外部路由,NSSA区域能够将自治域外部路由引入并传播到整个OSPF自治域中。
当区域配置为NSSA区域后,为保证到自治系统外的路由可达,NSSA区域的ABR将生成一条缺省路由,并发布给NSSA区域中的其他路由器。
配置NSSA区域时需要注意下列几点:
- 骨干区域不能配置成NSSA区域。
- 如果要将一个区域配置成NSSA区域,则该区域中的所有路由器都要配置NSSA区域属性。
- 虚连接不能穿过NSSA区域。
NASS由ASBR发布Type7 LSA通告给本区域,这些Type7 LSA在ABR上转换成Type5 LSA,并且泛洪到整个OSPF域中
因为7类LSA只存在于NSSA与totally NSSA区域中存在,主要是为了使这两个特殊区域可以支持ASBR得存在来引入外部路由,而又 因为NSSA与totally NSSA中不能存在5类LSA ,
因此定义出7类LSA的存在。那么这就存在一个问题,普通区域无法识别7类LSA的存在,那么其它区域怎么访问NSSA与totally NSSA区域引入的外部路由呢?这就需要 在ABR上执行7转5的动作了,
把7类LSA转换成5类LSA(因为做7转5的时候会将Adv-Router改为自身Router-id),那么普通区域就会认为转换设备是ASBR设备,
当其要访问外部网段时会找到做转换的设备来进行访问(当区域边界存在多个ABR设备时由 Router-id大的设备执行7转5的动作 ,做7转5的动作时会在5类LSA上添加转发地址防止次优路径的存在)。
OSPF缺省路由
缺省路由是指目的地址和掩码都是0的路由。当设备无精确匹配的路由时,就可以通过缺省路由进行报文转发。由于OSPF路由的分级管理,Type3缺省路由的优先级高于Type5或Type7路由。
OSPF缺省路由通常应用于下面两种情况:
- 由区域边界路由器(ABR)发布Type3缺省Summary LSA,用来指导区域内设备进行区域之间报文的转发。
- 由自治系统边界路由器(ASBR)发布Type5外部缺省ASE LSA,或者Type7外部缺省NSSA LSA,用来指导自治系统(AS)内设备进行自治系统外报文的转发。
OSPF缺省路由的发布原则如下:
- OSPF路由器只有具有对区域外的出口时,才能够发布缺省路由LSA。
- 如果OSPF路由器已经发布了缺省路由LSA,那么不再学习其它路由器发布的相同类型缺省路由。即路由计算时不再计算其它路由器发布的相同类型的缺省路由LSA,但数据库中存有对应LSA。
- 外部缺省路由的发布如果要依赖于其它路由,那么被依赖的路由不能是本OSPF路由域内的路由,即不是本进程OSPF学习到的路由。因为外部缺省路由的作用是用于指导报文的域外转发,而本OSPF路由域的路由的下一跳都指向了域内,不能满足指导报文域外转发的要求。
不同区域缺省路由发布原则如表1-8所示。
区域类型 |
作用 |
---|---|
普通区域 |
缺省情况下,普通OSPF区域内的OSPF路由器是不会产生缺省路由的,即使它有缺省路由。 当网络中缺省路由通过其他路由进程产生时,路由器必须将缺省路由通告到整个OSPF自治域中。实现方法是在ASBR上手动通过命令进行配置,产生缺省路由。配置完成后,路由器会产生一个缺省ASE LSA(Type5 LSA),并且通告到整个OSPF自治域中。 |
STUB区域 |
STUB区域不允许自治系统外部的路由(Type5 LSA)在区域内传播。 区域内的路由器必须通过ABR学到自治系统外部的路由。实现方法是ABR会自动产生一条缺省的Summary LSA(Type3 LSA)通告到整个STUB区域内。这样,到达自治系统的外部路由就可以通过ABR到达。 |
Totally STUB区域 |
Totally STUB区域既不允许自治系统外部的路由(Type5 LSA)在区域内传播,也不允许区域间路由(Type3 LSA)在区域内传播。 区域内的路由器必须通过ABR学到自治系统外部和其他区域的路由。实现方法是配置Totally STUB区域后,ABR会自动产生一条缺省的Summary LSA(Type3 LSA)通告到整个STUB区域内。这样,到达自治系统外部的路由和其他区域间的路由都可以通过ABR到达。 |
NSSA区域 |
NSSA区域允许引入通过本区域的ASBR到达的少量外部路由,但不允许其他区域的外部路由ASE LSA(Type5 LSA)在区域内传播。即到达自治系统外部的路由只能通过本区域的ASBR到达。 只配置了NSSA区域是不会自动产生缺省路由的。 此时,有两种选择:
上面两种情况的区别是:
因为缺省路由只是在本NSSA区域内泛洪,并没有泛洪到整个OSPF域中,所以本NSSA区域内的路由器在找不到路由之后可以从该NSSA的ASBR出去,但不能实现其他OSPF域的路由从这个出口出去。Type7 LSA缺省路由不会在ABR上转换成Type5 LSA缺省路由泛洪到整个OSPF域。 |
Totally NSSA区域 |
Totally NSSA区域既不允许其他区域的外部路由ASE LSA(Type5 LSA)在区域内传播,也不允许区域间路由(Type3 LSA)在区域内传播。 区域内的路由器必须通过ABR学到其他区域的路由。实现方法是配置Totally NSSA区域后,ABR会自动产生一条缺省的Type3 LSA通告到整个NSSA区域内。这样,其他区域的外部路由和区域间路由都可以通过ABR在区域内传播。 |
LSA类型
LSA类型 |
LSA作用 |
---|---|
Router-LSA(Type1) |
每个设备都会产生,描述了设备的链路状态和开销,在所属的区域内传播。 |
Network-LSA(Type2) |
由DR(Designated Router)产生,描述本网段的链路状态,在所属的区域内传播。 |
Network-summary-LSA(Type3) |
由ABR产生,描述区域内某个网段的路由,并通告给发布或接收此LSA的非Totally STUB或NSSA区域。例如:ABR同时属于Area0和Area1,Area0内存在网段10.1.1.0,Area1内存在网段11.1.1.0,ABR为Area0生成到网段11.1.1.0的Type3 LSA;ABR为Area1生成到网段10.1.1.0的Type3 LSA,并通告给发布或接收此LSA的非Totally Stub或NSSA区域。 |
ASBR-summary-LSA(Type4) |
由ABR产生,描述到ASBR的路由,通告给除ASBR所在区域的其他相关区域。 |
AS-external-LSA(Type5) |
由ASBR产生,描述到AS外部的路由,通告到所有的区域(除了STUB区域和NSSA区域)。 |
NSSA LSA(Type7) |
由ASBR产生,描述到AS外部的路由,仅在NSSA区域内传播。 |
Opaque LSA(Type9/Type10/Type11) |
Opaque LSA提供用于OSPF的扩展的通用机制。其中:
|
DR和BDR
在广播网和NBMA网络中,任意两台路由器之间都要传递路由信息。如图1-2所示,网络中有n台路由器,则需要建立n*(n-1)/2个邻接关系。这使得任何一台路由器的路由变化都会导致多次传递,浪费了带宽资源。为解决这一问题,OSPF定义了指定路由器DR和备份指定路由器BDR。通过选举产生DR(Designated Router)后,所有路由器都只将信息发送给DR,由DR将网络链路状态LSA广播出去。除DR和BDR之外的路由器(称为DR Other)之间将不再建立邻接关系,也不再交换任何路由信息,这样就减少了广播网和NBMA网络上各路由器之间邻接关系的数量。
如果DR由于某种故障而失效,则网络中的路由器必须重新选举DR,并与新的DR同步。这需要较长的时间,在这段时间内,路由的计算有可能是不正确的。为了能够缩短这个过程,OSPF提出了BDR(Backup Designated Router)的概念。BDR是对DR的一个备份,在选举DR的同时也选举出BDR,BDR也和本网段内的所有路由器建立邻接关系并交换路由信息。当DR失效后,BDR会立即成为DR。由于不需要重新选举,并且邻接关系已建立,所以这个过程非常短暂,这时还需要再重新选举出一个新的BDR,虽然一样需要较长的时间,但并不会影响路由的计算。
DR和BDR不是人为指定的,而是由本网段中所有的路由器共同选举出来的。路由器接口的DR优先级决定了该接口在选举DR、BDR时所具有的资格。本网段内DR优先级大于0的路由器都可作为“候选人”。选举中使用的“选票”就是Hello报文。每台路由器将自己选出的DR写入Hello报文中,发给网段上的其他路由器。当处于同一网段的两台路由器同时宣布自己是DR时,DR优先级高者胜出。如果优先级相等,则Router ID大者胜出。如果一台路由器的优先级为0,则它不会被选举为DR或BDR。如果网络新增一个新的路由器优先级取最大值,那么原来选出来的DR并不变动,为了网络的稳定性。
OSPF报文认证
OSPF支持报文验证功能,只有通过验证的OSPF报文才能接收,否则将不能正常建立邻居。
路由器支持两种验证方式:
- 区域验证方式
- 接口验证方式
当两种验证方式都存在时,优先使用接口验证方式。
OSPF路由聚合
路由聚合是指ABR可以将具有相同前缀的路由信息聚合到一起,只发布一条路由到其它区域。
区域间通过路由聚合,可以减少路由信息,从而减小路由表的规模,提高设备的性能。
OSPF有两种路由聚合方式:
- ABR聚合
ABR向其它区域发送路由信息时,以网段为单位生成Type3 LSA。如果该区域中存在一些连续的网段,则可以通过命令将这些连续的网段聚合成一个网段。这样ABR只发送一条聚合后的LSA,所有属于命令指定的聚合网段范围的LSA将不会再被单独发送出去。
- ASBR聚合
配置路由聚合后,如果本地设备是自治系统边界路由器ASBR,将对引入的聚合地址范围内的Type5 LSA进行聚合。当配置了NSSA区域时,还要对引入的聚合地址范围内的Type7 LSA进行聚合。
如果本地设备既是ASBR又是ABR,则对由Type7 LSA转化成的Type5 LSA进行聚合处理。
VLSM与CIDR的区别
VLSM可变长子网掩码 VLSM(Variable Length Subnet Mask 可变长子网掩码),这是一种产生不同大小子网的网络分配机制,指一个网络可以配置不同的掩码。开发可变长度子网掩码的想法就是在每个子网上保留足够的主机数的同时, 把一个网分成多个子网时有更大的灵活性。如果没有VLSM,一个子网掩码只能提供给一个网络。这样就限制了要求的子网数上的主机数。 VLSM技术对高效分配IP地址(较少浪费)以及减少路由表大小都起到非常重要的作用。但是需要注意的是使用VLSM时,所采用的路由协议必须能够支持它,这些路由协议包括RIP2,OSPF,EIGRP和BGP。 CIDR无类别编址 1992年引入了CIDR,它意味着在路由表层次的网络地址“类”的概念已经被取消,代之以“网络前缀”的概念。Internet中的CIDR Classless Inter-Domain Routing 无类别域间路由的基本思想是取消地址的分类结构, 取而代之的是允许以可变长分界的方式分配网络数。它支持路由聚合,可限制Internet主干路由器中必要路由信息的增长。IP地址中A类已经分配完毕,B类也已经差不多了 剩下的C类地址已经成为大家瓜分的目标。 显然 对于一个国家、地区、组织来说分配到的地址最好是连续的 那么如何来保证这一点呢?于是提出了CIDR的概念。CIDR是Classless Inter Domain Routing的缩写 意为无类别的域间路由。 “无类别”的意思是现在的选路决策是基于整个32位IP地址的掩码操作。而不管其IP地址是A类、B类或是C类,都没有什么区别。它的思想是:把许多C类地址合起来作B类地址分配。 采用这种分配多个IP地址的方式,使其能够将路由表中的许多表项归并 summarization 成更少的数目。 区别 CIDR是把几个标准网络合成一个大的网络 VLSM是把一个标准网络分成几个小型网络(子网) CIDR是子网掩码往左边移了,VLSM是子网掩码往右边移了
OSPF路由过滤
OSPF支持使用路由策略对路由信息进行过滤。缺省情况下,OSPF不进行路由过滤。
OSPF可以使用的路由策略包括route-policy,访问控制列表(access-list),地址前缀列表(prefix-list)。
OSPF路由过滤可以应用于以下几个方面:
- 路由引入
OSPF可以引入其它路由协议学习到的路由。在引入时可以通过配置路由策略来过滤路由,只引入满足条件的路由。
- 引入路由发布
OSPF引入了路由后会向其它邻居发布引入的路由信息。
可以通过配置过滤规则来过滤向邻居发布的路由信息。该过滤规则只在ASBR上配置才有效。
- 路由学习
通过配置过滤规则,可以设置OSPF对接收到的区域内、区域间和自治系统外部的路由进行过滤。
该过滤只作用于路由表项的添加与否,即只有通过过滤的路由才被添加到本地路由表中,但所有的路由仍可以在OSPF路由表中被发布出去。
- 区域间LSA学习
通过命令可以在ABR上配置对进入本区域的Summary LSA进行过滤。该配置只在ABR上有效(只有ABR才能发布Summary LSA)。
区域间LSA学习 |
路由学习 |
---|---|
直接对进入区域的LSA进行过滤。 |
路由学习中的过滤不对LSA进行过滤,只针对LSA计算出来的路由是否添加本地路由表进行过滤。学习到的LSA是完整的。 |
- 区域间LSA发布
通过命令可以在ABR上配置对本区域出方向的Summary LSA进行过滤。该配置只在ABR上配置有效。
一、路由策略 路由策略,是路由发布和接收的策略。其实,选择路由协议本身也是一种路由策略,因为相同的网络结构,不同的路由协议因为实现的机制不同、开销计算规则不同、优先级定义不同等可能会产生不同的路由表, 这些是最基本的。通常我们所说的路由策略指的是,在正常的路由协议之上,我们根据某种规则、通过改变某些参数或者设置某种控制方式来改变路由产生、发布、选择的结果,注意,改变的是结果(即路由表), 规则并没有改变,而是应用这些规则。 二、策略路由 策略路由是在路由表已经产生的情况下,不按照现有的路由表进行转发,而是根据需要,某些通信流量选择其他路由的方式。 三、联系与区别 联系: 双方都是为了转发数据包而进行路径选择的策略,都是根据某种规则改变某些参数或控制手段来设置不同的转发路径。 区别: 路由策略是根据一些规则,使用某种策略改变规则中影响路由发布、接收或路由选择的参数而改变路由发现的结果,最终改变的是路由表的内容。是在路由发现的时候产生作用。 策略路由是尽管存在当前最优的路由,但是针对某些特别的主机(或应用、协议)不使用当前路由表中的转发路径而单独使用别的转发路径。在数据包转发的时候发生作用、不改变路由表中任何内容。 策略路由的优先级比路由策略高,当路由器接收到数据包,并进行转发的时候,会优先根据策略路由的规则进行匹配,如果能匹配上,则根据策略路由来转发,否则按照路由表中转发路径来进行转发。 总结一下,路由策略是路由发现规则,策略路由是数据包转发规则。其实将“策略路由”理解为“转发策略”,这样更容易理解与区分。由于转发在底层,路由在高层,所以转发的优先级比路由的优先级高, 这点也能理解的通。其实路由器中存在两种类型和层次的表,一个是路由表(routing-table),另一个是转发表(forwording-table)。转发表是由路由表映射过来的,策略路由直接作用于转发表,路由策略直接作用于路由表。 四、优缺点 网络通信的规则是先有路由,才有转发。路由策略由于仅仅在路由发现的时候产生作用,在路由表产生且稳定之后,如果网络不发生变化,路由表通常都不会变化,这时候,路由策略没有应用就不会占用资源。 而策略路由是在转发的时候发生作用,路由器在初始产生路由表之后,基本工作量都在数据包转发上,如果没有策略路由,路由器只要分析每一个数据包的目的地址,再按路由表来匹配就可以决定下一跳; 但是如果有策略路由,策略路由就一直处于应用状态,如果策略路由特别复杂,路由器要根据规则来判断数据包的源地址、协议或应用等附加信息,这样就会一直占用大量的资源, 所以除非不得已,尽量使用路由策略,而不要使用策略路由。网络优化的时候需要考虑这一点,如果策略路由特别复杂,能通过将网络进行简单分解而达到取消策略路由的尽量进行分解,否则路由器负担很重。
OSPF多进程
OSPF支持多进程,在同一台路由器上可以运行多个不同的OSPF进程,它们之间互不影响,彼此独立。不同OSPF进程之间的路由交互相当于不同路由协议之间的路由交互。
路由器的一个接口只能属于某一个OSPF进程。
OSPF多进程的一个典型应用就是在VPN场景中PE和CE之间运行OSPF协议,同时VPN骨干网上的IGP也采用OSPF。在PE上,这两个OSPF进程互不影响。
4 三张表
5 OSPF运行基本步骤
建立邻接关系
在上述邻居状态机的变化中,有两处决定是否建立邻接关系:
- 当与邻居的双向通讯初次建立时。
- 当网段中的DR和BDR发生变化时。
OSPF在不同网络类型中,OSPF邻接关系建立的过程不同,分为广播网络,NBMA网络,点到点/点到多点网络。
在广播网络中建立OSPF邻接关系
在广播网络中,DR、BDR和网段内的每一台路由器都形成邻接关系,但DR other之间只形成邻居关系。
- 建立邻居关系
- RouterA的一个连接到广播类型网络的接口上激活了OSPF协议,并发送了一个Hello报文(使用组播地址224.0.0.5)。此时,RouterA认为自己是DR路由器(DR=1.1.1.1),但不确定邻居是哪台路由器(Neighbors Seen=0)。
- RouterB收到RouterA发送的Hello报文后,发送一个Hello报文回应给RouterA,并且在报文中的Neighbors Seen字段中填入RouterA的Router ID(Neighbors Seen=1.1.1.1),表示已收到RouterA的Hello报文,并且宣告DR路由器是RouterB(DR=2.2.2.2),然后RouterB的邻居状态机置为Init。
- RouterA收到RouterB回应的Hello报文后,将邻居状态机置为2-way状态,下一步双方开始发送各自的链路状态数据库。
在广播网络中,两个接口状态是DR Other的路由器之间将停留在此步骤。
2. 主/从关系协商、DD报文交换
- RouterA首先发送一个DD报文,宣称自己是Master(MS=1),并规定序列号Seq=X。I=1表示这是第一个DD报文,报文中并不包含LSA的摘要,只是为了协商主从关系。M=1说明这不是最后一个报文。
- RouterB在收到RouterA的DD报文后,将RouterA的邻居状态机改为Exstart,并且回应了一个DD报文(该报文中同样不包含LSA的摘要信息)。由于RouterB的Router ID较大,所以在报文中RouterB认为自己是Master,并且重新规定了序列号Seq=Y。
- RouterA收到报文后,同意了RouterB为Master,并将RouterB的邻居状态机改为Exchange。RouterA使用RouterB的序列号Seq=Y来发送新的DD报文,该报文开始正式地传送LSA的摘要。在报文中RouterA将MS=0,说明自己是Slave。
- RouterB收到报文后,将RouterA的邻居状态机改为Exchange,并发送新的DD报文来描述自己的LSA摘要,此时RouterB将报文的序列号改为Seq=Y+1。
上述过程持续进行,RouterA通过重复RouterB的序列号来确认已收到RouterB的报文。RouterB通过将序列号Seq加1来确认已收到RouterA的报文。当RouterB发送最后一个DD报文时,在报文中写上M=0。
- 为了提高发送的效率,RouterA和RouterB首先了解对端数据库中哪些LSA是需要更新的,如果某一条LSA在LSDB中已经存在,就不再需要请求更新了。为了达到这个目的,RouterA和RouterB先发送DD报文,DD报文中包含了对LSDB中LSA的摘要描述(每一条摘要可以惟一标识一条LSA)。为了保证在传输的过程中报文传输的可靠性,在DD报文的发送过程中需要确定双方的主从关系,作为Master的一方定义一个序列号Seq,每发送一个新的DD报文将Seq加一,作为Slave的一方,每次发送DD报文时使用接收到的上一个Master的DD报文中的Seq。
由于OSPF直接用IP报文来封装自己的协议报文,所以在DD报文传输的过程中必须考虑到报文传输的可靠性。 为了做到这一点,在DD报文的发送过程中需要确定双方的主从关系。作为Master的一方定义一个序列号seq,每发送一个新的DD报文将seq 加一。
作为Slave的一方,每次发送DD报文时使用接收到的上一个Master的DD报文中的seq。实际上这种序列号机制是一种隐含的确认方法。如果再加上每个报文都有超时重传,就可以保证这种传输是可靠的。
3. LSDB同步(LSA请求、LSA传输、LSA应答)
- RouterA收到最后一个DD报文后,发现RouterB的数据库中有许多LSA是自己没有的,将邻居状态机改为Loading状态。此时RouterB也收到了RouterA的最后一个DD报文,但RouterA的LSA,RouterB都已经有了,不需要再请求,所以直接将RouterA的邻居状态机改为Full状态。
- RouterA发送LSR报文向RouterB请求更新LSA。RouterB用LSU报文来回应RouterA的请求。RouterA收到后,发送LSAck报文确认。
上述过程持续到RouterA中的LSA与RouterB的LSA完全同步为止,此时RouterA将RouterB的邻居状态机改为Full状态。当路由器交换完DD报文并更新所有的LSA后,此时邻接关系建立完成。
OSPF共有8种状态机
分别是:Down、Attempt、Init、2-way、Exstart、Exchange、Loading、Full。
- Down:邻居会话的初始阶段,表明没有在邻居失效时间间隔内收到来自邻居路由器的Hello数据包。
- Attempt:该状态仅发生在NBMA网络中,表明对端在邻居失效时间间隔(dead interval)超时前仍然没有回复Hello报文。此时路由器依然每发送轮询Hello报文的时间间隔(poll interval)向对端发送Hello报文。
- Init:收到Hello报文后状态为Init。
- 2-way:收到的Hello报文中包含有自己的Router ID,则状态为2-way;如果不需要形成邻接关系则邻居状态机就停留在此状态,否则进入Exstart状态。
- Exstart:开始协商主从关系,并确定DD的序列号,此时状态为Exstart。
- Exchange:主从关系协商完毕后开始交换DD报文,此时状态为Exchange。
- Loading:DD报文交换完成即Exchange done,此时状态为Loading。
- Full:LSR重传列表为空,此时状态为Full。
在NBMA网络中建立OSPF邻接关系
NBMA网络和广播网络的邻接关系建立过程只在交换DD报文前不一致,如图1-4中的蓝色标记。
在NBMA网络中,所有路由器只与DR和BDR之间形成邻接关系。
在NBMA网络中建立OSPF邻接关系的过程如下:
- 建立邻居关系
- RouterB向RouterA的一个状态为Down的接口发送Hello报文后,RouterB的邻居状态机置为Attempt。此时,RouterB认为自己是DR路由器(DR=2.2.2.2),但不确定邻居是哪台路由器(Neighbors Seen=0)。
- RouterA收到Hello报文后将邻居状态机置为Init,然后再回复一个Hello报文。此时,RouterA同意RouterB是DR路由器(DR=2.2.2.2),并且在Neighbors Seen字段中填入邻居路由器的Router ID(Neighbors Seen=2.2.2.2)。
在NBMA网络中,两个接口状态是DR Other的路由器之间将停留在此步骤。
2. 主/从关系协商、DD报文交换过程同广播网络的邻接关系建立过程。
3. LSDB同步(LSA请求、LSA传输、LSA应答)过程同广播网络的邻接关系建立过程。
在点到点/点到多点网络中建立OSPF邻接关系
在点到点/点到多点网络中,邻接关系的建立过程和广播网络一样,唯一不同的是不需要选举DR和BDR,DD报文是组播发送的。
路由计算
OSPF采用SPF(Shortest Path First)算法计算路由,可以达到路由快速收敛的目的。
OSPF协议使用链路状态通告LSA描述网络拓扑,即有向图。Router LSA描述路由器之间的链接和链路的属性。路由器将LSDB转换成一张带权的有向图,这张图便是对整个网络拓扑结构的真实反映。各个路由器得到的有向图是完全相同的。如图1-5所示。
每台路由器根据有向图,使用SPF算法计算出一棵以自己为根的最短路径树,这棵树给出了到自治系统中各节点的路由。如图1-6所示。
当OSPF的链路状态数据库LSDB发生改变时,需要重新计算最短路径,如果每次改变都立即计算最短路径,将占用大量资源,并会影响路由器的效率,通过调节SPF的计算间隔时间,可以抑制由于网络频繁变化带来的占用过多资源。缺省情况下,SPF时间间隔为5秒钟。
具体的计算过程如下:
- 计算区域内路由。
Router LSA和Network LSA可以精确的描述出整个区域内部的网络拓扑,根据SPF算法,可以计算出到各个路由器的最短路径。根据Router LSA描述的与路由器的网段情况,得到了到达各个网段的具体路径。在计算过程中,如果有多条等价路由,SPF算法会将所有等价路径都保留在LSDB中。
- 计算区域外路由。
从一个区域内部看,相邻区域的路由对应的网段好像是直接连接在ABR上,而到ABR的最短路径已经在上一过程中计算完毕,所以直接检查Network Summary LSA,就可以很容易得到这些网段的最短路径。另外,ASBR也可以看成是连接在ABR上,所以ASBR的最短路径也可以在这个阶段计算出来。如果进行SPF计算的路由器是ABR,那么只需要检查骨干区域的Network Summary LSA。
- 计算自治系统外路由。
由于自治系统外部的路由可以看成是直接连接在ASBR上,而到ASBR的最短路径在上一过程中已经计算完毕,所以逐条检查AS External LSA就可以得到到达各个外部网络的最短路径。
五 IS-IS
一 基础概念
IS-IS的整体拓扑
为了支持大规模的路由网络,IS-IS在自治系统内采用骨干区域与非骨干区域两级的分层结构。一般来说,将Level-1路由器部署在非骨干区域,Level-2路由器和Level-1-2路由器部署在骨干区域。每一个非骨干区域都通过Level-1-2路由器与骨干区域相连。
如图7-1所示为一个运行IS-IS协议的网络,它与OSPF的多区域网络拓扑结构非常相似。整个骨干区域不仅包括Area1中的所有路由器,还包括其它区域的Level-1-2路由器。
如图7-2所示是IS-IS的另外一种拓扑结构图。在这个拓扑中,Level-2级别的路由器没有在同一个区域,而是分别属于不同的区域。此时所有物理连续的Level-1-2和Level-2路由器就构成了IS-IS的骨干区域。
- 在IS-IS中,每个路由器都只属于一个区域;而在OSPF中,一个路由器的不同接口可以属于不同的区域。
- 在IS-IS中,单个区域没有骨干与非骨干区域的概念;而在OSPF中,Area0被定义为骨干区域。
- 在IS-IS中,Level-1和Level-2级别的路由都采用SPF算法,分别生成最短路径树SPT(Shortest Path Tree);而在OSPF中,只有在同一个区域内才使用SPF算法,区域之间的路由需要通过骨干区域来转发。
IS-IS路由器的分类
-
Level-1路由器
Level-1路由器负责区域内的路由,它只与属于同一区域的Level-1和Level-1-2路由器形成邻居关系,属于不同区域的Level-1路由器不能形成邻居关系。Level-1路由器只负责维护Level-1的链路状态数据库LSDB(Link State Database),该LSDB包含本区域的路由信息,到本区域外的报文转发给最近的Level-1-2路由器。
-
Level-2路由器
Level-2路由器负责区域间的路由,它可以与同一或者不同区域的Level-2路由器或者其它区域的Level-1-2路由器形成邻居关系。Level-2路由器维护一个Level-2的LSDB,该LSDB包含区域间的路由信息。
所有Level-2级别(即形成Level-2邻居关系)的路由器组成路由域的骨干网,负责在不同区域间通信。路由域中Level-2级别的路由器必须是物理连续的,以保证骨干网的连续性。只有Level-2级别的路由器才能直接与区域外的路由器交换数据报文或路由信息。
-
Level-1-2路由器
同时属于Level-1和Level-2的路由器称为Level-1-2路由器,它可以与同一区域的Level-1和Level-1-2路由器形成Level-1邻居关系,也可以与其他区域的Level-2和Level-1-2路由器形成Level-2的邻居关系。Level-1路由器必须通过Level-1-2路由器才能连接至其他区域。
Level-1-2路由器维护两个LSDB,Level-1的LSDB用于区域内路由,Level-2的LSDB用于区域间路由。
IS-IS的网络类型
IS-IS只支持两种类型的网络,根据物理链路不同可分为:
- 广播链路:如Ethernet、Token-Ring等。
- 点到点链路:如PPP、HDLC等。
对于NBMA(Non-Broadcast Multi-Access)网络,需对其配置三层子接口,并注意三层子接口类型应配置为P2P。 IS-IS不能在点到多点链路P2MP(Point to MultiPoint)上运行。
DIS和伪节点
在广播网络中,IS-IS需要在所有的路由器中选举一个路由器作为DIS(Designated Intermediate System)。DIS用来创建和更新伪节点(Pseudo nodes),并负责生成伪节点的链路状态协议数据单元LSP(Link state Protocol Data Unit),用来描述这个网络上有哪些网络设备。
伪节点是用来模拟广播网络的一个虚拟节点,并非真实的路由器。在IS-IS中,伪节点用DIS的System ID和一个字节的Circuit ID(非0值)标识。
如图7-3所示,使用伪节点可以简化网络拓扑,使路由器产生的LSP长度较小。另外,当网络发生变化时,需要产生的LSP数量也会较少,减少SPF的资源消耗。
Level-1和Level-2的DIS是分别选举的,用户可以为不同级别的DIS选举设置不同的优先级。DIS优先级数值最大的被选为DIS。如果优先级数值最大的路由器有多台,则其中MAC地址最大的路由器会被选中。不同级别的DIS可以是同一台路由器,也可以是不同的路由器。
-
在IS-IS广播网中,优先级为0的路由器也参与DIS的选举,而在OSPF中优先级为0的路由器则不参与DR的选举。
-
在IS-IS广播网中,当有新的路由器加入,并符合成为DIS的条件时,这个路由器会被选中成为新的DIS,原有的伪节点被删除。此更改会引起一组新的LSP泛洪。而在OSPF中,当一台新路由器加入后,即使它的DR优先级值最大,也不会立即成为该网段中的DR。
-
在IS-IS广播网中,同一网段上的同一级别的路由器之间都会形成邻接关系,包括所有的非DIS路由器之间也会形成邻接关系。而在OSPF中,路由器只与DR和BDR建立邻接关系。
IS-IS广播网上所有的路由器之间都形成邻接关系,但LSDB的同步仍然依靠DIS来保证。
IS-IS的地址结构
- IDP相当于IP地址中的主网络号。它是由ISO规定,并由AFI(Authority and Format Identifier)与IDI(Initial Domain Identifier)两部分组成。AFI表示地址分配机构和地址格式,IDI用来标识域。
- DSP相当于IP地址中的子网号和主机地址。它由High Order DSP、System ID和SEL三个部分组成。High Order DSP用来分割区域,System ID用来区分主机,SEL(NSAP Selector)用来指示服务类型。
-
Area Address
IDP和DSP中的High Order DSP一起,既能够标识路由域,也能够标识路由域中的区域,因此,它们一起被称为区域地址(Area Address),相当于OSPF中的区域编号。同一Level-1区域内的所有路由器必须具有相同的区域地址,Level-2区域内的路由器可以具有不同的区域地址。
一般情况下,一个路由器只需要配置一个区域地址,且同一区域中所有节点的区域地址都要相同。为了支持区域的平滑合并、分割及转换,在设备的实现中,一个IS-IS进程下最多可配置3个区域地址。
-
System ID
System ID用来在区域内唯一标识主机或路由器。在设备的实现中,它的长度固定为48bit(6字节)。
在实际应用中,一般使用Router ID与System ID进行对应。假设一台路由器使用接口Loopback0的IP地址192.168.1.1作为Router ID,则它在IS-IS中使用的System ID可通过如下方法转换得到:-
将IP地址192.168.1.1的每个十进制数都扩展为3位,不足3位的在前面补0,得到192.168.001.001。
-
将扩展后的地址分为3部分,每部分由4位数字组成,得到1921.6800.1001。重新组合的1921.6800.1001就是System ID。
实际System ID的指定可以有不同的方法,但要保证能够唯一标识主机或路由器。
-
-
SEL
SEL的作用类似IP中的“协议标识符”,不同的传输协议对应不同的SEL。在IP上SEL均为00。
网络实体名称NET(Network Entity Title)指的是设备本身的网络层信息,可以看作是一类特殊的NSAP(SEL=00)。NET的长度与NSAP的相同,最多为20个字节,最少为8个字节。在路由器上配置IS-IS时,只需要考虑NET即可,NSAP可不必去关注。
例如有NET为:ab.cdef.1234.5678.9abc.00,则其中Area Address为ab.cdef,System ID为1234.5678.9abc,SEL为00。
IS-IS的报文类型
IS-IS报文有以下几种类型:HELLO PDU(Protocol Data Unit)、LSP和SNP。
-
Hello PDU
Hello报文用于建立和维持邻居关系,也称为IIH(IS-to-IS Hello PDUs)。其中,广播网中的Level-1 IS-IS使用Level-1 LAN IIH;广播网中的Level-2 IS-IS使用Level-2 LAN IIH;非广播网络中则使用P2P IIH。它们的报文格式有所不同。P2P IIH中相对于LAN IIH来说,多了一个表示本地链路ID的Local Circuit ID字段,缺少了表示广播网中DIS的优先级的Priority字段以及表示DIS和伪节点System ID的LAN ID字段。
-
LSP
链路状态报文LSP(Link State PDUs)用于交换链路状态信息。LSP分为两种:Level-1 LSP和Level-2 LSP。Level-1 LSP由Level-1 IS-IS传送,Level-2 LSP由Level-2 IS-IS传送,Level-1-2 IS-IS则可传送以上两种LSP。
LSP报文中主要字段的解释如下:
-
ATT字段:当Level-1-2 IS-IS在Level-1区域内传送Level-1 LSP时,如果Level-1 LSP中设置了ATT位,则表示该区域中的Level-1 IS-IS可以通过此Level-1-2 IS-IS通往外部区域。
-
OL(LSDB Overload)字段:过载标志位。
设置了过载标志位的LSP虽然还会在网络中扩散,但是在计算通过过载路由器的路由时不会被采用。即对路由器设置过载位后,其它路由器在进行SPF计算时不会使用这台路由器做转发,只计算该节点上的直连路由。更多内容请参见《原理描述-IS-IS过载位》。
-
IS Type字段:用来指明生成此LSP的IS-IS类型是Level-1还是Level-2 IS-IS(01表示Level-1,11表示Level-2)。
-
-
SNP
序列号报文SNP(Sequence Number PDUs)通过描述全部或部分数据库中的LSP来同步各LSDB(Link-State DataBase),从而维护LSDB的完整与同步。
SNP包括全序列号报文CSNP(Complete SNP)和部分序列号报文PSNP(Partial SNP),进一步又可分为Level-1 CSNP、Level-2 CSNP、Level-1 PSNP和Level-2 PSNP。
CSNP包括LSDB中所有LSP的摘要信息,从而可以在相邻路由器间保持LSDB的同步。在广播网络上,CSNP由DIS定期发送(缺省的发送周期为10秒);在点到点链路上,CSNP只在第一次建立邻接关系时发送。
PSNP只列举最近收到的一个或多个LSP的序号,它能够一次对多个LSP进行确认,当发现LSDB不同步时,也用PSNP来请求邻居发送新的LSP。
IS-IS报文中的变长字段部分是多个TLV(Type-Length-Value)三元组。其格式如图7-5所示。TLV也称为CLV(Code-Length-Value)。
不同PDU类型所包含的TLV是不同的。如表7-1所示。
TLV Type |
名称 |
所应用的PDU类型 |
---|---|---|
1 |
Area Addresses |
IIH、LSP |
2 |
IS Neighbors(LSP) |
LSP |
4 |
Partition Designated Level2 IS |
L2 LSP |
6 |
IS Neighbors(MAC Address) |
LAN IIH |
7 |
IS Neighbors(SNPA Address) |
LAN IIH |
8 |
Padding |
IIH |
9 |
LSP Entries |
SNP |
10 |
Authentication Information |
IIH、LSP、SNP |
128 |
IP Internal Reachability Information |
LSP |
129 |
Protocols Supported |
IIH、LSP |
130 |
IP External Reachability Information |
L2 LSP |
131 |
Inter-Domain Routing Protocol Information |
L2 LSP |
132 |
IP Interface Address |
IIH、LSP |
其中,Type值从1到10的TLV在ISO10589中定义,其他几种TLV在RFC1195中定义。
二 信息交互
IS-IS是一种链路状态路由协议,每一台路由器都会生成一个LSP,它包含了该路由器所有使能IS-IS协议接口的链路状态信息。通过跟相邻设备建立IS-IS邻接关系,互相更新本地设备的LSDB,可以使得LSDB与整个IS-IS网络的其他设备的LSDB实现同步。然后根据LSDB运用SPF算法计算出IS-IS路由。如果此IS-IS路由是到目的地址的最优路由,则此路由会下发到IP路由表中,并指导报文的转发。
IS-IS邻居关系的建立
两台运行IS-IS的路由器在交互协议报文实现路由功能之前必须首先建立邻居关系。在不同类型的网络上,IS-IS的邻居建立方式并不相同。
-
广播链路邻居关系的建立
图7-6以Level-2路由器为例,描述了广播链路中建立邻居关系的过程。Level-1路由器之间建立邻居与此相同。
- RouterA广播发送Level-2 LAN IIH,此报文中无邻居标识。
- RouterB收到此报文后,将自己和RouterA的邻居状态标识为Initial。然后,RouterB再向RouterA回复Level-2 LAN IIH,此报文中标识RouterA为RouterB的邻居。
- RouterA收到此报文后,将自己与RouterB的邻居状态标识为Up。然后RouterA再向RouterB发送一个标识RouterB为RouterA邻居的Level-2 LAN IIH。
- RouterB收到此报文后,将自己与RouterA的邻居状态标识为Up。这样,两个路由器成功建立了邻居关系。
因为是广播网络,需要选举DIS,所以在邻居关系建立后,路由器会等待两个Hello报文间隔,再进行DIS的选举。Hello报文中包含Priority字段,Priority值最大的将被选举为该广播网的DIS。若优先级相同,接口MAC地址较大的被选举为DIS。
-
P2P链路邻居关系的建立
在P2P链路上,邻居关系的建立不同于广播链路。分为两次握手机制和三次握手机制。
-
两次握手机制
只要路由器收到对端发来的Hello报文,就单方面宣布邻居为Up状态,建立邻居关系。
-
三次握手机制
此方式通过三次发送P2P的IS-IS Hello PDU最终建立起邻居关系,类似广播邻居关系的建立。
两次握手机制存在明显的缺陷。当路由器间存在两条及以上的链路时,如果某条链路上到达对端的单向状态为Down,而另一条链路同方向的状态为Up,路由器之间还是能建立起邻接关系。SPF在计算时会使用状态为UP的链路上的参数,这就导致没有检测到故障的路由器在转发报文时仍然试图通过状态为Down的链路。三次握手机制解决了上述不可靠点到点链路中存在的问题。这种方式下,路由器只有在知道邻居路由器也接收到它的报文时,才宣布邻居路由器处于Up状态,从而建立邻居关系。
-
-
只有同一层次的相邻路由器才有可能成为邻居。
-
对于Level-1路由器来说,区域号必须一致。
-
链路两端IS-IS接口的网络类型必须一致。
链路两端IS-IS接口的地址必须处于同一网段。
由于IS-IS是直接运行在数据链路层上的协议,并且最早设计是给CLNP使用的,IS-IS邻居关系的形成与IP地址无关。但在实际的实现中,由于只在IP上运行IS-IS,所以是要检查对方的IP地址的。如果接口配置了从IP,那么只要双方有某个IP(主IP或者从IP)在同一网段,就能建立邻居,不一定要主IP相同。
当链路两端IS-IS接口的地址不在同一网段时,如果配置接口对接收的Hello报文不作IP地址检查,也可以建立邻居关系。对于P2P接口,可以配置接口忽略IP地址检查;对于以太网接口,需要将以太网接口模拟成P2P接口,然后才可以配置接口忽略IP地址检查。
IS-IS的LSP交互过程
LSP产生的原因
IS-IS路由域内的所有路由器都会产生LSP,以下事件会触发一个新的LSP:
-
邻居Up或Down
-
IS-IS相关接口Up或Down
-
引入的IP路由发生变化
-
区域间的IP路由发生变化
-
接口被赋了新的metric值
-
周期性更新
收到邻居新的LSP的处理过程
-
将接收的新的LSP合入到自己的LSDB数据库中,并标记为flooding。
-
发送新的LSP到除了收到该LSP的接口之外的接口。
-
邻居再扩散到其他邻居。
LSP的“泛洪”
LSP报文的“泛洪”(flooding)是指当一个路由器向相邻路由器通告自己的LSP后,相邻路由器再将同样的LSP报文传送到除发送该LSP的路由器外的其它邻居,并这样逐级将LSP传送到整个层次内所有路由器的一种方式。通过这种“泛洪”,整个层次内的每一个路由器就都可以拥有相同的LSP信息,并保持LSDB的同步。
每一个LSP都拥有一个标识自己的4字节的序列号。在路由器启动时所发送的第一个LSP报文中的序列号为1,以后当需要生成新的LSP时,新LSP的序列号在前一个LSP序列号的基础上加1。更高的序列号意味着更新的LSP。
广播链路中新加入路由器与DIS同步LSDB数据库的过程
- 如图7-7所示,新加入的路由器RouterC首先发送Hello报文,与该广播域中的路由器建立邻居关系。
- 建立邻居关系之后,RouterC等待LSP刷新定时器超时,然后将自己的LSP发往组播地址(Level-1:01-80-C2-00-00-14;Level-2:01-80-C2-00-00-15)。这样网络上所有的邻居都将收到该LSP。
- 该网段中的DIS会把收到RouterC的LSP加入到LSDB中,并等待CSNP报文定时器超时并发送CSNP报文,进行该网络内的LSDB同步。
- RouterC收到DIS发来的CSNP报文,对比自己的LSDB数据库,然后向DIS发送PSNP报文请求自己没有的LSP。
- DIS收到该PSNP报文请求后向RouterC发送对应的LSP进行LSDB的同步。
- DIS接收到LSP,在数据库中搜索对应的记录。若没有该LSP,则将其加入数据库,并广播新数据库内容。
- 若收到的LSP序列号大于本地LSP的序列号,就替换为新报文,并广播新数据库内容;若收到的LSP序列号小本地LSP的序列号,就向入端接口发送本地LSP报文。
- 若两个序列号相等,则比较Remaining Lifetime。若收到的LSP的Remaining Lifetime小于本地LSP的Remaining Lifetime,就替换为新报文,并广播新数据库内容;若收到的LSP的Remaining Lifetime大于本地LSP的Remaining Lifetime,就向入端接口发送本地LSP报文。
- 若两个序列号和Remaining Lifetime都相等,则比较Checksum。若收到的LSP的Checksum大于本地LSP的Checksum,就替换为新报文,并广播新数据库内容;若收到的LSP的Checksum小于本地LSP的Checksum,就向入端接口发送本地LSP报文。
- 若两个序列号、Remaining Lifetime和Checksum都相等,则不转发该报文。
P2P链路上LSDB数据库的同步过程
-
RouterA先与RouterB建立邻居关系。
-
建立邻居关系之后,RouterA与RouterB会先发送CSNP给对端设备。如果对端的LSDB与CSNP没有同步,则发送PSNP请求索取相应的LSP。
-
如图7-8所示假定RouterB向RouterA索取相应的LSP。RouterA发送RouterB请求的LSP的同时启动LSP重传定时器,并等待RouterB发送的PSNP作为收到LSP的确认。
-
如果在接口LSP重传定时器超时后,RouterA还没有收到RouterB发送的PSNP报文作为应答,则重新发送该LSP直至收到PSNP报文。
在P2P链路上PSNP有两种作用:
-
作为Ack应答以确认收到的LSP。
-
用来请求所需的LSP。
在P2P链路中设备的LSDB更新过程如下:
- 若收到的LSP比本地的序列号更小,则直接给对方发送本地的LSP,然后等待对方给自己一个PSNP报文作为确认;若收到的LSP比本地的序列号更大,则将这个新的LSP存入自己的LSDB,再通过一个PSNP报文来确认收到此LSP,最后再将这个新LSP发送给除了发送该LSP的邻居以外的邻居。
- 若收到的LSP序列号和本地相同,则比较Remaining Lifetime,若收到LSP的Remaining Lifetime小于本地LSP的Remaining Lifetime,则将收到的LSP存入LSDB中并发送PSNP报文来确认收到此LSP,然后将该LSP发送给除了发送该LSP的邻居以外的邻居;若收到LSP的Remaining Lifetime大于本地LSP的Remaining Lifetime,则直接给对方发送本地的LSP,然后等待对方给自己一个PSNP报文作为确认。
- 若收到的LSP和本地LSP的序列号相同且Remaining Lifetime都不为0,则比较Checksum,若收到LSP的Checksum大于本地LSP的Checksum,则将收到的LSP存入LSDB中并发送PSNP报文来确认收到此LSP,然后将该LSP发送给除了发送该LSP的邻居以外的邻居;若收到LSP的Checksum小于本地LSP的Checksum,则直接给对方发送本地的LSP,然后等待对方给自己一个PSNP报文作为确认。
- 若收到的LSP和本地LSP的序列号、Remaining Lifetime和Checksum都相同,则不转发该报文。
路由渗透
通常情况下,Level-1区域内的路由通过Level-1路由器进行管理。所有的Level-2和Level-1-2路由器构成一个连续的骨干区域。Level-1区域必须且只能与骨干区域相连,不同的Level-1区域之间并不相连。
Level-1-2路由器将学习到的Level-1路由信息装进Level-2 LSP,再泛洪LSP给其他Level-2和Level-1-2路由器。因此,Level-1-2和Level-2路由器知道整个IS-IS路由域的路由信息。但是,为了有效减小路由表的规模,在缺省情况下,Level-1-2路由器并不将自己知道的其他Level-1区域以及骨干区域的路由信息通报给它所在的Level-1区域。这样,Level-1路由器将不了解本区域以外的路由信息,可能导致与本区域之外的目的地址通信时无法选择最佳的路由。
为解决上述问题,IS-IS提供了路由渗透功能。通过在Level-1-2路由器上定义ACL(Access Control List)、路由策略、Tag标记等方式,将符合条件的路由筛选出来,实现将其他Level-1区域和骨干区域的部分路由信息通报给自己所在的Level-1区域。
如图7-9所示,RouterA发送报文给RouterF,选择的最佳路径应该是RouterA->RouterB->RouterD->RouterE->RouterF。因为这条链路上的cost值为40,但在RouterA上查看发送到RouterF的报文选择的路径是:RouterA->RouterC->RouterE->RouterF,其cost值为70,不是RouterA到RouterF的最优路由。
RouterA作为Level-1路由器并不知道本区域外部的路由,那么发往区域外的报文都会选择由最近的Level-1-2路由器产生的缺省路由发送出去,所以会出现RouterA选择次最优路由转发报文的情况。
如果分别在Level-1-2路由器RouterC和RouterD上使能路由渗透功能,Aera10中的Level-1路由器就会拥有经这两个Level-1-2路由器通向区域外的路由信息。经过路由计算,选择的转发路径为RouterA->RouterB->RouterD->RouterE->RouterF,即RouterA到RouterF的最优路由。
IS-IS Overload
IS-IS Overload使用IS-IS过载标记位来标识过载状态。IS-IS过载标志位是指IS-IS LSP报文中的OL字段。对设备设置过载标志位后,其它设备在进行SPF计算时不会使用这台设备做转发,只计算该设备上的直连路由。
如图7-10所示,RouterA到10.1.1.0/24网段的报文由RouterB转发,但如果RouterB所发的LSP报文中过载标志位置1,RouterA会认为RouterB的LSDB不完整,于是将报文通过RouterD、RouterE转发到10.1.1.0/24网段,但转发到RouterB直连网段的报文则不受影响。
当系统因为各种原因无法保存新的LSP,以致无法维持正常的LSDB同步时,该系统计算出的路由信息将出现错误。在这种情况下,系统就可以自动进入过载状态,即通过该设备到达的路由不计算,但该设备的直连路由不会被忽略。
- 如果因为设备进入异常状态导致系统进入过载状态,此时系统将删除全部引入或渗透的路由信息。
- 如果因为用户配置导致系统进入过载状态,此时会根据用户的配置决定是否删除全部引入或渗透路由。