IS-IS基本原理
IS-IS基本原理
相关概念
DIS and Pseudo Node
DIS(Designated Intermediate System,指定中间系统)是在IS-IS通信过程中,被选举出来作为中介路由器的一个中间系统。伪节点(Pseudonodes)是用来模拟广播网络的一个虚拟节点,并非真实的路由器。在IS-IS中,伪节点用DIS的System ID和一个字节的Circuit ID(非0值)标识。
DIS用来创建和更新伪节点,并负责生成伪节点的LSP报文。网络中的路由器都只需要通告单条链路到伪节点,通过伪节点得到整个网络的路由信息,而不需要和所有的路由器进行报文交互,简化了网络拓扑,使路由器产生的LSP长度较小。另外,当网络发生变化时,需要产生的LSP数量也会较少,减少SPF的资源消耗。
SPF算法
SPF(Short Path First,最短路径优先算法)也叫Dijkstra(荷兰数学家)算法,在链路状态路由协议中用来计算到网络的最短路径。根据该算法,本地路由器以本身为根,依据网络拓扑生成一棵最短路径树(SPT),计算出到网络中所有目的地的最短路径。在IS-IS中,SPF算法分别独立的在Level-1和Level-2数据库中运行。
实现过程
IS-IS网络中所有路由器之间实现通信,主要通过以下几个步骤:
- 邻居关系建立
- LSDB同步
- 路由计算
邻居关系建立
在不同类型的网络上,IS-IS的邻居建立方式也不同。
广播链路邻居关系的建立
RouterA、RouterB、RouterC和RouterD都是Level-2路由器。RouterA新加入到此广播网络中。图2只列出RouterA和RouterB建立邻居的过程,RouterA与RouterC和RouterD建立邻居的过程与此相同。
图2广播链路邻居关系建立过程图
由图2可以看出,IS-IS网络中两台路由器建立邻居关系的过程可以概括为:
- 路由器A发送LAN Hello报文,路由器B收到此报文后,检测到neighbor字段不包含本地MAC地址,则将自己和路由器A的邻居状态标识为Initial;
- 路由器B回复LAN Hello报文给路由器A,路由器A收到该报文,检测到neighbor字段中包含了本地的MAC地址,于是将路由器B邻居状态标识为Established;
- 路由器A再次发送LAN Hello报文给路由器B,路由器B收到这个neighbor字段包含本地MAC地址的Hello报文后,将路由器A邻居状态标识为Established。此时,邻居正式建立。
选举DIS
在广播网中,任意两台路由器之间都要传递信息。如果网络中有n台路由器,则需要建立nx(n-1)/2个邻接关系。这使得任何一台路由器的状态变化都会导致多次传递,浪费了带宽资源。为解决这一问题,IS-IS协议定义了DIS,所有路由器都只将信息发送给DIS,由DIS将网络链路状态广播出去。使用DIS和伪节点可以简化网络拓扑,使路由器产生的LSP报文长度较小。另外,当网络发生变化时,需要产生的LSP数量也会较少,减少SPF的资源消耗。
DIS选举发生在邻居关系建立后,Level-1和Level-2区域的DIS是分别选举的,用户可以为不同级别的DIS选举设置不同的优先级。IS-IS协议选举DIS的过程是每一台路由器接口都被指定一个L1类型的优先级和L2类型的优先级,路由器通过其每一个接口发送Hello数据包,并在Hello数据包中通告它的优先级。DIS优先级数值最大的被选为DIS。如果优先级数值最大的路由器有多台,则其中MAC地址最大的路由器会被选中。不同级别的DIS可以是同一台路由器,也可以是不同的路由器。
在选举DIS过程中,IS-IS协议与OSPF协议的不同点是:
- 优先级为0的路由器也参与DIS的选举;
- 当有新的路由器加入,并符合成为DIS的条件时,这个路由器会被选中成为新的DIS,此更改会引起一组新的LSP泛洪。
P2P链路邻居关系的建立
在P2P链路上,邻居关系的建立不同于广播链路。分为两种方式,如表1所示。缺省情况下,IS-IS在点到点链路上执行3-way方式建立邻居。
表1P2P链路邻居关系建立的两种方式对比表
方式 | 建立邻居形式 | 优缺点 | 可靠性 |
---|---|---|---|
2-way方式 | 只要设备收到IS-IS Hello报文,就会单方向建立起邻居关系 | 缺点:当链路状态反复波动引起CSNP报文丢失,导致LSDB在一个完整的LSP报文更新周期内不能达到同步。当路由器间存在两条及以上的链路时,如果某条链路上到达对端的单向状态为Down,而另一条链路同方向的状态为Up,路由器之间还是能建立起邻接关系。导致没有检测到故障的路由器在转发报文时仍然试图通过状态为Down的链路导致报文丢失。 | 低 |
3-way方式 | 通过三次发送P2P的IS-IS Hello PDU最终建立起邻居关系 | 优点:保证在双方状态都为Up时建立邻居,实现报文安全传输。 | 高 |
IS-IS邻居严格检查
在IS-IS协议中,IPv4和IPv6共用一个标准拓扑,如果在标准拓扑上同时部署IPv4、IPv6双地址族,当只有一个地址族Up时,就会造成另一个地址族的流量中断。另一方面,在网络中发生了准备链路切换后,主链路恢复,此时,由于IPv4地址族会比IPv6地址族重新Up的快,这样就导致了标准拓扑因为IPv4地址族切换到了主链路,IPv6路由也跟随拓扑切换而切换到主链路,最终导致IPv6严重丢包。IS-IS邻居严格检查可以解决上述两个问题。
IS-IS邻居严格检查规定,IS-IS在建立邻居时需要检查以下两项:
- 在IS-IS Hello报文中携带地址族信息,邻居的地址族是否Up,是通过本地配置的地址族和收到的Hello报文中的地址族协商起来的,只有本地配置的地址族在Hello报文中也同时存在,才会把邻居对应的地址族置为Up状态;
- Hello报文也携带了MT(Multi-Topology) ID,在建立IS-IS邻居时,如果是建立MT0即标准拓扑邻居,就会检查标准拓扑上配置的地址族是否都可以协商Up,只有所有的地址族都可以协商Up时,标准拓扑才可以Up。
LSDB同步
IS-IS属于链路状态协议,IS-IS设备是直接从其他使用链路状态协议的路由器获得第一手的信息。每台路由器产生关于本身、直连网络及这些链路状态的信息,这些信息通过邻接路由器传向其他路由器,每台路由器都保存一份信息,但决不改动信息。最终每台路由器都有了一个相同的有关互联网络的信息,即完成链路状态数据库LSDB的同步。实现LSDB同步的这一过程就称为LSP泛洪。LSP报文的“泛洪”指当一个路由器向相邻路由器报告自己的LSP报文后,相邻路由器再将同样的LSP报文传送到除发送该报文的路由器外的其它邻居,并这样逐级将LSP报文传送到整个层次内的一种方式。通过这种“泛洪”,整个层次内的每一个路由器就都可以拥有相同的LSP信息,并保持LSDB的同步。
IS-IS路由域内的所有路由器都会产生LSP报文,以下事件会触发生成一个新的LSP报文:
- 邻居Up或Down
- IS-IS相关接口Up或Down
- 引入的IP路由发生变化
- 区域间的IP路由发生变化
- 接口被赋了新的metric值
- 周期性更新
不同路由器收到新的LSP报文的处理过程为:
- 广播链路的LSDB更新过程
- P2P的LSDB更新过程
广播链路数据库更新过程
广播网LSDB同步过程:广播网的LSDB同步主要通过DIS更新LSDB实现,其过程如图3所示。
- DIS接收到LSP报文,在数据库中搜索对应的记录。若没有该LSP,则将其加入数据库,并广播新数据库内容。
- 若收到的LSP序列号大于本地LSP的序列号,就替换为新报文,并广播新数据库内容。
- 若收到的LSP序列号小于本地LSP的序列号,就向入端接口发送本地LSP报文。
- 若收到的LSP和本地LSP的序列号相等,则比较Remaining Lifetime。若收到的LSP报文的Remaining Lifetime为0,则将本地的报文替换为新报文,并广播新数据库内容;若收到的LSP报文的Remaining Lifetime不为0而本地LSP报文的Remaining Lifetime为0,就向入端接口发送本地LSP报文。
- 若收到的LSP和本地LSP的序列号相等且Remaining Lifetime都不为0,则比较Checksum。若收到的LSP报文的Checksum大于本地LSP的Checksum,就替换为新报文,并广播新数据库内容;若收到的LSP的Checksum小于本地LSP的Checksum,就向入端接口发送本地LSP报文。
- 若收到的LSP和本地LSP的Checksum也相等,则不转发该报文。
图3广播链路数据库更新过程图
P2P的LSDB更新过程
- 若收到的LSP比本地LSP的序列号大,则将这个新的LSP存入自己的LSDB,并发送PSNP报文来确认收到此LSP,之后将这新的LSP发送给除了发送该LSP的邻居以外的邻居。
- 若收到的LSP比本地的序列号小,则将本地LSP发送给对方,然后等待对方发送的PSNP报文作为确认。
- 若收到的LSP序列号和本地LSP的序列号相同,则比较Remaining Lifetime,若收到的LSP报文的Remaining Lifetime为0,则将收到的LSP存入LSDB中并发送PSNP报文来确认收到此LSP,然后将该LSP发送给除了发送该LSP的邻居以外的邻居;若收到的LSP报文的Remaining Lifetime不为0而本地LSP报文的Remaining Lifetime为0,则直接给对方发送本地的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的Checksum也相等,则不转发该报文。
路由计算
当网络达到收敛状态,即完成了LSDB同步的过程,IS-IS就将使用链路状态数据库中的信息执行SPF路由计算,得到最短路径树,之后利用该最短路径树构建转发数据库,即建立路由表。
IS-IS协议使用链路开销计算最短路径,在华为路由设备上,接口的缺省开销值为10,且可以通过配置修改。一条路由的总代价为沿此路由路径方向的每一个出接口的开销值简单相加。到达某个目的地可能存在多条路由,其中代价最小的为最优路由。
对于Level-1路由器来说,路由计算具有另外一个功能:为区域间路由选择计算到达最近的Level-2路由器的路径。当一台Level-1-2路由器与其他区域相连时,路由器将通过在它的LSP中设置ATT位为1来通告这种情况,对于Level-1路由器,路由计算过程将选择开销最小的Level-1-2路由器作为它区域间的中介路由器。
本文内容主要基于华为设备的实现。