ISIS报文结构
因为IS-IS协议是基于链路层的,所以IS-IS报文直接封装在链路层报文中。所有的IS-IS报文由三部分组成:IS-IS通用头,PDU固定专用头和PDU TLV,其中IS-IS通用头是8个字节,这部分所有的IS-IS报文都包含;PDU固定专用头由不同的PDU决定(这点与OSPF类似),不同类型的PDU长度不一致,详见各类PDU的报文结构;PDU TLV是变化的,由不同PDU携带的TLV决定。
IS-IS通用头格式
所有的PDU都有相同的通用头部,通用头部的格式如下:
Intra-domain Routing Protocol Discriminator: 用于标识网络层协议数据单元,在IS-IS中,该字段值固定为0x83;
Length Indicator: 标识固定头部的长度。固定头部长度由两部分组成,IS-IS通用头和PDU固定头;
Version/Protocol ID Extension: 固定是1;
ID Length: 标识system id的长度;
- 0 表示system ID长度是6个字节
- 255 表示system ID的长度是0
- 1~8 ID的长度
PDU type: 用来标识PDU类型,IS-IS PDU可以分为3大类:IIH、LSP和SNP,详细如下:
IS-IS PDU 报文类型 | 类型号 | 全称 | 作用 |
---|---|---|---|
IIH | 15 | Level 1 LAN IS to IS Hello PDU | 在广播网络上发现、保活层一邻居 |
16 | Level 2 LAN IS to IS Hello PDU | 在广播网络上发现、保活层二邻居 | |
17 | Point-to-Point IS to IS Hello PDU | 在点对点网络上发现、保活层一、层二邻居 | |
LSP | 18 | Level 1 Link State PDU | 在层一区域内发布路由信息 |
20 | Level 2 Link State PDU | 在层二区域内发布路由信息 | |
SNP | 24 | Level 1 Complete Sequence Numbers PDU | 向层一邻居通告自己数据库缩略描述信息 |
25 | Level 2 Complete Sequence Numbers PDU | 向层二邻居通告自己数据库缩略描述信息 | |
26 | Level 1 Partial Sequence Numbers PDU | 向层一邻居请求或确认LSP报文 | |
27 | Level 2 Partial Sequence Numbers PDU | 向层二邻居请求或确认LSP报文 |
Version: 固定是1;
Maximum Area Address: 最大区域地址数,目前该字段固定是0,表示最多支持3个区域地址。
Hello
在IS-IS中也称为IIH(is-is hello),用于建立和维护邻居关系。有Level-1 IIH/Level-2 IIH/P2P IIH三种,三种PDU的专用头部都存在一些区别。
LAN IIH的报文结构如下:
reserved/circuit type:高位的6bit保留,低位的2bit表示路由器的类型(01表示Level-1,10表示Level-2,11表示Level-1-2);
source ID:发出hello报文的路由器的systemID;
holding time:保持时间,在此时间内没有收到邻居发来的hello报文则中止已经建立的邻居关系;
PDU length:PDU的总长度,单位是字节,指包含通用头,PDU专属固定头和TLV可变部分的总长度;
priority:选举DIS的优先级,越大越优;
LAN ID:包括DIS的systemID和一字节的伪节点。
P2P IIH的报文结构:
与LAN IIH的区别是没有了priority和LAN ID,而多了local circuit ID。表示的是本地链路ID。
LSP
用于交换链路状态信息,Level-1和Level-2 LSP报文结构是一样的,如下:
PDU length:PDU的总长度,同hello报文里面的长度一样;
remaining lifetime:LSP的生存时间,以秒为单位;
LSP ID:由三部分组成,systemID、伪节点ID、LSP分片后的编号(一个字节);
sequence number:LSP的序列号;
P:partition repair,1bit,仅与Level-2 LSP有关,表示路由器是否支持自动修复区域分割;
ATT:attachment,4bit,由Level-1-2路由器产生,用来指明始发路由器是否与其他区域相连,虽然此标志也存在于Level-1和Level-2的LSP中,但实际上只与Level-1-2有关,表明相连区域所使用的度量方式。从右到左这4位分别表示:
- 第4位,缺省度量;
- 第5位,时延度量;
- 第6位,代价度量;
- 第7位,差错度量。
OL:LSDB overload,1bit,过载标志位,设置了过载标志位的LSP虽然还是会在网络中扩散,但是在计算超载路由器的路由时不会采用。也就是说该路由器设置了过载位之后,其他的路由器进行SPF计算的时候不会考虑这台路由器。当路由器内存不足时,系统会自动发送过载位置1的LSP。
IS type:2bit,生成LSP的路由器的类型(01表示Level-1,11表示Level-2)。
SNP
CSNP
是SNP(sequence number PDU)的一种,SNP用来描述全部或者部分数据库的LSP来同步个LSDB,从而维护LSDB。
CSNP包含LSDB中所有LSP的摘要信息,从而可以在相邻路由器间保持LSDB的同步。在广播网络上,CSNP由DIS定期发送;在P2P链路上,CSNP只在第一次建立邻居关系的时候发送。
报文结构如下:
source ID:发出SNP报文的路由器的system ID;
start LSP ID:CSNP报文中第一个LSP的ID值;
end LSP ID:CSNP报文中最后一个LSP的ID值。
PSNP
SNP报文的另外一种就是PSNP,它只列举最近收到的一个或者多个LSP的序号,它能够一次对多个LSP进行确认,当发现LSDB不同步时,也用PSNP来请求邻居发送新的LSP。和CSNP一样,PSNP在报头中利用LSP ID,sequence number,remaining lifetime,LSP checksum来描述LSP。它的主要功能:
- 在点到点链路上路由器用来相互交换作为ACK应答以确认收到某个LSP;
- 用来请求发送最新的LSP,当路由器从邻近接收到CSNP时,注意到CSNP丢失了部分数据库(或者自己的比较旧),路由器发送PSNP来请求最新的LSP;
报文结构:
source ID:发出SNP报文的路由器的system ID;
TLV
以上是IS-IS报文结构中固定的部分,除了固定的部分,每个报文还会携带TLV传递信息。
而且IS-IS协议规定,对于不能识别的TLV的动作是忽略,而不是丢弃。
IS-IS定义的TLV类型及作用表:
TLV Code | 名称 | 所应用的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 | LSP摘要信息 |
10 | Authentication Information | IIH、LSP、SNP | |
128 | IP Internal Reachability Information | LSP | 表示内部路由信息 |
129 | Protocols Supported | IIH、LSP | 表示支持的网络协议NLPID(Network Layer Protocol Identifiers) ipv4-0xcc ipv6-0x8e |
130 | IP External Reachability Information | L2 LSP | 表示外部路由信息,因此只有L2携带,格式同内部是一样的。 |
131 | Inter-Domain Routing Protocol Information | L2 LSP | |
132 | IP Interface Address | IIH、LSP | 表示接口的IP地址 |