# IS-IS

Intermediate System to Intermediate System (IS-IS, also written ISIS) is a routing protocol designed to move information efficiently within a computer network, a group of physically connected computers or similar devices. It accomplishes this by determining the best route for data through a packet switching network.
The IS-IS protocol is defined in ISO/IEC 10589:2002 as an international standard within the Open Systems Interconnection (OSI) reference design.
In 2005, IS-IS was called "the de facto standard for large service provider network backbones".

## Description

IS-IS is an interior gateway protocol, designed for use within an administrative domain or network. This is in contrast to exterior gateway protocols, primarily Border Gateway Protocol (BGP), which is used for routing between autonomous systems.
IS-IS is a link-state routing protocol, operating by reliably flooding link state information throughout a network of routers. Each IS-IS router independently builds a database of the network's topology, aggregating the flooded network information. Like the OSPF protocol, IS-IS uses Dijkstra's algorithm for computing the best path through the network. Packets (datagrams) are then forwarded, based on the computed ideal path, through the network to the destination.

## History

The IS-IS protocol was developed by a team of people working at Digital Equipment Corporation as part of DECnet Phase V.
The Internet Engineering Task Force (IETF) published IS-IS in 1990, but that RFC was later retracted and marked as historic because it republished a draft rather than a final version of the International Organization for Standardization (ISO) standard, causing confusion.
The protocol was standardized by ISO in 1992 as ISO 10589, for communication between network devices that are termed Intermediate Systems (as opposed to end systems or hosts) by the ISO. The purpose of IS-IS was to make the routing of datagrams possible using the ISO-developed OSI protocol stack called Connectionless-mode Network Service (CLNS). IS-IS was developed at roughly the same time that the Internet Engineering Task Force IETF was developing a similar protocol called OSPF. IS-IS was later extended to support routing of datagrams in the Internet Protocol (IP), the network-layer protocol of the global Internet. This version of the IS-IS routing protocol was then called Integrated IS-IS.

## IS-IS terminology

In IS-IS world there is slightly different terminology which comes from ISO wording. Below is the ISO terminology and its counterpart which is widely used in standards and related documentation.
* Intermediate system - router
* Designated intermediate system - designated router
* End system - host
* Circuit - link
* Adjacency - neighborship

## Circuit types

Compared to OSPF, IS-IS has only two circuit types - broadcast (LAN) and P2P. Therefore, designs such as P2MP are unavailable in IS-IS.

## Packet types

IS-IS adjacency can be either broadcast or point-to-point.

### IS-IS Hello PDU (IIH)

    The IS-IS hello packets needs to be exchanged periodically between 2 routers to establish adjacency. Based on the negotiation, one of them will be selected as DIS (Designated IS). This hello packet will be sent separately for Level-1 or Level-2. There are 3 IS-IS hello packets depending on the circuit type -
   * LAN L1 (PDU type 15)
   * LAN L2 (PDU type 16)
   * P2P (PDU type 17). As can be seen, on point-to-point links there are no separate hello packets per level, while on broadcast links - there are. In IS-IS, compared to OSPF, hello timers do not need to match.

### Link State PDU (LSP)

    This contains the actual route information. This LSP can contain many type–length–values (TLVs). LSP header is called LSP ID and consists of System ID, Pseudonode ID and Fragment ID. In example of LSP ID 1921.6820.0002.02-01
   * 1921.6820.0002 is System ID (that generated this LSP),
   * 02 is Pseudonode ID,
   * 01 is Fragment ID.
    If Pseudonode ID is equal to zero, then this is a real intermediate system. Any value different from zero means that this LSP is generated by DIS (Pseudonode).
    If LSP is too big, then it gets fragmented. In order to indicate this, Fragment ID is used. If Fragment ID is equal to zero, then no fragmentation has occurred.

### Complete Sequence Number PDU (CSNP)

    This packet will be sent only by the DIS. By default, for every 10 seconds, CSNP packet will be transmitted by DIS. This will contain the list of LSP IDs along with sequence number and checksum.

### Partial Sequence Number PDU (PSNP)

    If the router which receives CSNP packet finds some discrepancy in its own database, it will send an PSNP request asking the DIS to send specific LSP back to it.

## IS-IS addressing and NET

From regular TCP/IP world we are used to know that each Layer 3 interface (including loopback) has its own IPv4 or IPv6 address. The most important point is that loopback interface always stays up (unless deleted) compared to physical or logical interfaces.
Therefore, ISO chose a different approach - instead of assigning layer 3 address to each interface, single address is assigned to loopback interface, while other interfaces are considered as unnumbered. This single address is called NET (Network Entity Title).
On a single intermediate system there can be up to 3 NET addresses. This is useful during migration from one area to another.
NET consists of Area, System ID and NSEL. Area itself consists of AFI (Address Family Identifier) and Area ID.
Area can have variable length of 1 - 13 bytes, System ID is 6 bytes and NSEL - 1 byte.
Let's check on an example NET of 49.0100.1921.6821.1138.00. Here,
* 49 is AFI, and in case of 49 it means "private address space", similar to RFC1918 for IPv4.,
* 0100 is Area ID,
* 49.0100 is Area,
* 1921.6821.1138 is System ID,
* 00 is NSEL, which must be zero. If not zero, then no IS-IS adjacency is formed.

## Hostname resolution

Let's imagine, that engineer examines L2 or L1 database, or needs to view a specific LSP. Each LSP has LSP ID, consisting of System ID, Pseudonode ID and Fragment ID. Because generally System ID is router's loopback address, remembering which loopback address to which router is not always convenient.
Similar problem is observed in OSPF, when LSDB or specific LSA is checked - they are listed by Advertising router, which is actually an IP. In case of OSPF, in order to overcome difficulty of remembering router IPs or consulting with list, local DNS resolution can be configured. But as it might be understood, this is not very convenient and fast way, especially during troubleshooting ongoing issues.
IS-IS solves this problem in a very elegant manner - in each LSP there is TLV 137, which displays hostname of the originating router. By this means, all routers know hostnames of other routers in the level by examining LSPs. That's why when viewing LSP in L2 or L1 database, they are displayed by hostname, not System ID.
On the other hand, if needed, hostnames and their matching System IDs can be easily seen from IS-IS which keeps their list.

## Areas and levels

In IS-IS there is concept of areas, but here it works differently from OSPF. First of all, in contrary to OSPF, in IS-IS area is terminated on router, not link.
In IS-IS, backbone area consists of contiguous Level 2 routers. Level 1 areas can be thought as stub areas in OSPF, where very limited reachability information is available. L1/L2 routers act like area border routers (ABRs) between L1 routers and L2 routers by keeping two databases - L1 database and L2 database.
Here is very important role of L1/L2 router - if it is connected to L2 router in another area, then it sets ATT (ATTached bit) in its L1 LSP. L1 routers which receive this LSP (with ATT bit) add default route to originator of this LSP. This is different from OSPF, where ABR generates default route to stub area routers and sends it via LSA 3.
Another difference of router in L1 area in IS-IS from router in stub area in OSPF is that L1 router can inject external routes into area, which travels up to L1/L2 router. With that, it resembles NSSA area in OSPF (where you cannot have external routes from backbone area, but you can inject external routes to NSSA area which are then translated to regular LSA 5 external routes by NSSA ABRs).
However, by default, external L1 routes are not injected from L1 to L2. This can be changed by policy on L1/L2 router, which accepts L1 external routes and originates them into L2.
In case of OSPF, if at some moment it is needed to inject external routes into OSPF domain from stub area, this can be done only by changing area type from stub to NSSA. This will causes tearing down OSPF neighborship. In IS-IS, this happens hit-less, just by adding a new export policy under protocol.

## Attribute bits in LSPs

IS-IS LSPs contain specific information, encoded to Attribute block in LSP header, which is 8 bits long. Here are some of the important ones
* P bit - Partition repair bit, 8th bit, indicates if partitioned L1 area can be repaired (joined together) over L2 area. Modern deployments of IS-IS generally do not support partition repair function, therefore, it is not set.
* ATT bit - Attached bit, 7th - 4th bits, indicates if originating router is attached to another area. If these bits are set by L1/L2 router in its L1 LSP, then other routers in L1 area will automatically generate default route to the originator. Technically, there are 4 ATT bits, each of them responsible for Error, Expense, Delay and Default metrics. This was because when IS-IS was originally developed, it was assumed that routing protocol would support multiple topologies and separately calculate a separate SPF for each metric. Later, this was deprecated, therefore, modern IS-IS deployments when necessary, set only 4th bit (for default metric).
* OL bit - Overload bit, 3rd bit, indicates if the router is overloaded. If this bit is set, then this router is NOT used as transit. However, it will be still reachable. Overload bit can be set by router under heavy load or intentionally by engineer. Setting overload bit is an easy way to gracefully offload the router prior to maintenance which requires router reboot. After router reboots and is available, then overload bit can be cleared manually. Another implementation would be to wait for other dependent protocols (such as BGP) to fully establish neighborship, and only after that become transit. This is because IS-IS converges much faster compared to BGP and if the router becomes transit before BGP has fully converged, this could cause traffic blackholing. A good example would be PE router, running MPLS VPN with IS-IS and BGP. After PE boots, establishes IS-IS adjacency, establishes BGP neighborship with other routers, overload bit is cleared and this router joins MPLS VPN network.
* IS type bits - 2nd and 1st bits, indicate IS type of the originator. It can be L1 only, L2 only and L1/L2. If only first bit is set, then this is L1 only, if only second bit - L2 only, and if both bits are set - then this is L1/L2 router.

## Wide metrics

When IS-IS was initially introduced, TLVs for IS reachability (TLV 2) and IP reachability (TLVs 128 and 130) could have interface metric no more than 63 (6 bits) and total accumulated path metric of no more than 1023 (10 bits).
Obviously, nowadays with higher link speeds and more hops in the path it would be challenging to stay within these limits.
Therefore, 2 new TLVs - TLV 22 for Extended IS reachability and TLV 135 for Extended IP reachability - were introduced. With this, now link metric can be up to 16.7 million (24 bits) and total accumulated path metric can be up to 4 billion (32 bits).
Older style metric is therefore called narrow metrics, while new style metric - wide metrics.
Wide metrics or narrow metrics can be set on level base.

## Adjacency formation

Compared to OSPF, in IS-IS rules and conditions of adjacency formation are much simpler and mainly depend on the router level.
* L1 router cannot form any adjacency with L2 router under any conditions.
* L1 router can form L1 adjacency with other L1 router if their areas match.
* L1 router can form L1 adjacency with L1/L2 router if their areas match.
* L2 router can form L2 adjacency with other L2 router regardless of their areas (they don't need to match).
* L2 router can form only L2 adjacency with other L1/L2 router regardless of their areas (they don't need to match).
* L1/L2 router can form both L2 and L1 adjacency with other L1/L2 router if their areas match.

## Broadcast segments and designated intermediate system

On broadcast networks IS-IS is prone to issue, similar to OSPF, when all routers on the broadcast segment need to form adjacency and exchange LSPs. Therefore, number of LSPs increase in square.
In order to overcome this issue, on each LAN segment a designated intermediate system (DIS) is elected. The router with the highest priority and System ID wins. But, if a new router shows up and has better priority or System ID, then it is elected as a new DIS.
Elected DIS router is a pseudonode, which uses resources (including System ID) of one real router. DIS describes adjacency between routers in the broadcast segment in hub-spoke manner, where DIS is the hub while other routers (including router, promoted to DIS) are spokes.
Pseudonode ID in LSPs, originated from DIS, always have Pseudonode ID field different from zero.
All routers on the LAN segment form adjacency with only DIS and exchanges LSPs with it.
The function of DIS is to send periodic CSNPs on the LAN segment and reply to PSNPs from other routers. In case of DIS failure a new DIS will be elected in the segment. The role of DIS is not as critical as of DR in OSPF. That's why there is no backup DIS (BDIS) elected in IS-IS compared to BDR in OSPF.

## Authentication

IS-IS supports both simple password and MD5 authentication types. In IS-IS, per-level or per-interface authentication is possible.
In addition, to protect from replay attack, IS-IS uses increasing Sequence number in IIH.

## IPv6 support and multi-topology

Because IS-IS encapsulates its PDUs into Layer 2 frame, it does not depend on Layer 3 protocols, such as IPv4 or IPv6. This is different from OSPF, which uses IPv4. Therefore, when IPv6 came up, adding IPv6 support to OSPF would require re-writing the protocol. That is how OSPFv3 was created.
In case of IS-IS, TLV 232 for IPv6 interface address and TLV 236 for IPv6 reachability were added to support IPv6. And of course, IPv6 needs to be enabled on the interface.
In order to display supported Layer 3 protocols, also called NLPID (Network Layer Protocol ID), TLV 129 is used. Here, IPv4 has code of 0xCC, while IPv6 - 0x8E.
There might be an issue, if IPv4 and IPv6 topologies do not overlap. This could happen due to misconfiguration or intentionally (if some routers between do not support IPv6). For this situations, multi-topology support is added to IS-IS.
TLV 229 was added to display supported multi-topologies, such as IPv4 unicast and IPv6 unicast.
If multi-topology is enabled, IS-IS will calculate separate SPF tree for IPv4 and IPv6. This means twice the resource usage, but from the other side, this prevents traffic blackholing.
When multi-topology is enabled, then IS-IS will use TLV 222 for Multi-topology IS reachability, TLV 235 for Multi-topology IP reachability and TLV 236 for Multi-topology IPv6 reachability.

## IS-IS path selection

Depending on the configuration, the router can have either L1, L2 or both L1/L2 databases, against which it runs SPF algorithm.
But there can be situations, when IS-IS router has exactly the same prefix in different level databases, or external and internal. In order to choose best path in this situations, there is a very specific order, in which the route goes from the most preferred to the least preferred:
* L1 intra-area with internal metric,
* L1 external with internal metric,
* L2 intra-area with internal metric,
* L2 external with internal metric,
* Inter-area (from L1 to L2) with internal metric,
* Inter-area external (from L1 to L2) with internal metric,
* Inter-area (from L2 to L1) with internal metric,
* Inter-area external (from L2 to L1) with internal metric,
* L1 external with external metric,
* L2 external with external metric,
* Inter-area external (from L1 to L2) with external metric,
* Inter-area external (from L2 to L1) with external metric.

## BFD support

IS-IS has Hello packets (IIH) which carry information about the router and are used to form adjacency. Another function of hello packets is to detect failure between routers. This can be problematic, if the routers are not directly connected to each other and there is some active equipment between them.
Technically, it is possible to lower hello and hold time intervals to detect failure faster, but this can put unnecessary stress to router.
Instead of this, BFD can be used. Because BFD is running in data plane over UDP, it nearly does not impact main CPU. Also, BFD can provide sub-second failure detection.

## Other uses

IS-IS is also used as the control plane for IEEE 802.1aq Shortest Path Bridging (SPB). SPB allows for shortest-path forwarding in an Ethernet mesh network context utilizing multiple equal cost paths. This permits SPB to support large Layer 2 topologies, with fast convergence, and improved use of the mesh topology. Combined with this is single point provisioning for logical connectivity membership. IS-IS is therefore augmented with a small number of TLVs and sub-TLVs, and supports two Ethernet encapsulating data paths, 802.1ad Provider Bridges and 802.1ah Provider Backbone Bridges. SPB requires no state machine or other substantive changes to IS-IS, and simply requires a new Network Layer Protocol Identifier (NLPID) and set of TLVs. This extension to IS-IS is defined in the IETF proposed standard RFC 6329.

## Related protocols

* Fabric Shortest Path First (FSPF)
* Transparent Interconnection of Lots of Links (TRILL)