Skip to main content
  1. Network Articles/
  2. IS-IS Articles/

IS-IS Packet Types and Header Format

Table of Contents

IS-IS Packet Types and Header Format

IS-IS does everything from neighbour discovery to database synchronization with its own packets (the protocol as a whole is covered in What Is IS-IS). ISO/IEC 10589 calls them PDUs (Protocol Data Units); this article says “packet” to match the IP vocabulary.

Compared with OSPF, IS-IS packets stand out in one way: the header is very short and almost everything else is a TLV (Type-Length-Value). The header shared by every packet is just 8 bytes, followed by a per-type fixed part and then a run of variable-length TLVs.

This article walks through the nine packet types, the fields of the common header and the TLV mechanism, checking each against captures taken on real equipment (Cisco IOS XR). All nine types were actually observed, so a tshark listing is included for each.

The Addresses and Encapsulation IS-IS Packets Use

IS-IS packets do not ride on IP; they are carried directly as the payload of an Ethernet frame. The encapsulation is covered in detail in What Is IS-IS; three points from it matter for this article.

ItemValue
EncapsulationEthernet (IEEE 802.3) plus LLC (DSAP/SSAP = 0xFE, Control = 0x03)
Destination MAC01:80:C2:00:00:14 (AllL1ISs) / 01:80:C2:00:00:15 (AllL2ISs) on broadcast links; 09:00:2B:00:00:05 on links running as point-to-point
Where IS-IS starts0x83 at the front of the common header (Intradomain Routeing Protocol Discriminator)

All three multicast MAC addresses appear in Table 9 of ISO/IEC 10589:2002 (architectural constants for ISO 8802 subnetworks). They do not all have the same standing, though. 01:80:C2:00:00:14 (AllL1ISs) and 01:80:C2:00:00:15 (AllL2ISs) are IS-IS’s own destinations for LAN IIHs, whereas 09:00:2B:00:00:05 is described in that table as “AllIntermediateSystems — the multi-destination address ‘All Intermediate Systems’ used by ISO 9542”, making it an ES-IS (ISO 9542) address rather than an IS-IS one. Its use when IS-IS runs as point-to-point over Ethernet is an implementation convention, not something ISO/IEC 10589 prescribes.

Because this article’s test uses both a broadcast link and a point-to-point link, all three were observed.

Packet Types

IS-IS packets fall into three categories, numbered by level and link type. Clause 9.4 of ISO/IEC 10589:2002 lists exactly nine of them.

CategoryPacketPDU TypeRole
HelloLAN Level 1 IIH15Forms and maintains Level 1 adjacencies on a broadcast link
HelloLAN Level 2 IIH16Forms and maintains Level 2 adjacencies on a broadcast link
HelloPoint-to-Point IIH17Forms and maintains adjacencies on a point-to-point link; the level is carried in the Circuit type field
Link StateLevel 1 LSP18Distributes Level 1 link state
Link StateLevel 2 LSP20Distributes Level 2 link state
Sequence NumberLevel 1 CSNP24Shows the list of LSPs in the Level 1 database
Sequence NumberLevel 2 CSNP25Shows the list of LSPs in the Level 2 database
Sequence NumberLevel 1 PSNP26Requests missing Level 1 LSPs / acknowledges received ones
Sequence NumberLevel 2 PSNP27Requests missing Level 2 LSPs / acknowledges received ones

Mapped onto OSPF:

OSPFIS-IS
Hello (Type 1)IIH (15 / 16 / 17)
DBD (Type 2)CSNP (24 / 25)
LSR (Type 3)PSNP (26 / 27)
LSU (Type 4)LSP (18 / 20)
LSAck (Type 5)PSNP (26 / 27)

In IS-IS the PSNP does two jobs: requesting missing LSPs (OSPF’s LSR) and acknowledging received ones (OSPF’s LSAck). Both faces are shown side by side with real captures in PSNP (PDU Type 26 / 27). And where OSPF has a single Hello, IS-IS splits Hello three ways by link type and level.

There is no PDU numbered 19. ISO/IEC 10589:2002 defines only the nine in the table above (clause 9.4); nothing is assigned to 19, which sits between the Level 1 LSP at 18 and the Level 2 LSP at 20.

The Common Header Format

All nine packet types begin with the same 8-byte header. Every field is one byte.

FieldLengthContent
Intradomain Routeing Protocol Discriminator1 byteThe fixed value 0x83 (binary 10000011, decimal 131) identifying IS-IS. Table 2 of ISO/IEC 10589:2002 lists it as the architectural constant IntradomainRouteingPD; the value itself is assigned by ISO/TR 9577 (network-layer protocol identifiers)
Length Indicator1 byteLength of the fixed header in bytes, TLVs excluded
Version/Protocol ID Extension1 byte1
ID Length1 byteLength of the System ID used in this routeing domain. 0 means 6 bytes; 1 to 8 mean that many bytes; 255 means length zero. Any other value is illegal
PDU Type1 byteThe low five bits (bits 1 to 5) give the packet type (15 to 27). The top three bits (6 to 8) are reserved, sent as zero and ignored on receipt
Version1 byte1
Reserved1 byteUnused. Sent as 0, ignored on receipt
Maximum Area Addresses1 byteThe number of area addresses permitted for this IS’s area. 1 to 254 are valid, and 0 is treated on receipt as 3

The catch with ID Length and Maximum Area Addresses is that 0 does not mean “none” but “the default” (6 bytes / 3 addresses). Real equipment does put 0 in both.

Clause 9.1 of ISO/IEC 10589:2002 numbers octets in a PDU from 1 upwards and bits within an octet from 1 to 8, bit 1 being the least significant. The bit numbers above follow that convention.

The Length Indicator changes with the packet type, because it is the 8-byte common header plus the length of the per-type fixed part. These are the values observed here.

PacketLength IndicatorBreakdown (8-byte common header plus fixed part)
LAN IIH (15 / 16)278 + Circuit type 1 + Source ID 6 + Holding Time 2 + PDU Length 2 + Priority 1 + LAN ID 7
Point-to-Point IIH (17)208 + Circuit type 1 + Source ID 6 + Holding Time 2 + PDU Length 2 + Local Circuit ID 1
LSP (18 / 20)278 + PDU Length 2 + Remaining Lifetime 2 + LSP ID 8 + Sequence Number 4 + Checksum 2 + Type block 1
CSNP (24 / 25)338 + PDU Length 2 + Source ID 7 + Start LSP ID 8 + End LSP ID 8
PSNP (26 / 27)178 + PDU Length 2 + Source ID 7

How TLVs Work

Behind the common header and the per-type fixed part comes a run of TLVs (Type-Length-Value).

ElementLengthContent
Type1 byteA number saying what this TLV represents
Length1 byteLength of the Value in bytes
ValueVariableThe content

Because Length is one byte, a single TLV carries at most 255 bytes of Value. Anything larger is carried by repeating TLVs of the same Type. ISO/IEC 10589:2002 states for every PDU that unrecognised CODEs in a received PDU are ignored, and for LSPs it adds that they are passed through unchanged (clause 9.8). That is why an unknown TLV does not break flooding.

ISO/IEC 10589:2002 calls this run VARIABLE LENGTH FIELDS and labels the first byte CODE rather than “Type” (clauses 9.5 to 9.13). Neither “TLV” nor “CLV” appears anywhere in the standard, but “TLV” is what IETF and vendor documentation settled on, so this article uses it throughout.

The payoff is that IS-IS can carry something new by adding a TLV. The header format never has to change, which is how IPv6 support (RFC 5308), MPLS traffic engineering and segment routing were all bolted on. The main TLVs are covered in IS-IS TLVs.

In fact only some of the TLVs in these captures come from the standard itself. ISO/IEC 10589:2002 defines CODEs 1 to 10 and 14; everything else was added later by the IETF.

TLVNameSource
1Area AddressesISO/IEC 10589:2002
6IS Neighbours (6-byte MAC addresses)ISO/IEC 10589:2002. Appears only in a LAN IIH
8PaddingISO/IEC 10589:2002
9LSP EntriesISO/IEC 10589:2002. Used by CSNP and PSNP
14originatingLSPBufferSizeISO/IEC 10589:2002
129Protocols SupportedRFC 1195
132IP Interface AddressRFC 1195
137Dynamic HostnameRFC 5301
211Restart SignalingRFC 5306
240Point-to-Point Adjacency StateRFC 5303

Verification on Real Equipment

The Test Environment

To observe all nine packet types, the topology deliberately includes both a broadcast link and a point-to-point link. Some packets (PDU Types 15, 16 and 24) only ever appear on a LAN, so a topology with just one kind of link cannot produce all nine.

RouterNETis-typeConnections
R149.0001.0010.0100.1001.00level-1LAN only
R249.0001.0020.0200.2002.00(default = level-1-2)LAN only
R349.0001.0030.0300.3003.00(default = level-1-2)LAN plus the P2P link to R4
R449.0002.0040.0400.4004.00(default = level-1-2)P2P to R3 only

R1, R2 and R3 sit on one broadcast segment (10.1.0.0/24) in area 49.0001, and only the R3–R4 link is point-to-point. R4 is in a different area, 49.0002, so R3–R4 forms a Level 2 adjacency.

The LAN interfaces are not given point-to-point. That is the whole point of this setup: leaving them in the default broadcast mode is what elects a DIS and makes LAN IIHs and CSNPs flow.

STEP 0: show isis neighbors on R3
RP/0/RP0/CPU0:R3#show isis neighbors
Tue Sep  8 14:42:19.720 UTC

IS-IS 1 neighbors:
System Id      Interface        SNPA           State Holdtime Type IETF-NSF
R1             Gi0/0/0/0        5254.0026.ffa1 Up    26       L1   Capable 
R2             Gi0/0/0/0        5254.004c.38a4 Up    22       L1L2 Capable 
R4             Gi0/0/0/1        *PtoP*         Up    29       L2   Capable 

Total neighbor count: 3

Two adjacencies rather than three sit on the single Gi0/0/0/0 because R1 is Level 1 only while R2 is Level 1-2. Look at the SNPA column: the two LAN adjacencies carry the neighbour’s MAC address, while the P2P one reads *PtoP*. A broadcast link needs a MAC address (the SNPA, Subnetwork Point of Attachment) to identify who it is talking to; a point-to-point link has only one possible peer and needs none.

show isis interface brief makes the difference sharper still.

STEP 0: show isis interface brief on R3
RP/0/RP0/CPU0:R3#show isis interface brief
Tue Sep  8 14:42:19.560 UTC

IS-IS 1 Interfaces
    Interface      All     Adjs    Adj Topos  Adv Topos  CLNS   MTU    Prio  
                   OK    L1   L2    Run/Cfg    Run/Cfg                L1   L2
-----------------  ---  ---------  ---------  ---------  ----  ----  --------
Lo0                Yes    -    -      0/0        1/1     No       -    -    -
Gi0/0/0/0          Yes    2*   1*     1/1        1/1     Up    1497   64   64
Gi0/0/0/1          Yes    0    1      1/1        1/1     Up    1497    -    -

The LAN interface Gi0/0/0/0 has Prio 64, while the P2P interface Gi0/0/0/1 has -. Priority exists to elect a DIS, so a point-to-point link, which has no DIS, has no value for it. The * next to an adjacency count marks this router as the DIS for that level; R3 became DIS for both Level 1 and Level 2.

That default of 64 matches l1IntermediateSystemPriority / l2IntermediateSystemPriority in the management-information definitions of ISO/IEC 10589:2002. The election rule (clause 8.4.5 of the same standard) is “the highest-priority IS, ties broken by the numerically highest MAC address”, and indeed R3 has the largest of the three MACs (R1 5254.0026.ffa1, R2 5254.004c.38a4, R3 5254.0084.f661). DIS election and pseudonodes are covered in The DIS and Pseudonodes; this article goes only as far as showing that a LAN IIH has Priority and LAN ID fields.

The Test STEPs

STEPAction
0Initial state
1process restart isis on all four routers at once (capturing both the LAN and the P2P link)
2process restart isis on R1 only (capturing the LAN)
3Apply hello-padding disable to the three LAN routers
4Put hello-padding back (final state)

Captures were taken at two points: the LAN segment (between R3 and the switch) and the R3–R4 link.

CaptureSTEPPacket types observed
isis-packet-lan.pcap1LAN L1 IIH (15), LAN L2 IIH (16), L1 LSP (18), L2 LSP (20), L1 CSNP (24), L2 CSNP (25)
isis-packet-p2p.pcap1P2P IIH (17), L2 LSP (20), L2 CSNP (25), L2 PSNP (27)
isis-packet-lan-resync.pcap2L1 PSNP (26) and others
isis-packet-padding.pcap3IIH length changing as padding is turned off

STEP 1 produced eight of the nine, but the L1 PSNP (26) did not appear. Restarting all four routers at once let flooding alone bring the databases into line, so no router ever had to ask for a missing LSP. STEP 2 therefore restarted only R1 while the other three kept running, forcing R1 to rebuild its database from scratch. R1 then answered the DIS’s periodic CSNP with a request, and the L1 PSNP was captured.

The set of PDU types in the captures can be checked mechanically:

PDU types present in the captures
$ for f in isis-packet-lan.pcap isis-packet-p2p.pcap isis-packet-lan-resync.pcap; do
>   tshark -r $f -n -V 2>/dev/null | grep -oE "PDU Type: [A-Za-z0-9 -]+ \([0-9]+\)"
> done | sort | uniq -c
  40 PDU Type: L1 CSNP (24)
 214 PDU Type: L1 HELLO (15)
  30 PDU Type: L1 LSP (18)
   1 PDU Type: L1 PSNP (26)
  41 PDU Type: L2 CSNP (25)
 161 PDU Type: L2 HELLO (16)
  36 PDU Type: L2 LSP (20)
  13 PDU Type: L2 PSNP (27)
  45 PDU Type: P2P HELLO (17)

All nine are there. The rest of this article looks at each in turn.

IIH (PDU Type 15 / 16 / 17)

The IIH (IS-IS Hello) forms and maintains adjacencies, and it splits three ways by link type and level.

PacketPDU TypeWhere it is used
LAN Level 1 IIH15Level 1 on a broadcast link
LAN Level 2 IIH16Level 2 on a broadcast link
Point-to-Point IIH17A point-to-point link (the level is carried in Circuit type)

The difference is that a broadcast link uses a separate packet per level, while point-to-point uses one packet that states its level inside.

LAN Level 1 IIH (PDU Type 15)

An IIH sent onto the LAN by R1 (level-1). The destination MAC is 01:80:c2:00:00:14 (AllL1ISs).

No.3 LAN Level 1 IIH (R1 to AllL1ISs), tshark -V
ISO 10589 ISIS InTRA Domain Routeing Information Exchange Protocol
    Intradomain Routing Protocol Discriminator: ISIS (0x83)
    Length Indicator: 27
    Version/Protocol ID Extension: 1
    ID Length: 0
    000. .... = Reserved: 0x0
    ...0 1111 = PDU Type: L1 HELLO (15)
    Version: 1
    Reserved: 0
    Maximum Area Addresses: 0
ISIS HELLO
    .... ..01 = Circuit type: Level 1 only (0x1)
    0000 00.. = Reserved: 0x00
    SystemID {Sender of PDU}: 0010.0100.1001
    Holding timer: 30
    PDU length: 1497
    .100 0000 = Priority: 64
    0... .... = Reserved: 0
    SystemID {Designated IS}: 0030.0300.3003.01
    Protocols Supported (t=129, l=1)
        Type: 129
        Length: 1
        NLPID: IP (0xcc)
    Area address(es) (t=1, l=4)
        Type: 1
        Length: 4
        Area address (3): 49.0001
    IP Interface address(es) (t=132, l=4)
        Type: 132
        Length: 4
        IPv4 interface address: 10.1.0.1
    IS Neighbor(s) (t=6, l=12)
        Type: 6
        Length: 12
        IS Neighbor: 52:54:00:4c:38:a4
        IS Neighbor: 52:54:00:84:f6:61
    Padding (t=8, l=255)
        Type: 8
        Length: 255
Download the pcap of the packet in the tshark output above (No.3 LAN Level 1 IIH)

The eight bytes of the common header line up exactly with the table in The Common Header Format. ID Length: 0 and Maximum Area Addresses: 0 both mean “the default”, not zero. Note too that PDU Type is expanded as five bits, ...0 1111, with the top three shown separately as 000. .... = Reserved.

The fixed part that follows is defined in clause 9.5 of ISO/IEC 10589:2002.

FieldLengthValue hereContent
Reserved/Circuit Type1 byte0x1The low two bits give the levels the sender handles: 1 = Level 1 only, 2 = Level 2 only, 3 = both. 0 is a reserved value and the entire PDU must be discarded if it appears. The top six bits are reserved
Source IDID Length bytes (6 by default)0010.0100.1001The sending router’s System ID
Holding Time2 bytes30Drop the adjacency if no IIH arrives within this many seconds
PDU Length2 bytes1497Total length of the PDU including the header
Reserved/Priority1 byte64The low seven bits are the priority for becoming the LAN Level 1 DIS; higher wins. Bit 8 is reserved
LAN IDID Length + 1 bytes0030.0300.3003.01The DIS’s System ID plus a one-byte number assigned by the DIS

R1 is configured is-type level-1, so Circuit type reads Level 1 only (0x1) — exactly what NOTE 55 of ISO/IEC 10589:2002 requires when it says a LAN Level 1 IIH must carry a Circuit Type of 1 or 3.

The LAN ID holds R3’s System ID, not R1’s (0030.0300.3003.01). Clause 9.5 defines LAN ID as the DIS’s System ID plus a low-order byte assigned by the DIS, copied from the DIS’s own IIH. R1, not being the DIS, simply echoes back what R3 sent. That trailing .01 is the number the DIS chose, and it is also what makes the pseudonode LSP appear as R3.01-00 in show isis database.

The other thing unique to a LAN IIH is TLV 6 (IS Neighbours), which lists the MAC addresses of the IS-IS routers R1 can see on this LAN (R2’s 52:54:00:4c:38:a4 and R3’s 52:54:00:84:f6:61). Confirming that the neighbour can see you is done through this TLV on a broadcast link. It never appears in a point-to-point IIH.

LAN Level 2 IIH (PDU Type 16)

A Level 2 IIH sent onto the same LAN by R2 (level-1-2). The destination MAC is 01:80:c2:00:00:15 (AllL2ISs).

No.8 LAN Level 2 IIH (R2 to AllL2ISs), tshark -V
ISO 10589 ISIS InTRA Domain Routeing Information Exchange Protocol
    Intradomain Routing Protocol Discriminator: ISIS (0x83)
    Length Indicator: 27
    Version/Protocol ID Extension: 1
    ID Length: 0
    000. .... = Reserved: 0x0
    ...1 0000 = PDU Type: L2 HELLO (16)
    Version: 1
    Reserved: 0
    Maximum Area Addresses: 0
ISIS HELLO
    .... ..11 = Circuit type: Level 1 and 2 (0x3)
    0000 00.. = Reserved: 0x00
    SystemID {Sender of PDU}: 0020.0200.2002
    Holding timer: 30
    PDU length: 1497
    .100 0000 = Priority: 64
    0... .... = Reserved: 0
    SystemID {Designated IS}: 0030.0300.3003.01
Download the pcap of the packet in the tshark output above (No.8 LAN Level 2 IIH)

The field layout is identical to the LAN Level 1 IIH (15); clause 9.6 of ISO/IEC 10589:2002 simply repeats the figure from 9.5. What differs is the PDU Type number, the destination MAC, and the fact that Priority and LAN ID refer to the Level 2 DIS. The Length Indicator is the same 27.

R2 is level-1-2, so its Circuit type is Level 1 and 2 (0x3). Set against R1’s 0x1, it is clear that the is-type setting lands directly in this field.

Level 1 and Level 2 elect their DIS separately, but in this test R3 won both, so LAN ID is the same 0030.0300.3003.01 as in the Level 1 IIH.

Point-to-Point IIH (PDU Type 17)

An IIH sent by R3 to R4. The destination MAC is 09:00:2b:00:00:05.

No.2 Point-to-Point IIH (R3 to R4), tshark -V
ISO 10589 ISIS InTRA Domain Routeing Information Exchange Protocol
    Intradomain Routing Protocol Discriminator: ISIS (0x83)
    Length Indicator: 20
    Version/Protocol ID Extension: 1
    ID Length: 0
    000. .... = Reserved: 0x0
    ...1 0001 = PDU Type: P2P HELLO (17)
    Version: 1
    Reserved: 0
    Maximum Area Addresses: 0
ISIS HELLO
    .... ..11 = Circuit type: Level 1 and 2 (0x3)
    0000 00.. = Reserved: 0x00
    SystemID {Sender of PDU}: 0030.0300.3003
    Holding timer: 30
    PDU length: 1497
    Local circuit ID: 0
    Point-to-point Adjacency State (t=240, l=15)
        Type: 240
        Length: 15
        Adjacency State: Up (0)
        Extended Local circuit ID: 0x00000005
        Neighbor SystemID: 0040.0400.4004
        Neighbor Extended Local circuit ID: 0x00000004
Download the pcap of the packet in the tshark output above (No.2 Point-to-Point IIH)

The fixed part defined in clause 9.7 of ISO/IEC 10589:2002 differs from the LAN IIH in only its last field.

FieldLengthLAN IIH (15 / 16)Point-to-Point IIH (17)
Reserved/Circuit Type1 bytePresentPresent
Source IDID Length bytesPresentPresent
Holding Time2 bytesPresentPresent
PDU Length2 bytesPresentPresent
Reserved/Priority1 bytePresentAbsent
LAN IDID Length + 1 bytesPresentAbsent
Local Circuit ID1 byteAbsentPresent: a one-byte identifier this router assigned when it created the circuit

The Length Indicator is 27 for a LAN IIH and 20 for a P2P IIH, and the difference of 7 bytes is exactly Priority (1) plus LAN ID (7) minus Local Circuit ID (1). A point-to-point link needs no DIS, so the two fields that exist for the DIS disappear entirely. Whether a DIS exists is what shapes the header.

Circuit type is 0x3 (both levels), yet only a Level 2 adjacency actually forms, because R3 and R4 are in different areas. Circuit type declares the levels a router is willing to run; which level actually comes up depends on the area IDs as well (see Level 1 and Level 2).

TLV 240 (Point-to-Point Adjacency State), which appears in the capture, is not in ISO/IEC 10589. The standard’s point-to-point adjacency is a two-way handshake: an arriving IIH is enough to bring the adjacency up, and nothing checks whether the peer can see you. RFC 5303 added the three-way handshake, and TLV 240 with it. Neighbor SystemID: 0040.0400.4004 means “I am receiving your (R4’s) IIHs”, and only on seeing that does R4 bring the adjacency up.

On a broadcast link, the MAC list in TLV 6 (IS Neighbours) plays this role instead. The two link types confirm two-way visibility differently, and that is one reason IIHs come in three flavours.

LSP (PDU Type 18 / 20)

An LSP distributes a router’s own link state: 18 for Level 1, 20 for Level 2.

Level 1 LSP (PDU Type 18)

R1 sending its own Level 1 LSP.

No.96 Level 1 LSP (R1 to AllL1ISs), tshark -V
ISO 10589 ISIS Link State Protocol Data Unit
    PDU length: 90
    Remaining lifetime: 1200
    LSP-ID: 0010.0100.1001.00-00
    Sequence number: 0x00000003
    Checksum: 0x2ad2 [correct]
    [Checksum Status: Good]
    Type block(0x01): Partition Repair:0, Attached bits:0, Overload bit:0, IS type:1
        0... .... = Partition Repair: Not supported
        .000 0... = Attachment: 0
            .0.. .... = Error metric: Not set
            ..0. .... = Expense metric: Not set
            ...0 .... = Delay metric: Not set
            0... .... = Default metric: Not set
        .... .0.. = Overload bit: Not set
        .... ..01 = Type of Intermediate System: Level 1 (1)
    Area address(es) (t=1, l=4)
        Type: 1
        Length: 4
        Area address (3): 49.0001
    Originating neighbor buffer size (t=14, l=2)
        Type: 14
        Length: 2
        Neighbor originating buffer size: 1492
    Protocols supported (t=129, l=1)
        Type: 129
        Length: 1
        NLPID: IP (0xcc)
    IP Interface address(es) (t=132, l=4)
        Type: 132
        Length: 4
        IPv4 interface address: 1.1.1.1
    Hostname (t=137, l=2)
        Type: 137
        Length: 2
        Hostname: R1
    IP Internal reachability (t=128, l=24)
        Type: 128
        Length: 24
        IPv4 prefix: 1.1.1.1/32
            ..00 0000 = Default Metric: 0
Download the pcap of the packet in the tshark output above (No.96 Level 1 LSP)

Clause 9.8 of ISO/IEC 10589:2002 defines what follows the common header.

FieldLengthValue hereContent
PDU Length2 bytes90Total length of the PDU including the header
Remaining Lifetime2 bytes1200Seconds until this LSP is considered expired
LSP IDID Length + 2 bytes0010.0100.1001.00-00Source ID (6 bytes) + Pseudonode ID (1 byte) + LSP Number (1 byte)
Sequence Number4 bytes0x00000003The LSP’s sequence number
Checksum2 bytes0x2ad2Checksum over the LSP from Source ID to the end
P / ATT / LSPDBOL / IS Type1 byte0x01Four pieces of information packed into one byte, as below

The three parts of the LSP ID are exactly what the LSPID column of show isis database prints. In 0010.0100.1001.00-00, the .00 is the Pseudonode ID and the -00 is the LSP Number. An LSP with a non-zero Pseudonode ID belongs to a pseudonode; here that is 0030.0300.3003.01-00, issued by the DIS R3.

The last byte is the value behind the ATT/P/OL column of show isis database.

BitsNameValue hereMeaning
Bit 8P0Set when the issuing router supports the optional Partition Repair function
Bits 7 to 4ATT0000Four bits, one per metric type: bit 4 Default, bit 5 Delay, bit 6 Expense, bit 7 Error. A set bit means the router can reach other areas using that metric
Bit 3LSPDBOL01 means the link-state database is overloaded. A router whose LSP has this bit set is not used as a transit when other routers compute paths
Bits 1 to 2IS Type011 = Level 1 IS, 3 = Level 2 IS. 0 and 2 are unused

That ATT is four bits wide is not something the ATT/P/OL display or the phrase “the ATT bit” reveals. The tshark output above shows the definition directly: under Attachment: 0 it expands Error metric, Expense metric, Delay metric and Default metric. Only the Default metric is used in modern IP networks, so in practice it behaves as one bit, and the ATT that show prints is that bit 4.

R1 is level-1, so IS type is Level 1 (1), and since it has no way out to another area every ATT bit is 0. The Level 1 LSPs of the Level 1-2 routers R2 and R3 do set ATT (see Level 1 and Level 2).

Among the TLVs is Originating neighbor buffer size (t=14). That is CODE 14 (originatingLSPBufferSize) from ISO/IEC 10589:2002, and its value of 1492 matches the architectural constant RecieveLSPBufferSize = 1492 in Table 2 of the same standard.

Level 2 LSP (PDU Type 20)

A Level 2 LSP from R3.

No.133 Level 2 LSP (R3 to AllL2ISs), tshark -V
ISO 10589 ISIS Link State Protocol Data Unit
    PDU length: 137
    Remaining lifetime: 1200
    LSP-ID: 0030.0300.3003.00-00
    Sequence number: 0x00000006
    Checksum: 0xb0ed [correct]
    [Checksum Status: Good]
    Type block(0x03): Partition Repair:0, Attached bits:0, Overload bit:0, IS type:3
        0... .... = Partition Repair: Not supported
        .000 0... = Attachment: 0
            .0.. .... = Error metric: Not set
            ..0. .... = Expense metric: Not set
            ...0 .... = Delay metric: Not set
            0... .... = Default metric: Not set
        .... .0.. = Overload bit: Not set
        .... ..11 = Type of Intermediate System: Level 2 (3)
    Area address(es) (t=1, l=4)
        Type: 1
        Length: 4
        Area address (3): 49.0001
    Hostname (t=137, l=2)
        Type: 137
        Length: 2
        Hostname: R3
    IP Internal reachability (t=128, l=60)
        Type: 128
        Length: 60
        IPv4 prefix: 1.1.1.1/32
            ..00 1010 = Default Metric: 10
Download the pcap of the packet in the tshark output above (No.133 Level 2 LSP)

The header format is the same as a Level 1 LSP (clause 9.9 of ISO/IEC 10589:2002). What differs is the PDU Type of 20 and the IS type of Level 2 (3). R3 is level-1-2, so the same router issues a Level 1 LSP (IS type 1) and a Level 2 LSP (IS type 3) separately.

Every ATT bit is 0 because Level 2 LSPs do not use ATT. ATT tells a Level 1 area that this router is a way out to other areas, so it only means anything in a Level 1 LSP.

CSNP (PDU Type 24 / 25)

A CSNP shows the peer the list of LSPs held in the sender’s database.

Level 1 CSNP (PDU Type 24)

R3, the DIS, sending its periodic Level 1 CSNP onto the LAN.

No.4 Level 1 CSNP (R3 to AllL1ISs), tshark -V
ISO 10589 ISIS InTRA Domain Routeing Information Exchange Protocol
    Intradomain Routing Protocol Discriminator: ISIS (0x83)
    Length Indicator: 33
    Version/Protocol ID Extension: 1
    ID Length: 0
    000. .... = Reserved: 0x0
    ...1 1000 = PDU Type: L1 CSNP (24)
    Version: 1
    Reserved: 0
    Maximum Area Addresses: 0
ISO 10589 ISIS Complete Sequence Numbers Protocol Data Unit
    PDU length: 99
    Source-ID: 0030.0300.3003
    Source-ID-Circuit: 00
    Start LSP-ID: 0000.0000.0000.00-00
    End LSP-ID: ffff.ffff.ffff.ff-ff
    LSP entries (t=9, l=64)
        Type: 9
        Length: 64
        LSP Entry
            LSP Sequence Number: 0x00000005
            Remaining Lifetime: 1159
            LSP checksum: 0x26d4
        LSP-ID: 0010.0100.1001.00-00
        LSP Entry
            LSP Sequence Number: 0x00000006
            Remaining Lifetime: 1197
            LSP checksum: 0xae16
        LSP-ID: 0020.0200.2002.00-00
        LSP Entry
            LSP Sequence Number: 0x00000007
            Remaining Lifetime: 1197
            LSP checksum: 0xf7f7
        LSP-ID: 0030.0300.3003.00-00
        LSP Entry
            LSP Sequence Number: 0x00000005
            Remaining Lifetime: 1158
            LSP checksum: 0x0417
        LSP-ID: 0030.0300.3003.01-00
Download the pcap of the packet in the tshark output above (No.4 Level 1 CSNP)

Clause 9.10 of ISO/IEC 10589:2002 defines the CSNP’s fixed part.

FieldLengthValue hereContent
PDU Length2 bytes99Total length of the PDU including the header
Source IDID Length + 1 bytes0030.0300.3003 + 00System ID of the router issuing this SNP (the trailing byte is 00)
Start LSP IDID Length + 2 bytes0000.0000.0000.00-00The first LSP ID of the range this CSNP covers
End LSP IDID Length + 2 bytesffff.ffff.ffff.ff-ffThe last LSP ID of the range this CSNP covers

Start LSP-ID is 0000... and End LSP-ID is ffff..., covering the entire space of possible LSP IDs. That is what “Complete” means. Clause 7.3.15 of ISO/IEC 10589:2002 allows the set to be split across several CSNPs when it does not fit in one, but requires their ranges to be contiguous and to cover the whole range of possible LSP IDs. On that basis it states that the absence of an LSP ID from a CSNP whose range includes it means total lack of information about that LSP — which is exactly how the receiver detects what the sender is missing.

The list itself travels in TLV 9 (LSP Entries). Each entry is 16 bytes: Remaining Lifetime (2), LSP ID (8), LSP Sequence Number (4) and Checksum (2). Four entries at 16 bytes gives the 64 that Length: 64 reports.

The ordering matters too: 0010.0100.1001.00-00, 0020.0200.2002.00-00, 0030.0300.3003.00-00, 0030.0300.3003.01-00ascending LSP ID order, as ISO/IEC 10589:2002 requires, so that the receiver can diff the two lists efficiently.

The fourth entry, 0030.0300.3003.01-00, is the pseudonode LSP. Its Pseudonode ID is 01, and the DIS R3 issues it to represent the LAN itself as a single node. A broadcast link adds LSPs of this kind to the database (covered in The DIS and Pseudonodes).

Level 2 CSNP (PDU Type 25)

A Level 2 CSNP, this time seen on the point-to-point link.

No.12 Level 2 CSNP (R3 to R4), tshark -V
ISO 10589 ISIS Complete Sequence Numbers Protocol Data Unit
    PDU length: 51
    Source-ID: 0030.0300.3003
    Source-ID-Circuit: 00
    Start LSP-ID: 0000.0000.0000.00-00
    End LSP-ID: ffff.ffff.ffff.ff-ff
    LSP entries (t=9, l=16)
        Type: 9
        Length: 16
        LSP Entry
            LSP Sequence Number: 0x00000002
            Remaining Lifetime: 1200
Download the pcap of the packet in the tshark output above (No.12 Level 2 CSNP)

The format matches the Level 1 CSNP. What differed was how often they were sent.

Link typeCSNP transmissionCount in this article’s captures
BroadcastThe DIS multicasts them periodically19 in 169 seconds (about every 10 seconds)
Point-to-pointOnly when needed, such as when the adjacency comes up2 in 164 seconds

Clause 7.3.15 of ISO/IEC 10589:2002 says the LAN Level 1 DIS periodically multicasts complete sets of Level 1 CSNPs to AllL1ISs, and the Level 2 DIS does the same for Level 2 to AllL2ISs. The default interval is the management parameter completeSNPInterval = 10 seconds, matching the roughly 10-second spacing observed.

On a broadcast link the DIS keeps announcing “this is the whole database” to hold everyone in sync; on a point-to-point link there is only one peer, so the exchange happens only when needed.

PSNP (PDU Type 26 / 27)

A PSNP is used both to request missing LSPs and to acknowledge received ones. Here are both faces, side by side, from real captures.

Level 1 PSNP (PDU Type 26): the request

Captured in STEP 2, when only R1 was restarted. Coming up with an empty database, R1 sees the DIS’s CSNP and asks for the LSPs it does not have.

No.67 Level 1 PSNP (R1 to AllL1ISs), tshark -V
ISO 10589 ISIS InTRA Domain Routeing Information Exchange Protocol
    Intradomain Routing Protocol Discriminator: ISIS (0x83)
    Length Indicator: 17
    Version/Protocol ID Extension: 1
    ID Length: 0
    000. .... = Reserved: 0x0
    ...1 1010 = PDU Type: L1 PSNP (26)
    Version: 1
    Reserved: 0
    Maximum Area Addresses: 0
ISO 10589 ISIS Partial Sequence Numbers Protocol Data Unit
    PDU length: 51
    Source-ID: 0010.0100.1001
    Source-ID-Circuit: 00
    LSP entries (t=9, l=32)
        Type: 9
        Length: 32
        LSP Entry
            LSP Sequence Number: 0x00000000
            Remaining Lifetime: 925
            LSP checksum: 0x0000
        LSP-ID: 0020.0200.2002.00-00
        LSP Entry
            LSP Sequence Number: 0x00000000
            Remaining Lifetime: 926
            LSP checksum: 0x0000
        LSP-ID: 0030.0300.3003.00-00
Download the pcap of the packet in the tshark output above (No.67 Level 1 PSNP)

The giveaway is that LSP Sequence Number and LSP checksum are both 0. That means “I hold nothing at all for this LSP ID”, and R2 and R3 respond by sending their LSPs. This is the PSNP as a request.

Level 2 PSNP (PDU Type 27): the acknowledgement

The same packet type, but here R3 is telling R4 on the point-to-point link that it received R4’s LSP.

No.14 Level 2 PSNP (R3 to R4), tshark -V
ISO 10589 ISIS Partial Sequence Numbers Protocol Data Unit
    PDU length: 35
    Source-ID: 0030.0300.3003
    Source-ID-Circuit: 00
    LSP entries (t=9, l=16)
        Type: 9
        Length: 16
        LSP Entry
            LSP Sequence Number: 0x00000001
            Remaining Lifetime: 1200
            LSP checksum: 0x6e56
        LSP-ID: 0040.0400.4004.00-00
Download the pcap of the packet in the tshark output above (No.14 Level 2 PSNP)

This time LSP Sequence Number: 0x00000001 and LSP checksum: 0x6e56 carry real values: “I have indeed received the LSP with this sequence number and this checksum.”

The same PDU Type and the same TLV 9 mean different things depending on whether the values are zero. That is why IS-IS is described as folding OSPF’s LSR and LSAck into one packet.

CSNP and PSNP header differences

The PSNP’s fixed part (clause 9.12 of ISO/IEC 10589:2002) is the CSNP’s with the two range fields removed.

FieldCSNP (24 / 25)PSNP (26 / 27)
PDU LengthPresentPresent
Source IDPresentPresent
Start LSP IDPresentAbsent
End LSP IDPresentAbsent
TLV 9 (LSP Entries)PresentPresent
Length Indicator3317

The 16-byte difference is Start LSP ID and End LSP ID (8 bytes each). Having no range field is precisely what “Partial” means. A CSNP declares “for this range, this is everything I hold”, so an LSP ID missing from it means the sender does not have it. A PSNP declares no range, so it speaks only about the LSPs listed in it. That single difference is why the same TLV 9 carries different meaning in the two packets.

IIH Padding

An IIH comes with padding that fills the frame out (TLV 8). It stops an adjacency from forming when the two ends of a link disagree on the MTU — the same job OSPF does with the MTU field in its DBD packets.

ISO/IEC 10589:2002 is specific about it: clauses 8.2.3 (point-to-point) and 8.4.2 (broadcast) require the IIH to be padded to at least maxsize − 1 bytes, where maxsize is the largest of:

ValueMeaning
dataLinkBlocksizeThe block size the circuit can carry (effectively the MTU)
originatingL1LSPBufferSizeThe largest Level 1 LSP this router will originate. The default is RecieveLSPBufferSize = 1492
originatingL2LSPBufferSizeThe same for Level 2 LSPs (point-to-point only)

It is “at least maxsize − 1” rather than exactly maxsize because, as the standard notes, the PDU should be padded to maxsize where possible, but if the PDU is already maxsize − 1 bytes no padding is possible or required (a TLV needs at least two bytes for CODE and LENGTH, so a single spare byte cannot hold one).

Disabling it at every end at once does not bring the adjacency down. Padding exists to verify that the MTUs agree; it is not itself a condition for forming an adjacency. What breaks an adjacency is disabling it on only one side while the MTUs differ, and that behaviour is covered in Adjacency Formation and States.

STEP 3 applied hello-padding disable to all three LAN routers so the two states could be compared.

STEP 3: disabling padding (R1, R2, R3)
router isis 1
 interface GigabitEthernet0/0/0/0
  hello-padding disable

IOS XR offers four choices for hello-padding:

hello-padding options (XRd 26.1.1)
RP/0/RP0/CPU0:R1(config-isis-if)#hello-padding ?
  adaptive   Enable hello-padding till neighbor confirms adjacency up
  always     Always enable hello-padding
  disable    Disable hello-padding
  sometimes  Enable hello-padding during adjacency formation only

Before the change, an IIH was 1514 bytes on the wire (PDU length 1497).

Before STEP 3: a padded IIH (tshark -V, excerpt)
Frame 1: 1514 bytes on wire (12112 bits), 1514 bytes captured (12112 bits)
    PDU length: 1497
    Padding (t=8, l=255)
        Type: 8
        Length: 255
Download the pcap of the packet in the tshark output above (No.5, a padded IIH)

That packet held six Padding (t=8) TLVs: five with l=255 and one with l=149. Adding two bytes of TLV header each gives (255+2)x5 + (149+2) = 1436 bytes.

Afterwards the same IIH shrinks to 78 bytes.

STEP 3: an IIH with padding disabled (tshark -V, excerpt)
Frame 1: 78 bytes on wire (624 bits), 78 bytes captured (624 bits)
ISIS HELLO
    .... ..01 = Circuit type: Level 1 only (0x1)
    SystemID {Sender of PDU}: 0010.0100.1001
    Holding timer: 30
    PDU length: 61
    .100 0000 = Priority: 64
    SystemID {Designated IS}: 0030.0300.3003.01
    Protocols Supported (t=129, l=1)
    Restart Signaling (t=211, l=3)
    Area address(es) (t=1, l=4)
    IP Interface address(es) (t=132, l=4)
    IS Neighbor(s) (t=6, l=12)
Download the pcap of the packet in the tshark output above (No.16, an IIH with padding disabled)

The PDU length went from 1497 bytes to 61. The 1436-byte difference is exactly the amount of padding counted above. Only Padding (t=8) disappeared; the remaining TLVs are unchanged.

Counting IIH frame lengths across the whole capture shows the two states separating cleanly.

IIH frame lengthPacketsState
1514 bytes32Padded (before the STEP 3 change)
78 bytes80Unpadded Level 1 IIH
72 bytes66Unpadded Level 2 IIH

The Level 1 IIH is six bytes longer because TLV 6 (IS Neighbours) carries the MAC addresses of the neighbours on the LAN. This test had two Level 1 adjacencies and one Level 2 adjacency, and the extra entry accounts for exactly those six bytes.

All three routers were changed at once, so as described above no adjacency dropped. Turning padding off does save bandwidth (1514 bytes from each of three routers becomes 72 to 78), but the trade-off is that an adjacency will now form even when the two ends disagree on the MTU. That leads to the hard-to-find failure where IIHs get through but LSPs do not, so disabling it on only one side is best avoided.

Verification Config and show Output

At every STEP the following three files were collected from all four routers, separately per router. The verification config is the ..._run.txt file (the final state being the STEP 4 one).

FileContent
..._show.txtshow version / show interface description / show route / show route isis / show isis / show isis hostname / show isis interface / show isis interface brief / show isis neighbors / show isis neighbors detail / show isis database / show isis database detail / show isis topology / show isis adjacency / show isis adjacency detail / show isis spf-log / show isis lsp-log / show isis statistics / show cef
..._log.txtshow logging narrowed to that STEP (STEP 0 holds the full history since boot)
..._run.txtshow running-config at that STEP (that is, the verification config for the STEP)

The final configuration leaves point-to-point off Gi0/0/0/0 on the three LAN routers (R1, R2, R3) and applies it only to the R3–R4 pair. The hello-padding disable lines were removed again in STEP 4.

STEP 0: initial state

Routershow outputsyslogrunning-config
R1showlogrun
R2showlogrun
R3showlogrun
R4showlogrun

STEP 1: process restart isis on all four routers at once

Routershow outputsyslogrunning-config
R1showlogrun
R2showlogrun
R3showlogrun
R4showlogrun

STEP 2: process restart isis on R1 only

Routershow outputsyslogrunning-config
R1showlogrun
R2showlogrun
R3showlogrun
R4showlogrun

STEP 3: apply hello-padding disable to the three LAN routers

Routershow outputsyslogrunning-config
R1showlogrun
R2showlogrun
R3showlogrun
R4showlogrun

STEP 4: put hello-padding back (final state)

Routershow outputsyslogrunning-config
R1showlogrun
R2showlogrun
R3showlogrun
R4showlogrun

There are four capture files.

Download the LAN segment capture (isis-packet-lan.pcap)

Download the R3-R4 link capture (isis-packet-p2p.pcap)

Download the capture from restarting R1 only, STEP 2 (isis-packet-lan-resync.pcap)

Download the capture from disabling padding, STEP 3 (isis-packet-padding.pcap)

References

StandardTitleSummary
ISO/IEC 10589:2002 (Second Edition)Intermediate System to Intermediate System intra-domain routeing information exchange protocolThe IS-IS specification itself. This article draws on clause 9.4 (the list of PDU types), 9.5 to 9.13 (the format of each PDU), 9.1 (general encoding rules), Table 2 and Table 9 (architectural constants), 8.2.3 / 8.4.2 (IIH padding), 8.4.5 (DIS election), 7.3.15 (the range covered by a CSNP) and 11.3 (management-parameter defaults).
RFC 1142OSI IS-IS Intra-domain Routing ProtocolA republication of the ISO 10589 Draft Proposal (1990), now Historic. It must not be referenced in place of ISO/IEC 10589 (see RFC 7142).
RFC 7142Reclassification of RFC 1142 to HistoricExplains that references should be to ISO/IEC 10589:2002, Second Edition.
RFC 1195Use of OSI IS-IS for Routing in TCP/IP and Dual EnvironmentsAdded the TLVs that carry IP routes (128, 129, 132 and others).
RFC 5301Dynamic Hostname Exchange Mechanism for IS-ISTLV 137, which maps a hostname to a System ID.
RFC 5303Three-Way Handshake for IS-IS Point-to-Point AdjacenciesDefines TLV 240, carried in point-to-point IIHs. The point-to-point adjacency in ISO/IEC 10589 is two-way, and this TLV is not in the standard itself.
RFC 5306Restart Signaling for IS-ISTLV 211, for graceful restart.
RFC 5308Routing IPv6 with IS-ISThe TLVs that carry IPv6 routes; an example of extending IS-IS purely by adding TLVs.
ISO/TR 9577Protocol identification in the network layerThe registry that assigns 0x83 (the network-layer protocol identifier) at the front of the common header. Not consulted directly; this follows what Table 2 of ISO/IEC 10589:2002 states.

Related Articles