与多种网络类型的OSPF相反 ,IS-IS本机仅支持广播和点对点网络类型。通过以太网,以及通过HDLC,PPP,GRE隧道和点对点 帧中继 或ATM子接口运行IS-IS 即可直接使用。
但是,IS-IS没有特殊规定可以在部分网状数据链路层技术(例如星型帧中继)上正确运行。在此类网络上运行IS-IS可能会导致部分可见性和不完整的路由表。建议的做法要求您使用点对点子接口配置此类网络,并通过这些点对点链接运行IS-IS。
值得一提的是,IS-IS所谓的广播链接最好被称为多路访问链接。原因是IS-IS并不真正在意数据链路层技术复制广播和多播的能力,而是创建一种通信环境,在该环境中可以通过同一接口到达多个邻居,并且每个路由器都可以与之通信。链接上的所有其他路由器。
尽管我们将使用广播一词来遵守IS-IS标准中指定的术语,但真正的含义与术语多路访问更为相关。在邻接状态方面,IS-IS比具有八个状态的OSPF简单得多。在IS-IS中,只有三种可能的邻接状态:
- Down:初始状态。尚未从邻居那里收到IS-IS Hello(IIH)。
- Initializing初始化:已经从邻居接收到IIH,但是不确定邻居是否正确接收了该路由器的IIH。
- Up:已经从邻居收到IIH,并且可以确定邻居正确接收了该路由器的IIH。
验证两个相邻路由器是否可以互相听见的方式在点对点和广播链路上有所不同。同样,这两种网络类型的同步和洪泛过程也不同。
点对点链路的IS-IS操作
在点对点接口上,IS-IS希望检测到单个邻居,提出邻接关系,然后同步链路状态数据库。最初的IS-IS规范假定一旦收到邻居的点对点IIH,就可以提出邻接关系。
没有验证两个路由器之间的双向可见性。如果点对点链路不能在同一对路由器及其接口之间的两个方向上成功承载数据包,则这种本地方法会导致问题。
因此,在 RFC 3373中,定义了一种用于点对点链路上IS-IS邻接的三向握手方法,并且该方法现已被主要的IS-IS实现者普遍采用。
在更详细地研究三向握手之前,请首先回顾关于OSI寻址的部分,其中每个路由器为每个接口分配一个本地有效的单个八位位组号,该号码称为本地电路ID。
点对点接口上的本地电路ID仅出现在IIH数据包中,并且仅用于检测链路另一端的身份更改。在广播链路上,如果路由器在该接口上充当DIS,则将Local Circuit ID用作伪节点ID。因此,仅在路由器为DIS的广播接口上才要求本地电路ID真正唯一,因为此数字在LSP中作为伪节点ID公布。
广播接口和点对点接口的本地电路ID不会冲突。因此,相同的号码可同时用于广播和点对点接口。
IS-IS点对点链路的三向握手
三向握手方法是基于点到点链路上的每个路由器,
在其IS-IS Hello(IIH)数据包中通告包含以下字段的邻接状态阈值限制(TLV):
- 邻接三向状态:这是发送路由器看到的邻接状态。
- 扩展本地电路ID:这是发送路由器接口的ID。
- 邻居系统ID:此值设置为已成功接收其IIH的邻居路由器的ID。
- 邻居扩展本地电路ID:此值设置为邻居的IIH数据包中的扩展本地电路ID字段值。
三向握手的早期实现仅包括邻接状态TLV中的“邻接三向状态”字段,而省略了此处描述的所有其他字段。三向握手的逻辑非常简单。 考虑两个路由器,路由器A和路由器B,它们都假定尚未相互接收到IIH,并且都将邻接关系视为Down状态:
- 如果路由器A从路由器B接收到IIH,并且邻接三向状态设置为Down,则很明显路由器A可以听到路由器B。但是,不确定路由器B是否可以听到路由器A。路由器A将开始发送将其IIH(邻接三向状态)设置为Initialize(初始化)以告知路由器B可以听到。
- 当路由器B从路由器A接收到一个IIH,并且邻接三路状态设置为Initializing时,它知道这些IIH是有效地发送的,以响应其自身的IIH,并且路由器A实际上是在告诉路由器B它可以听到它。路由器B现在确定可以进行双向通信。因此,它开始发送其IIH,且邻接三向状态设置为Up。
- 当路由器A从路由器B接收到IIH,且邻接三向状态设置为Up时,它知道路由器B可以听到它。路由器A现在还可以确定双向通信的可能性,并开始在邻接三向状态设置为Up的情况下发送其IIH,从而完成三向握手。
如果两个路由器都同时发送了邻接三路状态设置为Down的IIH,并且都将状态设置为Initialize互相答复,并且都同时到达了Up状态,则将发生此步骤序列的微小变化。
实际上,此简单方法是Cisco在点对点接口上使用的默认三向握手方法,可以使用isis三向握手cisco interface命令进行配置。
IS-IS点对点链接中的数据库同步
在将邻接声明为Up之后,路由器将尝试同步其链接状态数据库。这是通过某种重量级的方式完成的:两个路由器都将其所有LSP标记为通过点对点链路泛洪;另外,它们还相互发送序列号协议数据单元(CSNP)数据包。
因为IS-IS标准假定标记为泛洪的LSP的实际传输是由定期调度的过程驱动的,所以CSNP数据包可能在LSP传输之前交换。
如果路由器从接收到的CSNP中获悉其邻居已经有一个计划发送的LSP,则该路由器将取消标记该LSP,将其从要泛洪的LSP集中删除。这样,仅邻居数据库中丢失的LSP将被发送到该数据库。另外,如果路由器从接收到的CSNP中获知邻居具有较新的或未知的LSP,它将使用PSNP数据包请求它们。
但是,重要的是,必须确认通过点对点链接发送的每个LSP,无论是在初始数据库同步期间还是在以后的任何时间更新或清除时,都必须进行确认,这是使用PSNP或CSNP数据包完成的。
因为IS-IS规范说CSNP数据包不会在点对点链路上定期交换,所以每个传输的LSP必须由邻居的相应PSNP确认。
如果邻居路由器定期发送CSNP,则其他路由器也将被视为有效确认。一些供应商甚至在点对点链接上也实施定期CSNP,以进一步提高洪泛过程的可靠性。
默认情况下,Cisco路由器在点对点接口上不使用周期性CSNP,但是如果需要,可以使用isis csnp-interval interval [level] interface命令将其激活,对于特定的路由级别,该接口的非零间隔值。
广播链路的IS-IS操作
在广播链路上,IS-IS与OSPF有许多共同之处。基本操作类似:路由器必须创建邻接关系,同步其数据库并保持同步。在以太网上,IS-IS数据包被封装到IEEE 802.2逻辑链路控制(LLC)格式的帧中,并且目标服务访问点(DSAP)和源服务访问点(SSAP)字段设置为0xFE。
所有 级别1的IS-IS 数据包都发送到组播MAC地址0180.c200.0014,而所有级别2的IS-IS数据包都使用0180.c200.0015作为目标MAC地址。
再次通过IIH数据包执行邻居检测。IS-IS路由器以类似于OSPF的方式,在通过该接口发送的IIH数据包中的广播接口上列出它在广播接口上听到的所有相邻路由器的MAC地址(或更准确地说,是SNPA)。如果路由器从邻居那里接收到IIH并找到了IIH中指示的自己的SNPA,则它知道这些路由器可以互相看见,并且可以将邻接关系移到Up状态。
如果来自邻居的IIH数据包不包含接收路由器的SNPA,则邻接关系将保持初始化状态。OSPF执行类似的操作,但是它在Hello数据包中列出了已听到的路由器的路由器ID。
IS-IS指定路由器
类似于OSPF,OSPF在每个广播网络上选择一个指定路由器(DR)和一个备用指定路由器(BDR),IS-IS也会为每个广播网络选择一个指定IS。IS-IS没有备份DIS的概念,实际上,它不需要它,我们将在后面看到。根据以下条件选择DIS:
- 接口优先级最高的路由器。
- 如果是平局,则具有最高子网连接点(SNPA)的路由器。
- 如果SNPA不匹配,则路由器具有最高的系统ID。此规则用于帧中继和ATM物理接口以及多点子接口,这些接口被IS-IS视为广播接口。在这些接口上,每个路由器都可以看到自己以及由同一数据链路连接标识符(DLCI)或虚拟路径标识符/虚拟通道标识符(VPI / VCI)标识的同一虚拟电路(VC)上的特定邻居。
接口优先级是一个数字,范围为0到127,可使用每个接口isis priority priority [level]命令配置。整个范围都可用;此范围内的数字没有特殊含义。0也是有效的优先级,并且确实将路由器排除在DIS选择之外。
此外,IS-IS中的DIS选择是抢占性的:只要连接的路由器具有比当前DIS更高的优先级,或者具有相同的优先级和更高的SNPA(或者如果SNPA如前所述不可比较,则具有相同的优先级)以及更高的系统ID),它将取代DIS角色。
DIS路由器的主要职责
该DIS路由器的主要职责是代表链路状态广播网络DAT一个基座,使网络的拓扑模型更简单。考虑下图。
如果没有伪节点,则广播网段上由六个路由器组成的网络将在链接状态数据库中表示为右上方的“密集”全网状拓扑。
六个路由器中的每个路由器都需要在其LSP中创建五个条目,指向该网段上的每个其他路由器。仅针对该单个网络,链接状态数据库将包含6 * 5 = 30个链接。通常,在单个广播网络中有N个路由器,将有N(N-1)个链接,其数量随着路由器数量的增加而呈平方增长。这将导致增加的内存占用空间并可能降低SPF计算速度。
对于伪节点,广播网络本身被表示为拓扑中的一个节点(更具体地说是伪节点),如右下方所示。生成的拓扑模型更加简单自然:每个路由器都声称它已连接到由伪节点代表的广播网络(实际上是它),并且该网络还要求与每个连接的路由器建立连接。
在此模型中,只有6 * 2 = 12个链接(每个路由器向网络通告一个链接;网络向每个路由器通告一个链接)。这正是OSPF通过其LSA2完成的工作。
要在链接状态数据库中作为伪节点存在,广播网络必须具有自己的LSP。DIS负责代表广播网络发起和泛洪伪节点LSP。回想一下,每个LSP由系统ID,伪节点ID和LSP片段号的三元组标识。还要回想一下,IS-IS路由器在内部使用一个称为本地电路ID的1字节值枚举其接口。
对于路由器LSP,系统ID带有路由器的ID,并且伪节点ID设置为0。对于网络LSP(即,伪节点LSP),系统ID是DIS的ID,而伪节点ID设置为网络中DIS接口的本地电路ID。
IS-IS广播链接中的数据库同步
广播网络中IS-IS路由器的同步非常简单。DIS在网段上以固定间隔(默认为10秒)创建并发送CSNP数据包。该CSNP数据包列出了DIS的链接状态数据库中存在的所有LSP。
网段上的其他路由器接收此CSNP并将其与自己的链接状态数据库的索引进行比较。该比较的可能结果如下(此处的路由器一词是指网段上接收和处理来自DIS的CSNP数据包的任何其他路由器):
- 路由器在其链接状态数据库中具有具有相同LSPID的LSP,并且具有相同的序列号。无需执行任何操作;确认路由器和DIS都具有相同的LSP。
- 路由器在其链接状态数据库中没有具有指示LSPID的LSP,或者DIS上的LSP序列号更高。路由器需要通过创建请求有问题的LSP的PSNP并将其转发到网段上来从DIS下载LSP。DIS将接收PSNP并泛洪请求的LSP。
- 路由器在其链接状态数据库中具有一条具有相同LSPID的LSP,但是在DIS上的序列号较低,或者DIS不会发布此LSPID。路由器只需要立即通过在网络上泛洪LSP来更新DIS。
注意此机制的简单性。DIS不是LSP的中继;它不是LSP的中继。相反,它是比较的参考点。如果路由器错过了DIS已知的LSP,或者该LSP早于DIS已知的LSP,则路由器将通过PSNP请求更新的LSP,DIS将对其进行泛洪。如果PSNP或LSP在传输过程中丢失,则该过程将重复进行。
相反,如果路由器知道比DIS知道的新的LSP,或者DIS似乎完全错过了它,则路由器将简单地将LSP泛洪到网络上。DIS不发送任何明确的确认。
如果LSP已到达,则DIS将在其下一个定期CSNP中发布它,并且此CSNP用作隐式确认。如果DIS即使在路由器已泛洪后仍不通告LSP,则它一定是在传输中丢失了,路由器将再次泛滥它。