Chapter 06 · Part II · Interior routing

IS-IS, the other link-state protocol

IS-IS does the same job as OSPF: every router learns the whole map and runs a shortest-path calculation over it. But it was designed for a different network layer, it does not run on IP at all, and it describes everything it knows as a row of small typed records. Those three facts explain why so many large backbones run it, and why it absorbed IPv6, traffic engineering and segment routing with so little fuss.

1990the year RFC 1195 taught the OSI protocol IS-IS to carry IP routes, creating "Integrated IS-IS"
63the largest cost a link could have in the original encoding: 6 bits, with a whole path capped at 1023 (ISO 10589)
24 bitsthe width of a link cost in the "wide" metric TLV of RFC 5305, enough for 16,777,214 usable values

Common mix-up: running IS-IS does not mean running OSI. Your network still forwards IPv4 and IPv6 packets, and IS-IS still computes IPv4 and IPv6 routes. The only OSI thing left is the protocol's own plumbing: each router needs an OSI-style name, its NET, and IS-IS packets are framed for an OSI link layer. "Intermediate system" is simply OSI's word for a router; a host is an "end system."

Origins

A protocol built for another network

If link-state routing is new to you, start with dynamic routing on networks.jelia.nyc, which floods a small network and runs Dijkstra on it. This chapter assumes that picture and goes inside one particular protocol. The previous chapter, OSPF in depth, does the same for OSPF; here we only borrow OSPF for comparison.

In the late 1980s the world was expected to move from TCP/IP to the OSI protocol suite, a set of standards from the International Organization for Standardization. OSI had its own network layer, the Connectionless Network Protocol (CLNP), with its own addresses, called NSAPs. It needed a routing protocol, and engineers at Digital Equipment Corporation designed one: the Intermediate System to Intermediate System intra-domain routeing protocol. It became the international standard ISO/IEC 10589. In February 1990 the IETF republished a draft of it as RFC 1142 so that internet engineers could read it. That RFC is now only of historic interest: RFC 7142 moved it to Historic status in 2014 and pointed everyone at the current ISO edition, ISO/IEC 10589:2002.

Ten months later, in December 1990, Ross Callon of DEC published RFC 1195, "Use of OSI IS-IS for Routing in TCP/IP and Dual Environments." Its idea was simple and lasting. Keep IS-IS exactly as it was, and add a few new records to its packets that describe IP prefixes. One protocol, one set of adjacencies, one shortest-path calculation, and routes for both CLNP and IP come out of it. This is "Integrated IS-IS," and it is what everyone means by IS-IS today.

OSI never displaced TCP/IP. CLNP is gone from almost every network. Integrated IS-IS stayed, because it turned out to be a very good IP routing protocol, especially for large service-provider backbones that want one simple, fast, flat interior protocol under BGP. The rest of this chapter explains why.

Life without IP underneath

Straight onto the wire

OSPF is an IP protocol. Its packets are IP packets with protocol number 89 (RFC 2328), and OSPF for IPv6 is a separate protocol version with its own packets (RFC 5340). IS-IS packets are not IP packets. On Ethernet they are carried in an 802.2 LLC frame addressed to the OSI network layer's service access point, 0xFE, and sent to one of two multicast MAC addresses that ISO 10589 reserves: 01-80-C2-00-00-14 for all level 1 routers and 01-80-C2-00-00-15 for all level 2 routers. If Ethernet frames, MAC addresses and multicast are hazy, Ethernet on networks.jelia.nyc covers them.

IS-IS on Ethernet
link layerEthernet header
802.2 LLCFE FE 03
IS-IS PDUhello, LSP, CSNP or PSNP
OSPF on Ethernet
link layerEthernet header
network layerIP header, protocol 89
OSPF packethello, LSU, LSAck…

That one design choice has three consequences you can feel in day-to-day operation.

  • Neighbors don't depend on IP addressing. Two IS-IS routers on a link become neighbors even if the IP subnets on their interfaces don't match, because the hello is not an IP packet. (An implementation may still insist that the subnets match, and IS-IS hellos carry the interface's IP addresses so a router knows its neighbor's next-hop address.)
  • Packets from far away can't reach it. An IP packet can be routed from anywhere on the internet to an OSPF process, which is why OSPF deployments filter protocol 89 at the edge and use authentication. An IS-IS packet is a link-layer frame; no router forwards it, so the only machines that can talk to your IS-IS process are the ones plugged into the same link. Authentication (RFC 5304 adds HMAC-MD5) still matters against a rogue box on a shared segment.
  • One protocol for both IP versions. Since IS-IS belongs to neither IPv4 nor IPv6, it can describe both in the same packets. RFC 5308 adds IPv6 by defining two new records, and a dual-stack network runs one IS-IS instead of OSPFv2 plus OSPFv3.
Go deeper: the NET, and why an IP network still has an OSI address

Every IS-IS router has a Network Entity Title, or NET: an OSI address that names the router itself rather than any interface. It is written in dotted hexadecimal and has three parts. Read it right to left.

49.0001area address
0000.0000.0001system ID, 6 bytes
00selector, always 00

The last byte, the selector, is always 00 in a NET; it means "the routing entity itself." The six bytes before it are the system ID, which must be unique in the whole IS-IS domain; it is the router's real identity, and it appears in every hello and every LSP. Everything to the left is the area address. A router can list up to three area addresses, which is how areas are merged or renumbered without an outage.

Operators often build the system ID from the router's IPv4 loopback address, so that 192.0.2.1 becomes 1920.0000.2001 and the two identities are easy to match by eye. The 49 at the front is the prefix you will see in almost every lab and in documentation, FRRouting's own examples included. There is nothing to route to here: the NET is a name the protocol needs for itself, and it has no effect on the IP addresses the network carries.

Hierarchy

Two levels, and areas that end at routers

A link-state database grows with the network, and every change makes every router recompute. Both OSPF and IS-IS answer this with a two-level hierarchy, but they cut the network in different places.

In OSPF, an area boundary runs through the middle of a router. Each interface belongs to an area, and an area border router has interfaces in area 0 and in another area. In IS-IS, each router belongs to exactly one area, and the boundary between areas runs along the links between routers. A router plays one of three roles.

  • Level 1 (L1) routers know their own area only. They form level 1 adjacencies with neighbors in the same area and hold one level 1 database, which describes that area.
  • Level 2 (L2) routers form the backbone. They form level 2 adjacencies with any level 2 neighbor, whatever its area, and hold one level 2 database describing the backbone and the prefixes every area injects into it.
  • Level 1/2 (L1/L2) routers do both, with two separate databases and two separate SPF runs. They sit at the edge of an area and are its doors to the rest of the network.

So the IS-IS backbone is not an area in the OSPF sense. It is the set of routers running level 2, joined by level 2 adjacencies, and it may pass through any number of areas, as long as it is contiguous. A level 2 adjacency never cares about area addresses; a level 1 adjacency requires them to match.

A level 1 router has no idea what lies beyond its area, so how does it send anything there? Through the attached bit. An L1/L2 router that can reach some other area through the level 2 backbone sets the ATT bit in the header of the LSP it floods into level 1. Every level 1 router treats the nearest router with ATT set as the way out, and installs a default route toward it (RFC 1195).

"Nearest" is the catch. The level 1 router measures the distance to the edge of its own area and stops there, because it cannot see past it. If the closest door opens onto a long road, traffic takes the long road. This is the suboptimal exit problem, and the fix is route leaking: the L1/L2 routers copy specific prefixes from level 2 down into their level 1 LSPs, with their full costs, so a level 1 router can compare doors by the whole trip. Leaked prefixes carry the up/down bit so that no L1/L2 router ever copies them back up into level 2, which could otherwise create a loop (RFC 5302).

route preference: L1 > L2 > leaked L2→L1 > default via ATT
An IS-IS router does not simply take the cheapest route. A route learned inside the area always beats one learned from level 2, whatever the costs, and an L1/L2 router prefers its own level 2 route to a copy leaked down into level 1 (RFC 5302 section 3.2, simplified to internal routes). A level 1 router falls back to the default route only when it has nothing more specific.
Instrument 1

Design the levels

Ten routers, twelve links, and you decide the hierarchy. Tap a router to change its level or area, tap a link to change its cost, then pick a source and a destination. The program does what the routers would do: it works out which adjacencies form, builds each router's level 1 and level 2 databases, decides who sets the attached bit, runs Dijkstra in every database, and then forwards a packet hop by hop, each router consulting only its own tables. Try "Suboptimal exit," then switch route leaking on.

Presets
Tap does
Path taken–
Cost of that path–
Other setting–
Attached bit set by–

RouterRole · NETLevel 1 database (LSPs from)Level 2 databaseRoute to destination

Legend: thin line = level 1 adjacency, thick line = level 2 adjacency, thick double line = both, dashed line marked ✕ = the link is up but no adjacency forms. The chosen path is the bold line with arrows; the dashed line with arrows is the path the other leaking setting would take. Every link here is point to point, so there are no pseudonodes; loopbacks are 192.0.2.1 to 192.0.2.10.

Go deeper: what the designer simplifies

Real L1/L2 routers inject their level 1 prefixes into level 2 automatically; the designer does the same, with the cost of the level 1 path added. It treats every prefix as internal, ignores external routes and the older "narrow" metric limit of 63 on inter-area routes, and it decides the attached bit the way ISO 10589 describes: an L1/L2 router is attached when its level 2 database shows a router in some other area. Vendors add knobs on top, such as suppressing the attached bit or ignoring it on receipt; FRRouting's attached-bit command is one example.

Route leaking in a real router is a policy you write, usually "leak only these loopbacks," not a switch that copies everything. The designer leaks every level 2 prefix, which is the simplest case to watch.

The packets

Four kinds of PDU

OSI calls packets protocol data units, PDUs. IS-IS has four kinds, each in a level 1 and a level 2 flavor, and every one starts with the same 8-byte header whose first byte is 0x83, the number ISO assigned to say "this is IS-IS."

PDUType codesWhat it doesClosest OSPF relative
IIH15, 16 (LAN L1, L2) · 17 (point to point)IS-IS hello: discovers neighbors, carries area addresses, priority and the protocols supported, and keeps adjacencies alive.Hello
LSP18 (L1) · 20 (L2)Link state PDU: one router's whole description of itself (neighbors, prefixes, capabilities) as a list of TLVs, with a sequence number and a remaining lifetime.All the LSA types, inside Link State Updates
CSNP24 (L1) · 25 (L2)Complete sequence numbers PDU: a summary of every LSP in the database (ID, sequence number, lifetime, checksum). Sent periodically by the DIS on a LAN and once when a point-to-point adjacency comes up.Database Description
PSNP26 (L1) · 27 (L2)Partial sequence numbers PDU: "I am missing these" on a LAN, or "I got these" as an acknowledgment on a point-to-point link.Link State Request and Link State Ack

An LSP is the router's whole self-description, not a family of separate advertisements. When something changes, the router bumps the sequence number and floods a new copy; newer sequence numbers replace older ones everywhere. Every LSP also carries a remaining lifetime, counted down in seconds while it sits in a database. In ISO 10589 the maximum is MaxAge, 1200 seconds, so a router refreshes its LSPs before they run out; an LSP whose lifetime reaches zero is purged from every database. The lifetime sits outside the checksum, so routers can count it down without recomputing anything. If one router's self-description is too long for one packet, it is split into numbered fragments; the last byte of the LSP ID is the fragment number.

On a shared segment such as an Ethernet LAN, IS-IS elects a designated intermediate system, the DIS. ISO 10589 makes the rule plain: the router with the highest priority wins, and the numerically highest MAC address breaks ties. The DIS does two jobs. It originates a pseudonode LSP on behalf of the segment, so that a LAN with ten routers appears in the database as eleven nodes in a star (ten routers each linked to the pseudonode) rather than as 45 router-to-router links. And it multicasts CSNPs, so every router on the LAN can spot what it is missing and ask with a PSNP.

On a LANIS-IS DISOSPF designated router
Who winsHighest priority, then highest MAC addressHighest priority, then highest router ID
BackupNone. If the DIS fails, a new one is elected, and its new pseudonode LSP replaces the old one.A backup designated router, already adjacent to everyone, takes over at once
Pre-emptionYes. A newcomer with higher priority becomes DIS as soon as the election runs again.No. A router that joins accepts the existing DR "regardless of its Router Priority" (RFC 2328)
AdjacenciesEvery router is adjacent to every other router on the LANRouters become fully adjacent only with the DR and backup
Go deeper: why the DIS can get away with no backup

In OSPF, routers on a LAN synchronize their databases only with the DR and the backup, so losing the DR without a backup would cut the LAN off from flooding while a new one caught up. In IS-IS every router on the LAN is adjacent to every other, and every router multicasts its LSPs to all of them. The DIS only adds a safety net (the periodic CSNP) and a bookkeeping node (the pseudonode). If it disappears, flooding carries on; the next election picks a successor, which issues its own pseudonode LSP, and the stale one ages out or is purged. Losing the DIS is a small event, so there is little to gain from a standby.

Point-to-point links have no DIS at all. The original standard assumed point-to-point links were reliable at the link layer and used a two-way hello; RFC 5303 added a three-way handshake so that a router only declares an adjacency up once it has seen itself listed in its neighbor's hello. It is common to configure an Ethernet link that joins exactly two routers as point to point to skip the DIS election entirely.

The design's big win

Everything is a TLV

After its fixed header, every IS-IS PDU is a sequence of records in one shape: one byte of type, one byte of length, then that many bytes of value. A TLV. A router reads the type, reads the length, and knows exactly where the next record starts, whether or not it understands this one. ISO 10589 makes the rule explicit for LSPs: codes that a router does not recognize are "ignored and passed through unchanged." A router that predates a feature still floods the records that describe it.

That is why IS-IS grew so easily. IP support in 1990 was a handful of new TLV types. Every later feature was too.

TLVNameDefined inWhat it carries
1Area addressesISO 10589The router's area address or addresses
2IS reachabilityISO 10589Neighbors, each with a 6-bit cost ("narrow" metric) and three unused metric bytes
128 · 130IP internal / external reachabilityRFC 1195IPv4 prefixes as address and mask, with 6-bit costs
129Protocols supportedRFC 1195Network-layer protocol IDs: 0xCC for IPv4, 0x8E for IPv6
132IP interface addressRFC 1195The router's IPv4 addresses
22Extended IS reachabilityRFC 5305Neighbors with a 24-bit cost and room for sub-TLVs (bandwidth, admin groups for traffic engineering)
135Extended IP reachabilityRFC 5305IPv4 prefixes with a 32-bit cost and the up/down bit
137Dynamic hostnameRFC 5301A readable name, so tools can show "core1" instead of 0000.0000.0001
232 · 236IPv6 interface address · IPv6 reachabilityRFC 5308IPv6 addresses and prefixes, 32-bit cost, up/down bit

The "wide metrics" story shows the pattern. The original IS reachability TLV gave each neighbor one byte of default metric, two bits of which were flags, leaving a cost of 0 to 63; RFC 5305 calls this "one of the restrictions that we would like to lift." With a ceiling that low, a 100 Gb/s link and a 1 Gb/s link are hard to tell apart. Rather than change TLV 2, RFC 5305 defined new types, 22 for neighbors and 135 for IPv4 prefixes, with 24-bit and 32-bit costs and space for sub-TLVs. IPv6 (TLV 236) was born wide. Multi-topology routing (RFC 5120) adds topology-tagged copies of the same records, and segment routing (RFC 8667) hangs a Prefix-SID sub-TLV inside TLVs 135 and 236; Chapter 12 explains what those segment IDs are for.

narrow: 0 … 63 per link, 1023 per path · wide: 0 … 2²⁴−1 per link, up to 0xFE000000 per path
The old encoding fits a link cost in 6 bits and stops a path at 1023 (ISO 10589). The wide encoding gives a link 24 bits; a link advertised at exactly 2²⁴−1 is kept out of normal SPF, so it can be offered to traffic engineering only. Paths stop at 4,261,412,864, which leaves room to add one more link without overflowing 32 bits (RFC 5305).
Go deeper: changing metric style on a live network

A router that only understands narrow metrics ignores TLVs 22 and 135, so it sees a network with no neighbors and no prefixes from the routers that send only wide ones. Every router in an area must agree. Implementations therefore offer a transition mode that sends both encodings and accepts both; FRRouting calls the three settings metric-style narrow, transition and wide. The usual migration is to move every router to transition, then every router to wide, then raise the link costs that were squeezed under 63.

Instrument 2

Build an LSP, then break it

This builds a real level 1 or level 2 LSP, byte for byte, from the TLVs you tick, and decodes it the way a router would: header first, then type, length, value, until the bytes run out. Click a decoded row to see its bytes, or click a byte to see what it means. The hex box is editable, and the decoder reads whatever is in it, so you can change a byte by hand. Then try the buttons that damage the packet: a TLV whose length points past the end of the PDU is exactly the kind of fault a parser must catch.

LSP
Metric style
The same bytes, colored by what they belong to:
What the decoder reads (offset in bytes on the left):

Side by side

IS-IS and OSPF, fairly

Both protocols flood link-state information, both run Dijkstra, and both can be tuned to converge quickly (Chapter 7 covers how). The differences are in structure and habit, not in raw ability.

QuestionIS-ISOSPF
Carried inLink-layer frames, no IPIP packets, protocol 89 (RFC 2328)
IPv4 and IPv6One instance carries both (RFC 5308)OSPFv2 for IPv4, OSPFv3 for IPv6 (RFC 5340), which can also carry IPv4 with address families
Area boundaryOn links; each router is in one areaInside routers; each interface is in one area
BackboneAny contiguous set of level 2 routersArea 0, which all other areas must touch (or reach by a virtual link)
Leaving a small areaDefault route toward the nearest attached L1/L2 router; leaking optionalSummary LSAs bring inter-area routes in by default; stub areas trade them for a default
What a router floodsOne LSP per router (in fragments), made of TLVsMany LSA types, each with its own fixed format
Adding a featureNew TLV or sub-TLV; unknown ones are flooded on unchangedNew LSA type or opaque LSA; OSPFv3 made unknown-LSA handling explicit
On a LANDIS: pre-emptive, no backup, pseudonode LSPDR and BDR: not pre-emptive, network LSA
Router identity6-byte system ID inside a NET32-bit router ID, written like an IPv4 address
Reachable from off-linkNo: frames are never routedYes, unless filtered: packets are routed IP

OSPF's advantages are familiarity and fit. It is IP-native, taught everywhere, and its rich area types (stub, totally stubby, not-so-stubby) give enterprise networks fine control over what each area sees. IS-IS's advantages show up at scale and over time: a flat single-level design is easy to run, the protocol is indifferent to the IP version, and the TLV format has let operators turn on new features without redesigning the protocol. Neither is "better." Large backbones often choose IS-IS for those reasons; enterprises more often choose OSPF.

Go deeper: the flat network that never needed areas

Many large IS-IS backbones run a single level, often level 2 only, across hundreds of routers. Routers are fast enough to flood and compute a database of that size quickly, and one level means no attached bits, no suboptimal exits and no leaking policy to maintain. Levels are still there for the day the network outgrows one database. Because areas in IS-IS end at routers, a level 1 area can later be carved out of a flat level 2 network by changing the role of a few routers, without renumbering interfaces.

Cheat sheet

Terms from this chapter

IS-IS
Intermediate System to Intermediate System: a link-state routing protocol from the OSI suite (ISO/IEC 10589), extended by RFC 1195 to route IP.
NET
Network Entity Title: the OSI-style name of an IS-IS router, made of an area address, a 6-byte system ID and a 00 selector.
System ID
The 6-byte part of a NET that identifies one router uniquely across the IS-IS domain.
Level 1 / Level 2
The two tiers of IS-IS: level 1 routes inside an area, level 2 forms the backbone between areas; an L1/L2 router does both.
Attached bit (ATT)
A flag an L1/L2 router sets in its level 1 LSP to say it can reach other areas; level 1 routers send unknown traffic to the nearest one.
Route leaking
Copying specific level 2 prefixes into level 1, marked with the up/down bit, so level 1 routers can pick the best exit.
LSP
Link state PDU: one router's complete self-description, as TLVs, with a sequence number and a remaining lifetime.
CSNP / PSNP
Complete and partial sequence numbers PDUs: summaries IS-IS routers exchange to find and request missing LSPs.
DIS
Designated intermediate system: the router elected on a LAN (highest priority, then highest MAC) that sends CSNPs and speaks for the pseudonode; pre-emptive, with no backup.
Pseudonode
A virtual node standing for a LAN in the link-state database, so the LAN appears as a star instead of a full mesh.
TLV
Type, length, value: the record format every IS-IS PDU is built from after its header; unknown types are skipped and flooded on.
Wide metric
The 24-bit link cost and 32-bit prefix cost of RFC 5305, replacing the original 6-bit "narrow" metric.
Where this comes from

Sources