IS-IS定义了四种基本的数据包类型:
- Hello包
- 链接状态PDU
- 完整序列号PDU
- 部分序列号PDU
为了便于理解,我们经常将IS-IS数据包类型与OSPF 数据包类型进行比较 ,并利用它们的相似性和差异,假设读者已经非常了解OSPF数据包,它们的用途和内容。
但是,OSPF和IS-IS是独立开发的,此处的任何比较仅用于强调相似点和不同点,而不应以任何方式暗示一种协议或多或少成功地模仿了另一种协议。
IS-IS Hello报文
Hello数据包,也称为IIH(IS-IS Hello),用于执行以下常规任务:检测相邻路由器(以及它们的丢失),验证双向可见性,建立和维护邻接关系以及选择指定的IS(DIS-类似到OSPF中的指定路由器)。
在广播类型的接口上,IS-IS路由器将单独的Hello数据包类型用于L1和L2邻接。在点对点类型的接口上,出于效率考虑,使用了一个L1 L2 Hello,也称为点对点Hello。
缺省情况下,每台路由器每10秒发送一次Hello报文。对于特定的路由级别,可以使用每个接口的isis hello-interval seconds [level]命令在1到65535秒的范围内配置间隔。Hello乘数不是直接定义Hold计时器,而是使用Hello乘以Hello乘数来计算Hold时间。
Hello乘数的默认值为3,因此保留时间为30秒。可以通过每个接口的isis hello-multiplier multiplier [level]命令更改乘数值。与OSPF相反,计时器不需要在相邻路由器上进行匹配。
在DIS上,各个计时器始终是已配置计时器(使用默认设置)的三分之一-DIS每10/3 = 3.333秒发送一次Hello,而Hold间隔为30/3 = 10秒。
例如,将设置更改为6秒钟的Hello时间和4的Hello倍数,DIS将每6/3 = 2秒发送一次Hello数据包,并通告24/3 = 8秒的保持间隔。这样做是为了更轻松地检测DIS或其中断。
IS-IS数据包:链路状态PDU
链路状态协议数据单元(LSP)用于通告路由信息。LSP模糊地类似于包含一个或多个链接状态公告的OSPF链接状态更新数据包。但是,OSPF LSU / LSA和IS-IS LSP之间存在显着差异。
在OSPF中,链接状态数据库中最小的独立元素是LSA(请注意,LSA本身不是数据包)。OSPF中有多种类型的LSA,每种类型描述一种不同类型的网络对象。在IS-IS中,链路状态数据库中最小的独立元素是整个LSP。
没有不同类型的LSP可以描述不同的网络对象。相反,它们由LSP大小可变的有效载荷内的不同的Type-Length-Value(TLV)记录描述。
与通过其类型和链路状态ID唯一标识的OSPF LSA相似,IS-IS LSP也通过由三部分组成的数字唯一标识:
- 发起此LSP的路由器的系统ID(6个八位字节;取自路由器的NET地址)。
- 在区分路由器本身的LSP和路由器为指定IS(1个八位字节)的多址网络的LSP之间进行区分的伪节点ID。
- LSP编号,表示此LSP的片段编号(1个八位位组)。LSP编号也简称为Fragment Number或简称Fragment。
对于描述路由器本身的LSP,伪节点ID始终设置为0。伪节点LSP和伪节点ID的含义将在本章稍后说明。对于每个路由级别,路由器都会生成一个独立的LSP,即,根据路由器所处的级别,分别为级别1和级别2生成单独的LSP。
为了区分同一条LSP的不同版本,每个LSP都有一个序列号-一个32位无符号整数,从0x00000001开始,以0xFFFFFFFF结尾。对LSP的每次修改都伴随着其序列号的增加。如果两个具有相同LSPID的LSP具有不同的序列号,则具有较高序列号的LSP是较新的。
LSP寿命
每个LSP都有一个与之关联的剩余生存时间值。最初时,“剩余寿命”设置为1200秒(20分钟),并减少。IS-IS路由器每15分钟刷新一次其自创建的LSP。
如果LSP的剩余生存时间减少到0,则路由器将从链接状态数据库中删除LSP的主体,仅保留其标头,并发布将剩余生存时间设置为0的空LSP。将剩余生存时间设置为空的LSP设为0称为LSP清除。
但是,清除LSP的路由器仍不会从其链接状态数据库中清除LSP。在称为ZeroAgeLifetime的附加时间设置为60秒之后,可以从链接状态数据库中清除过期的LSP。
这样做是为了确保在清除的LSP已安全传播到所有邻居之前,保留LSP的标头。但是,Cisco路由器似乎又将空LSP标头保留了20分钟。
IS-IS中的MTU
因为IS-IS消息直接封装到最大有效载荷大小(最大传输单元(MTU))受到限制的第2层帧中,所以IS-IS必须为大小超过MTU的LSP实现自己的分段功能。
这种分裂是以相对直接的方式完成的。每个LSP由一个固定大小的标头和一个可变大小的主体组成,主体包含一个或多个TLV记录,这些记录携带实际的寻址和拓扑信息。
如果将所有TLV记录放入单个LSP中会导致其超过MTU,则路由器将简单地创建多个LSP。它们中的每一个都将携带要发布的TLV记录的特定子集,以便不超过MTU。这些LSP用相同的系统和伪节点ID标识,并以递增的LSP编号作为分片编号,从0开始。
一个重要的事实是,这种分段仅由发起LSP的路由器执行。
LSP泛洪后,不得再由其他任何路由器对其进行修改,也不得对其进行碎片整理和/或重新整理碎片。该规则的结果是,在LSP的整个泛洪范围(一级LSP的区域,或所有二级路由器以及它们与二级LSP的互连)中,接口上的MTU必须相同。
如果不能满足此要求,则必须手动配置IS-IS路由器,以使每个LSP不大于最小MTU。
完整和部分序列号PDU
完整序列号PDU(CSNP)和部分序列号PDU(PSNP)数据包用于同步链接状态数据库。这些消息的名称中的序列号术语指的是LSPID值的范围,即有关这些数据包携带信息的一组LSP,并且与各个LSP数据包中的序列号无关。
CSNP数据包的功能与OSPF数据库描述数据包非常相似。CSNP数据包的目的是在发送者的链接状态数据库中通告LSP的完整列表。CSNP数据包的接收站可以将其链接状态数据库内容与CSNP中的LSP列表进行比较,并执行适当的操作-如果有新的或丢失的LSP,则注入新的或丢失的LSP;如果发现自己的LSP丢失,则请求LSP数据库。
如果发件人的链接状态数据库包含如此多的LSP,以至于所有这些LSP都在单个CSNP数据包中列出,则会导致其超过MTU,则将发送多个CSNP。为此,首先将要通告的各个LSPID按升序排序为整数。每个CSNP包含有关此CSNP描述的开始LSPID和结束LSPID的信息。
可能的LSPID的全部范围都从0000.0000.0000开始。00-00(粗体部分是系统ID,下一个八位位组是伪节点ID,破折号后的八位位组是LSP编号ID),并以FFFF.FFFF.FFFF.FF-FF的值结尾。如果可以在单个CSNP中列出所有LSP,则“开始”和“结束” LSPID将使用这些各自的值。
如果有必要发送更多的CSNP,则第一个CSNP将具有0000.0000.0000 .00-00作为开始LSPID,而结束LSPID将被设置为该CSNP中最后一个条目的LSPID。