ISIS报文及格式(2)
ISIS报文分为四大类:Hello报文、CSNP报文、PSNP报文和LSP报文;
每一类报文又分为Level-1、Level-2两种报文,Hello报文多一个p2p类型Hello,共9种报文;
ISIS报文直接基于数据链路层协议封装,每个报文由通用报头、专用报头和TLV组成;
每种报文的通用报头(前8字节)是一样的,但是专用报头根据报文的不同而不同,每种报文所支持的TLV也不同;
1、通用报头
(1)域内路由协议区分符:ISIS网络层标识,值为0x83;
(2)报头长度:通用报头和专用报头的长度;
(3)版本:当前为1;
(4)System ID长度:发送报文的路由器的System-ID长度,华为使用6字节;
(5)报文类型:ISIS报文有Hello、CSNP、PSNP和LSP四大类,9种报文;
(6)版本:当前为1;
(7)预留位:暂未使用,值为0;
(8)最大区域地址数:支持的最大区域地址数,华为是3;
2、Hello报文及格式
Hello报文用于建立和维护邻接关系;
Hello报文是周期性发送的,如果等待时间到达时还没收到邻居的Hello,就宣告邻接关系失效;
默认发送Hello时间间隔是10s,邻居关系超时时间是hello间隔的3倍;
广播链路上,DIS发送hello的频率是普通路由器的1/3倍;
Hello报文有三种:点到点hello报文、Level-1 LAN hello报文和Level-2 LAN hello报文;
点到点IIH:用于点到点网络;
L1 LAN IIH:用于广播网络Level-1邻接;
L2 LAN IIH:用于广播网络Level0-2邻接;
在LAN(广播网络)和P2P(点到点网络)中形成邻接关系的过程稍有不同,所以使用的Hello报文也有些区别。
LAN hello报文格式
(1)Circuit Type:表示发送端接口的层次,Level-1 or Level-2;
(2)System-ID:表示发送端路由器的系统ID;
(3)Holding Timer:表示发送端路由器邻接关系失效的超时时间,缺省Hello时间的3倍;
(4)PDU Length:表示整个ISIS报文的长度;
(5)Priority:表示发送端接口的优先级,用来在LAN中选举DIS,缺省为64;
(6)System ID(DIS):表示发送端接口所在网段上DIS的系统ID;
(7)Area Address:表示发送端路由器的区域地址;
(8)IS Neighbor:表示发送端路由器的邻居MAC地址;
(9)IP Interface Address:表示发送端路由器所有启动ISIS进程的接口IP地址;
(10)Protocols Supported:表示发送端路由器支持的网络层协议;
(11)Restart Signaling:表示发送端路由器是否支持GR;
(12)Multi Topology:表示发送端路由器是否支持多拓扑;
(13)Padding:用于将hello报文填充至MTU大小;
P2P Hello报文格式
通过对比LAN和P2P网络的hello报文,可以发现:
(1)P2P hello报头中没有Priority和System(DIS)这两个字段,原因是P2P网络中不需要DIS,同时P2P hello报头中新增了一个Local Circuit ID字段,用来表示发送端接口;
(2)P2P hello携带了一个点对点邻接状态,这个字段携带了发送端路由器所有邻居系统ID、发送端接口ID及其邻接状态,在LAN hello报文中,等价的字段是IS Neighbor字段,这个字段表明了发送端路由器的所有邻居MAC地址;
3、CSNP报文及格式
CSNP报文用来描述LSDB,类似于OSPF的DD报文;
CSNP报文携带当前路由器LSDB中所有LSP的摘要信息;
摘要信息包括LSP ID、序列号、剩余生存时间和校验和;
(1)PDU length:整个CSNP报文的长度;
(2)Source-ID:发送端路由器的系统ID;
在P2P网络中,双方都会发送CSNP报文,在广播网络中,只有DIS会发送CSNP报文;
(3)Start LSP-ID:表示CSNP报文描述的LSP条目中第一条LSP的LSP-ID;
(4)End LSP-ID:表示CSNP报文描述的LSP条目中最后一条LSP的LSP-ID;
(5)LSP Entries:LSP条目,用来携带LSP摘要信息;
LSP摘要信息(LSP-ID、序列号、剩余生存时间和校验和),用来比较LSP新旧;
所有LSP的摘要信息按LSP-ID的升序依次排列在LSP条目中;
由于有些链路状态数据库的信息较多,单个CSNP报文不能完整描述,所以CSNP报文引入Start LSP-ID和End LSP-ID两个字段,用来说明一个CSNP报文所描述的LSP范围;
如果一个CSNP报文描述了整个LSDB中的信息,LSP-ID就起始于0000.0000.0000.00,结束于FFFF.FFFF.FFFF;
4、PSNP报文及格式
PSNP报文用来请求缺失或最新的LSP,在点对点网络中确认收到的LSP;
PSNP类似于OSPF中的LSR、LSAck两个报文;
PSNP报文携带部分LSP的摘要信息;
5、LSP报文及格式
LSP报文用来描述链路状态和路由信息,类似于OSPF中的LSA;
(1)PDU长度:表示整个LSP报文的长度;
(2)Remaining Lifetime:剩余生存时间,表示LSP到期之前的生存时间;
(3)LSP-ID:由源路由器的系统ID、伪节点ID和LSP分片号组成,在LSDB中唯一标识一条LSP;
(4)Sequence Number:LSP的序列号,4字节的无符号整数;
(5)Checksum:从Sys-ID开始到报文末尾所有字段的校验和;
(6)Type block标志位:
Partition Repair:区域修复位,表示是否支持区域修复,只在L2 LSP中生效;
Attachment:区域关联位,表示源路由器是否与多个区域相连;
Overload bit:超载位,表示源路由器内存和CPU资源已经严重不足;
IS Type:路由器类型,表示源路由器是L1路由器还是L2路由器;
1、LSP ID详解
LSP ID用来在LSDB中唯一标识一条LSP;
LSP ID总长8字节,由6字节系统ID、1字节伪节点ID和1字节LSP分片号组成;
伪节点ID值为0,表示LSP是由普通路由器发出的,非0表示LSP是由DIS发出的;
同时,系统ID和伪节点ID一起组成LAN ID;
一台路由器会把本区域的所有路由信息都放在一条LSP传送,如果路由信息很多,会导致LSP报文很大以至于超过发出接口的MTU,就需要将路由信息放在不同分段的LSP传送;
LSP第一个分段编号为0,第二个分段编号为1,如果某些分段在传递过程中丢失了,接收路由器会丢弃所有分段,LSP所有分段发生重传;
LSP ID主机名映射功能,可以使用主机名替换系统ID,动态主机名映射通过LSP报文发送,静态主机名映射仅在本地生效;
2、LSP序列号详解
LSP序列号用来表示被刷新的次数,是一个4字节长的无符号整数,从0开始计数,但是一台路由器启动ISIS进程后,第一次生成LSP序列号是1,以后LSP每重新生成(刷新)一次,序列号加1,最大值2的32次方减1;
假设路由器使用最新的LSP刷新间隔30s来不断生成新的LSP,需要约4085年才能耗完序列号;
当LSP序列号到达最大值,路由器的ISIS进程会停止LSP最大生成时间+零生存时间的时间,直到这条LSP在网络其他路由器的LSDB中老化并清除,接着路由器重新启动后生成一条序列号为1的新的LSP;
3、LSP校验和详解
校验和用来在接收端路由器上进行完整性检查,确保LSP在传送过程中没有被损坏;
校验和是利用校验和算法根据LSP中剩余生存时间字段之后到报文最后的内容计数出来的,这个值会在LSP源路由器计算一次,然后将结果放在校验和字段中:
LSP的接收路由器也会根据同样的算法和内容计算出一个校验和的值,用这个值和收到的校验和值进行比较,如果一致,说明报文是完整的;如果校验和不一致,说明LSP损坏了,丢弃该LSP;
4、LSP剩余生存时间详解
LSP最大生存时间为1200s,源路由器产生LSP时,会将剩余生成时间设置到最大年龄值,然后泛洪到区域中,这条LSP被存储在数据库中,它的剩余生成时间随着时间的推移而逐渐减少,如果没有及时得到刷新,这条LSP的剩余生存时间减少到0时,会从数据库中清除;
ISIS和OSPF一样,有周期性刷新,每隔900s刷新一次,当一条LSP收到源路由器的刷新时,剩余生存时间被重置到最大生存时间;
如果LSP没有得到及时刷新,LSP的剩余生存时间会逐渐减少到0,路由器在等待零生存时间60s,如果始发路由器还没发来更新,那么该LSP会被清除掉;
5、区域关联位ATT
(1)L1/2通告ATT置1的L1 LSP的条件是至少在骨干区域有一个活动的L2邻接;
(2)一台L1/2路由器在向L1区域通告的LSP中将ATT位设置为1,向L1区域内的路由器表明它具有到其他区域的路由信息;
(3)L1路由器根据这条LSP,生成一条指向最近的L1/2路由器的默认路由,用于将数据包发向其他区域;
(4)根据实际需要,配置L1/2是否通告ATT置位的LSP;
attached-bit advertise命令配置能让L1/2路由器在通告的L1 LSP中永远不设置ATT位;
attached-bit avoid-learing配置在接收到ATT置1的L1 LSP时,L1路由器不生成默认路由;
6、区域修复位Partition Repair
OSPF协议要求网络中的区域是连续的,并且只能有一个区域0,如果区域0不连续或其他区域没有直接连接区域0,需要使用虚链路来修复;
ISIS协议的区域修复是指L1区域被分裂后的修复,如果该位置1,表示源路由支持区域修复;
一个L1区域修复需要通过骨干区域(L2区域),通过骨干区域创建虚连接实现L1区域的修复,虚连接的端点是在该L1区域的两台L1/2路由器上,它们产生的L2 LSP会将P位置1;
7、过载位Overload
Overload位置1,表示源路由器的CPU和内存资源已经不足,数据流经过这台设备时可能得不到正常的转发;
如果一台路由器收到了Overload位置1的LSP,那么它在进行SPF计算时不会以过载的那台路由器作为中间转发设备,除了去往那台过载路由器的直连网络外;
设备可以自动进入过载状态(比如设备工作异常),在过载状态下,设备会删除所有引入或渗透进来的路由信息;
也可以通过手工设置让设备进入过载状态,比如在设备需要升级或维护时,需要将业务切换到其他路径转发;
OL位扩展应用示例:
由于ISIS协议向AS100下发默认路由,假设某一天,R2需要升级或维护,设备重启后,由于ISIS协议先启动BGP后启动,所以当AS100内部路由器有了R2的默认路由后,会将去往AS200的数据流发往R2,而此时R2的BGP还没完全收敛,数据包到达R2时就会被丢弃,导致路由黑洞;
(1)set-overload on-starup命令配置路由器重启时设置Overload位的时间,超过这个时间后,Overload位清除;
(2)set-overload wait-for-bgp命令配置路由器只有在BGP收敛完成后,才清除Overload位;