IS-IS报文格式分析

IS-IS报文类型:

IS-IS路由协议和其他路由协议不同,他直接运行在数据链路层上,对等路由器间通过PDU来传递链路状态信息,完成链路状态PDU数据库(LSDB的同步),如下是IS-IS中主要的PDU类型,主要分为3大类:
在这里插入图片描述
以上这些IS-IS PDU都包括一个报头和可变长字段两部分。报头又包括“通用报头”和“专用报头”。对所有PDU来说,通用报头是相同的,专用报头根据不同PDU类型而不同。总体的IS-IS PDU结构如图所示:
在这里插入图片描述
以hello报文作说明:
在这里插入图片描述

通用报头的格式和字段:

在这里插入图片描述

  1. Intra domain routing protocol discriminator
    •IS-IS PDU中,该字段不变,都为0x83。

  2. PDU header length indicator
    •标识该固定头部字段的长度。包括通用报头和各种PDU的专用报头两部分的长度,以字节为单位。

  3. Version/protocol ID extension
    •版本/协议ID拓展,占一个字节,目前始终为1。

  4. System ID length
    •用来表示system ID长度,固定为6B。

  5. PDU type
    •标识PDU类型。15表示 L1 LAN IIH;值为16表示L2 LAN IIH;值为18表示L1 LSP,20表示L2 LSP;值为24表示L1 CSNP;值为25表示L2 CSNP;值为26表示L1 PSNP;值为27表示L2 CSNP。

  6. Version
    •该字段和上一个version字段一样,目前仍然为1

  7. Reserve
    •当前设置为全0。

  8. Max areas
    •表示该IS所支持的最大区域数量,该字段为3表示所支持的最大区域地址数为3,默认情况下为0。

抓包信息:
在这里插入图片描述

可变长字段TLV:

专用报头会在介绍IS-IS具体每种报文结构时再详细说明。除了专用报头,每种IS-IS报文仅支持特定的TLV字段,这些TLV字段在数据包中是可选的,IS-IS 协议正因为起初是基于TLV设计的,所以很方便日后的功能扩展。TLV也称为CLV(Code-Length-Value),这些可变长字段才是真正的PDU报文的内容部分。
在这里插入图片描述

下图中包括了一些常用的TLV:
在这里插入图片描述

更多关于TLV的信息会在介绍IS-IS每种报文时说明。

HELLO PDU:

IIH PDU用来建立和维持IS-IS路由器之间的邻接关系。IIH PDU包括IS-IS PDU通用报头、IIH专用报头和可变长字段三部分。在IIH专用报头部分包括了发送者的系统ID、分配的区域地址和发送路由器已知的链路上邻接标识。不同IIH报文使用场景:

  1. 广播网中的Level-1 IS-IS使用Level-1 LAN IIH。
  2. 广播网中的Level-2 IS-IS使用Level-2 LAN IIH。
  3. 非广播网络中则使用P2P IIH。

P2P IIH中相对于LAN IIH来说,多了一个表示本地链路ID 的Local Circuit ID字段,缺少了表示广播网中DIS的优先级的Priority字段以及表示DIS和伪节点System ID的LAN ID 字段。通过填充字段将IIH报文扩展到MTU大小,用于邻居之间协商发送报文的大小。

通过填充字段将IIH报文扩展到MTU大小,用于邻居之间协商发送报文的大小。

Broadcast环境下IIH报文格式:
在这里插入图片描述
专用报头:

  1. Reserved
    •保留的6bit位=0。
  2. Circuit Type
    •电路类型。01表示L1路由器,10表示L2路由器,11表示L1/2路由器。
  3. Source ID
    •源ID。发送该PDU的路由器的SysID。
  4. Holding Time
    •保持时间。用来通知它的邻居路由器在认为这台路由器失效之前应该等该的时间。如果在保持时间内收到邻居发送的Hello PDU,将认为邻居依然处于存活状态。这个保持时间就相当于OSPF中的dead interval(死亡间隔)。在IS-IS中,默认情况下保持时间是发送Hello PDU间隔的3倍,但是在配置保持时间时,是通过指定一个Hello报文乘数(hello-multiplier)进行配置的。默认为hello的时间为10s,所以对应的hold time为30s(OSPF的dead time为40s)。取值范围为3~255秒。
  5. PDU Length
    •PDU长度。整个PDU报文的长度。包括固定报头和TLV字段。
  6. Priority(独有)
    •优先级。接口的DIS优先级,用来在广播LAN中选举DIS。优先级数值越高,路由器成为DIS的可能性越大。(范围为0-127,默认为64)
  7. LAN ID(独有)
    •局域网ID。由DIS的SysID与1字节的伪节点ID组成,LAN ID用来区分同一台DIS上的不同LAN。

可变长字段(TLV):
在这里插入图片描述

  1. Area Address
    • 区域地址。标识了发送端路由器的区域,使用类型1的TLV。
  2. IS Neighbor
    •邻居列表。标识了发送端路由器的邻居,这里是邻居的MAC地址,使用类型6的TLV。
  3. IP Interface Address (es)
    •接口IP地址。标识了发送端路由器所有已经启动了IS-IS进程的接口IP地址,使用类型为132的TLV。
  4. Protocols Supported
    •支持的协议。表示发送端路由器所支持的网络层协议,使用类型129的TLV。
  5. Restart Signaling
    • 重启信令。表示发送端路由器是否支持GR。
  6. MultiTopology
    •多拓扑。表示发送端路由器是否支持多拓扑。
  7. Padding (填充)
    •填充字段,用于将Hello包填充至MTU大小,使用类型8的TLV。

点到点环境下IIH报文格式:
在这里插入图片描述
专用报头:

  1. Circuit type
    •表示发送该PDU的层级。如果改为被置位0,那么该PDU将被忽略。

  2. System ID(发送该PDU的IS)
    •是指始发该IIH的路由器的系统ID。

  3. Holding time
    •是指邻居路由器等待始发路由器发送下一个IIH的时间间隔。发送时间和Broadcast环境中一样。

  4. PDU length
    •是指整个PDU数据包的长度。

  5. Local circuit ID(独有)
    •由始发路由器发送hello数据包时分配给这条电路,并且在路由器的接口上是唯一的。在点到点链路的另一端,hello数据包中的电路ID可能包含也可能不包含相同的值。

可变长字段(TLV):
在这里插入图片描述
通过对比LAN和P2P网络的Hello报文,可以发现,P2P Hello报头中没有Priority和 LAN ID这两个字段,原因是P2P网络中不需要DIS;同时P2P Hello 报头中新增了一个Local Circuit ID (本地电路ID)字段,用来标识发送端接口。

此外,在TLV字段中,P2P Hello携带了一个点对点邻接状态: Point-to point Adjacency State,这个字段携带了发送端路由器所有邻居System-ID及其邻接状态,用来保证建立邻接关系的可靠性,使用类型240的TLV来承载信息;在LAN Hello 报文中,等价的字段是IS Neighbor字段,这个字段只表明了发送端路由器的所有邻居MAC地址。

不管在哪一种网络中,Hello 报文都是周期性发送的,用于维持邻接关系。如果等待时间到达时还没收到邻居的Hello,就宣告邻接关系失效。默认发送Hello的时间间隔为10s,邻接关系的超时时间(Hold-timer) 是Hello间隔的3倍。但是在广播链路上,DIS发送Hello的频率是普通路由器的1/3倍(每3.3333秒发送一次Hello)。接口下可以修改Hello间隔时间及超时时间。

LSP PDU:

类比于OSPF的LSA报文的作用。从本质上讲,IS-IS 的LSP和OSPF的LSA的功能是一样的,L1的LSP用来描述L1区域内的链路状态和路由信息,L2的LSP用来描述L2区域的链路状态和路由信息,这两种LSP在报文格式上是差不多的。其中:

  1. Level-1 LSP(类型号为18)由Level-1 IS-IS传送。
  2. Level-2 LSP(类型号为20)由Level-2 IS-IS传送。
  3. Level-1-2 IS-IS 则可传送以上两种LSP。

LSP报文格式:
在这里插入图片描述
专用报头:

  1. PDU length
    •整个PDU的长度。

  2. Remaining lifetime
    •LSP过期前等待的秒数,默认为1200s,当生存时间为0的时候就被删除。

  3. LSP ID
    •可以是系统ID、伪节点ID或者LSP数据包的LSP编号。它分为三部分:source ID,Pseudonode ID(简称为PN-ID,伪节点ID,普通路由器的伪节点ID为0)和LSP Number(LSP序列号,也就是LSP的分片号,简称为Frag-Nr),LSP分片号的作用是当LSP一次性发送不完的时候,就可以通过分片继续发送,如下举例:
    •0000.0000.0001.00-00 常规LSP。
    •0000.0000.0001.01-00 伪节点LSP。同一个网段只有一个伪节点,同一个设备在不同网段都为伪节点时PN-ID会增加,例如为02都是其他网段的伪节点。
    •0000.0000.0001.00-01 常规LSP的一个分片。对于分片我们可以这么理解:当发送LSP报文因为MTU值的限制,不能一次性发送,那么可以进行分片发送。不同的LSP通过seq序号进行分别,同一序号的LSP报文可以分片为0x01-0xFF个报文,如果在拓展报文中可以拓展为256X256个报文。

  4. Sequence number
    •LSP的序列号。从0开始,每次加1,最大为2^32-1。

  5. Checksum
    •校验和字段,占2个字节,用于接收端校验传送的LSP PDU的完整性和正确性。如果发现校验和不一致,那么说明ISP在传输环境中已经被破坏,不再接受和泛洪。

  6. P
    •Partition,分区。表示区域划分或者分段区域的修复位。当P位被设置为1时,表明始发路由器支持自动修复区域的分段况。

  7. ATT
    •Attached,区域关联。L1/L2路由器在其生成的L1 LSP中设置该字段以通知同一区域中的L1路由器自己与其他区域相连。通常来说就是L2骨干区域相连。当L1区域中的路由器收到L1/2路由器发送的ATT位被置位的L1 LSP后,它将创建一条指向L1/2路由器的默认路由,以便数据可以被路由到其他区域(一般情况下不会保存其他区域的路由)。虽然ATT位同时在L1 LSP和L2 LSP中进行了定义,但是它只会在L1 LSP中被置位,并且只有L1/2路由器会设置这个字段。

  8. OL
    •Overload,超载。表示路由器的资源状态。如果该bit被置位,就表示路由器发生了超载。超载是指路由器没有足够的系统资源(CPU资源和内存资源)用来处理路由选择交换信息。被设置了超载位的LSP不会在网络中进行泛洪,并且当其他路由器收到设置了超载位的LSP后,在计算路径信息时不会考虑此LSP,因此最终计算出来的到达目的地的路径将绕过超载的路由器。设置超载位还可以使数据的传输路径绕过某个特定的路由器。之后进行 相应的补充。

  9. IS Type
    •中间系统类型。该字段表示了此LSP是来自L1路由器还是L2路由器。这也表示了收到此LSP的路由器将把这个LSP放到L1链路状态数据库还是L2链路状态数据库。01表示L1,11表示L2,00与10未使用。

L1 LSP可变长字段(TLV):
在这里插入图片描述

  1. Area Address (区域地址)
    •标识了发送端路由器的区域,使用类型1的TLV,这里是49.0001。

  2. Protocol supported
    •表示发送端路由器所支持的网络层协议,使用类型129的TLV,这里表示是IP环境。

  3. Host name
    •主机名。这里是R1。

  4. IP interface address
    •IP接口地址。使用类型132的TLV,这里表示是IP环境。 描述启动了IS-IS进程的接口IP地址,这里是12.1.1.1。

  5. IP Internal reachablity
    •内部路由可达信息。使用类型128的TLV,描述了区域内的路由信息。

  6. IS Neighbor
    •邻居列表。标识了发送端路由器的邻居,使用类型2的TLV(区别Hello报文中的这个字段),使用的是邻居的system ID+SEL地址表示邻居。

L2 LSP可变长字段(TLV):
相比于L1 LSP的TLV字段,L2 LSP主要多了两种TLV,第一种是:IP External reachablity。
在这里插入图片描述

IP External reachablity:用来携带路由域外的IS-IS路由信息,例如当将其他路由协议条目重分发进入IS-IS区域中时(或者将L2路由泄露进入L1区域中),由支持L2的IS-IS路由设备产生,type字段为130。

第二种是:Inter-Domain Routing Protocol Information
域间路由选择协议(IRDP)信息TLV只用于L2 LSP中。type字段为131,IETF定义此TLV用于支持在IS-IS路由域边界上与其他域间路由选择协议的交互,用来透传来自外部路由选择协议的信息。

SNP:

SNP PDU通过描述全部或部分数据库中的LSP来同步各LSDB,从而维护相同区域中级别LSDB的完整同步,类似与OSPF中的DD报文。SNP包括CSNP(完全序列号 PDU)和PSNP(部分序列号PDU)。

PSNP只列举最近收到的一个或多个LSP的序号,主要作用是:在广播网络和点对点网络中请求缺失或最新的LSP;在点对点网络中确认收到的LSP。

CSNP包括某个级别中LSDB中所有LSP的摘要信息,从而可以在相邻路由器间保持LSDB的同步。在广播网络上,CSNP由DIS定期发送(缺省的发送周期为10 秒);在点到点链路上,CSNP 只在第一次建立邻接关系时发送。

CSNP和PSNP分部也分为L1 CSNP(类型号为24),L2 CSNP(类型号为25),L1 PSNP(类型号为26)和L2 PSNP(类型号为27)。

CSNP报文格式:
在这里插入图片描述
专用报头:

  1. PDU length
    •整个PDU的长度,包括通用报头。

  2. Source-ID
    •始发路由器系统ID,也就是systemID。

  3. Start LSP-ID,End LSP-ID(仅此报文中存在)
    •由于有些链路状态数据库的信息较多,单个CSNP报文不能完整描述,所以CSNP报文引入了Start LSP-ID 和End LSP-ID 两个字段,用来说明一个CSNP报文所描述的LSP的范围。一个CSNP报文如果描述了整个链路状态数据库中的信息,那么它描述的LSP-ID 就起始于00.0000.0000-00, 结束于FFFF.FFFF.FFFF-FF。
    •开始于0000.0000.0000.00-00。
    •结束于ffff.ffff.ffff.ff-ff。

可变长字段(TLV):
在这里插入图片描述

  1. LSP entries(LSP 条目)
    •LSP条目,使用类型9的TLV, 用来携带描述的LSP摘要信息,内容包括:LSP-ID、sequence、Life-time、checksum。

PSNP报文格式:
在这里插入图片描述
专用报头:

  1. PDU length
    •整个PDU的长度。

  2. Source-ID
    •始发路由器系统ID。

可变长字段(TLV):
在这里插入图片描述
内容和CSNP类似,只是LSP entries字段只是部分的摘要信息。

参考资料:华为hedex文档、《HCIE路由交换学习指南》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

格洛米爱学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值