Did you know? IS-IS Minimum MTU

I recently came across the fact that my favorite IGP, the Intermediate System To Intermediate System (IS-IS) Routing Protocol has strict requirements regarding the minimum MTU of a link. In fact, for your adjacency to come up, the IS-IS link's maximum transmission unit (MTU) must be at least of 1492 bytes.

Where this MTU comes from?

The ISO/IEC 10598 standard mandates that all intermediary systems (IS) must be capable of receiving LSPs of the size of 1492 octets. At the standard creation, IS-IS could have been carried over both LLC and SNAP encapsulations, which respectively add 3 and 6 octets of header fields. If we take the example of a ethernet link, by doing simple math, we can easily figure out where this famous MTU value comes from.

To transmit a 1492 octets IS-IS LSP, we must add 3 bytes of LLC header and 5 bytes of SNAP header, for a total of 1500 octets. It's exactly the maximum payload size of a standard Ethernet frame. In practice, most vendors, if not all of them, actually only implement LLC encapsulation, therefore the real 'unofficial' MTU is 1497 bytes. Despite the fact the SNAP encapsulation has never been implemented, most IS-IS implementations retained the 1492 bytes LSP length specification, and pads the IS-IS IIHs up to that size and beyond. To do so, they use one or several Padding TLVs (TLV 8). It allow IS-IS to detect if both end of an adjacency comply with the minimum MTU or LSP length. For instance, Cisco IOS pads the IIHs up to the maximum transmission unit of a link, which could result in a Hello PDU as big as 1497 bytes on a standard Ethernet link. Juniper Junos at the other end, always pads IIHs up to 1492 bytes, despite the interface type.

Practical Examples

An example is worth a thousand words, so let's see what is the actual size of the IS-IS IIHs on a Juniper router with a standard Ethernet link.

root@lab-m7i-1> monitor traffic interface fe-0/0/0.603 no-resolve extensive size 1560
00:28:14.126779 Out 
        Juniper PCAP Flags [Ext], PCAP Extension(s) total length 22
          Device Media Type Extension TLV #3, length 1, value: Ethernet (1)
          Logical Interface Encapsulation Extension TLV #6, length 1, value: Ethernet (14)
          Device Interface Index Extension TLV #1, length 2, value: 129
          Logical Interface Index Extension TLV #4, length 4, value: 109
          Logical Unit Number Extension TLV #5, length 4, value: 603
        -----original packet-----
        00:05:85:f3:24:00 > 01:80:c2:00:00:15, ethertype 802.1Q (0x8100), length 1513: vlan 603, p 6, LLC, dsap OSI (0xfe) Individual, ssap OSI (0xfe) Command, ctrl 0x03: OSI NLPID IS-IS (0x83): length 1492
        L2 Lan IIH, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
        0x0000: 831b 0100 1001 0000 
          source-id: 0100.0025.5001,  holding time: 9s, Flags: [Level 2 only]
          lan-id:    0100.0025.5001.05, Priority: 64, PDU length: 1492
          0x0000: 0201 0000 2550 0100 0905 d440 0100 0025 
          0x000f: 5001 05
            IS Neighbor(s) TLV #6, length: 6
              SNPA: 0005.85dc.c000
              0x0000: 0005 85dc c000 
            Protocols supported TLV #129, length: 2
              NLPID(s): IPv4 (0xcc), IPv6 (0x8e)
              0x0000: cc8e 
            IPv4 Interface address(es) TLV #132, length: 4
              IPv4 interface address: 10.0.0.13
              0x0000: 0a00 000d 
            Area address(es) TLV #1, length: 4
              Area address (length: 3): 49.0001
              0x0000: 0349 0001 
            Restart Signaling TLV #211, length: 3
              Flags [none], Remaining holding time 0s
              0x0000: 0000 00
            Padding TLV #8, length: 255
              0x0000: 0001 0008 0501 0000 7530 0008 0801 0000 
              0x000f: 000a 0024 0902 0000 0007 0500 0006 7f00 
              0x001f: 0005 0000 0000 0000 0000 7f80 0000 0000 
              0x002f: 0014 0000 05dc 000c 0a07 0a00 ff07 0000 
              0x003f: 0001 0008 1001 0000 0003 000c 1501 0108 
              0x004f: 0a00 0005 2000 0d63 cf02 1701 0000 2550 
              0x005f: 0302 0000 0000 045f ff04 0001 0000 2550 
              0x006f: 0400 0000 0000 0613 ee04 0001 0000 2550 
              0x007f: 0402 0000 0000 0474 e704 0101 0000 2550 
              0x008f: 0500 0000 0000 0741 7e04 0101 0000 2550 
              0x009f: 0502 0000 0000 0475 e404 0101 0000 2550 
              0x00af: 0503 0000 0000 04aa ab02 1901 0000 2550 
              0x00bf: 0600 0000 0000 0ff0 a002 1701 0000 2550 
              0x00cf: 0700 0000 0000 0cd9 bf09 f002 1701 0000 
              0x00df: 2550 0702 0000 0000 04b3 9f02 1301 0000 
              0x00ef: 2550 0800 0000 0000 0661 2702 1401 00
            Padding TLV #8, length: 255
              0x0000: 5008 0200 0000 0004 b49c 0401 0100 0025 
              0x000f: 5009 0000 0000 0007 fa84 0401 0100 0025 
              0x001f: 5009 0200 0000 0004 7ec6 0401 0100 0025 
              0x002f: 5009 0300 0000 0004 c28a 023c 0100 0025 
              0x003f: 5010 0000 0000 000b 45e9 023d 0100 0025 
              0x004f: 5010 0200 0000 0003 9b9b 0241 0100 0025 
              0x005f: 5011 0000 0000 0008 7012 0401 0100 0025 
              0x006f: 5012 0000 0000 000a 9e67 0401 0100 0025 
              0x007f: 5012 0200 0000 0004 6ed2 03ff 0100 0025 
              0x008f: 5012 0300 0000 0005 929d 03ff 0100 0025 
              0x009f: 5013 0000 0000 0006 7540 03ff 0100 0025 
              0x00af: 5013 0200 0000 0004 b07e 02e6 0100 0025 
              0x00bf: 5014 0000 0000 2ec7 393a 0000 0000 0000 
              0x00cf: 0000 0000 0000 0000 0000 0000 0000 0000 
              0x00df: 0000 0000 0000 0000 0000 0000 0000 0000 
              0x00ef: 0000 0000 0000 0000 0000 0000 0000 00
            Padding TLV #8, length: 255
              0x0000: 0000 0000 0000 0000 0000 0000 0000 0000 
              0x000f: 0000 0000 0000 0000 0000 0000 0000 0000 
              0x001f: 0000 0000 0000 0000 0000 0000 0000 0000 
              0x002f: 0000 0000 0000 0000 0000 0000 0000 0000 
              0x003f: 0000 0000 0000 0000 0000 0000 0000 0000 
              0x004f: 0000 0000 0000 0000 0000 0000 0000 0000 
              0x005f: 0000 0000 0000 0000 0000 0000 0000 0000 
              0x006f: 0000 0000 0000 0000 0000 0000 0000 0000 
              0x007f: 0000 0000 0000 0000 0000 0000 0000 0000 
              0x008f: 0000 0000 0000 0000 0000 0000 0000 0000 
              0x009f: 0000 0000 0000 0000 0000 0000 0000 0000 
              0x00af: 0000 0000 0000 0000 0000 0000 0000 0000 
              0x00bf: 0000 0000 0000 0000 0000 0000 0000 0000 
              0x00cf: 0000 0000 0000 0000 0000 0000 0000 0000 
              0x00df: 0000 0000 0000 0000 0000 0000 0000 0000 
              0x00ef: 0000 0000 0000 0000 0000 0000 0000 00
            Padding TLV #8, length: 255
              0x0000: 0000 0000 0000 0000 0000 0000 0000 0000 
              0x000f: 0000 0000 0000 0000 0000 0000 0000 0000 
              0x001f: 0000 0000 0000 0000 0000 0000 0000 0000 
              0x002f: 0000 0000 0000 0000 0000 0000 0000 0000 
              0x003f: 0000 0000 0000 0000 0000 0000 0000 0000 
              0x004f: 0000 0000 0000 0000 0000 0000 0000 0000 
              0x005f: 0000 0000 0000 0000 0000 0000 0000 0000 
              0x006f: 0000 0000 0000 0000 0000 0000 0000 0000 
              0x007f: 0000 0000 0000 0000 0000 0000 0000 0000 
              0x008f: 0000 0000 0000 0000 0000 0000 0000 0000 
              0x009f: 0000 0000 0000 0000 0000 0000 0000 0000 
              0x00af: 0000 0000 0000 0000 0000 0000 0000 0000 
              0x00bf: 0000 0000 0000 0000 0000 0000 0000 0000 
              0x00cf: 0000 0000 0000 0000 0000 0000 0000 0000 
              0x00df: 0000 0000 0000 0000 0000 0000 0000 0000 
              0x00ef: 0000 0000 0000 0000 0000 0000 0000 00
            Padding TLV #8, length: 255
              0x0000: 0000 0000 0000 0000 0000 0000 0000 0000 
              0x000f: 0000 0000 0000 0000 0000 0000 0000 0000 
              0x001f: 0000 0000 0000 0000 0000 0000 0000 0000 
              0x002f: 0000 0000 0000 0000 0000 0000 0000 0000 
              0x003f: 0000 0000 0000 0000 0000 0000 0000 0000 
              0x004f: 0000 0000 0000 0000 0000 0000 0000 0000 
              0x005f: 0000 0000 0000 0000 0000 0000 0000 0000 
              0x006f: 0000 0000 0000 0000 0000 0000 0000 0000 
              0x007f: 0000 0000 0000 0000 0000 0000 0000 0000 
              0x008f: 0000 0000 0000 0000 0000 0000 0000 0000 
              0x009f: 0000 0000 0000 0000 0000 0000 0000 0000 
              0x00af: 0000 0000 0000 0000 0000 0000 0000 0000 
              0x00bf: 0000 0000 0000 0000 0000 0000 0000 0000 
              0x00cf: 0000 0000 0000 0000 0000 0000 0000 0000 
              0x00df: 0000 0000 0000 0000 0000 0000 0000 0000 
              0x00ef: 0000 0000 0000 0000 0000 0000 0000 00
            Padding TLV #8, length: 149
              0x0000: 0000 0000 0000 0000 0000 0000 0000 0000 
              0x000f: 0000 0000 0000 0000 0000 0000 0000 0000 
              0x001f: 0000 0000 0000 0000 0000 0000 0000 0000 
              0x002f: 0000 0000 0000 0000 0000 0000 0000 0000 
              0x003f: 0000 0000 0000 0000 0000 0000 0000 0000 
              0x004f: 0000 0000 0000 0000 0000 0000 0000 0000 
              0x005f: 0000 0000 0000 0000 0000 0000 0000 0000 
              0x006f: 0000 0000 0000 0000 0000 0000 0000 0000 
              0x007f: 0000 0000 0000 0000 0000 0000 0000 0000 
              0x008f: 0000 0000 00

As shown by OSI NLPID IS-IS (0x83): length 1492, the IS-IS LSP payload on the wire is of 1492 bytes. The router padded the Level-2 LAN Hello message with 6 Padding TLVs, enough to pump up the payload size to the minimum LSP length.

We can change the padding behavior by using the hello-padding knob. The latter allow you to control how and when the router must pad the IS-IS Hello PDUs.

root@lab-m7i-1# set protocols isis interface ge-0/0/0 hello-padding ?
Possible completions:
  adaptive             Padding until state of neighbor adjacency is 'up'
  disable              Do not add any padding for hello packets
  loose                Padding until state of adjacency is 'initializing'
  strict               Padding for all adjacency states
[edit]

Here's an example of a ATM OC3 Link configured for IS-IS Level-2 only routing, with the hello-padding strict option set.

root@lab-m7i-1# show protocols isis 
reference-bandwidth 100g;
level 1 disable;
level 2 wide-metrics-only;
interface at-0/1/0.200 {
    hello-padding strict;
}
interface all;
root@lab-m7i-1# run monitor traffic interface at-0/1/0.200 no-resolve detail size 1560       
Address resolution is OFF.
Listening on at-0/1/0.200, capture size 1560 bytes

00:43:27.945632 Out IS-IS, length 1492
        p2p IIH, hlen: 20, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
          source-id: 0100.0025.5009, holding time: 27s, Flags: [Level 2 only]
          circuit-id: 0x01, PDU length: 1492
            Point-to-point Adjacency State TLV #240, length: 5
              Adjacency State: Down (2)
              Neighbor Extended Local circuit-ID: 0x0a00ff09
            Protocols supported TLV #129, length: 2
              NLPID(s): IPv4 (0xcc), IPv6 (0x8e)
            IPv4 Interface address(es) TLV #132, length: 4
              IPv4 interface address: 10.0.255.9
            Area address(es) TLV #1, length: 4
              Area address (length: 3): 49.0001
            Restart Signaling TLV #211, length: 3
              Flags [none], Remaining holding time 0s
            Padding TLV #8, length: 255
            Padding TLV #8, length: 255
            Padding TLV #8, length: 255
            Padding TLV #8, length: 255
            Padding TLV #8, length: 255
            Padding TLV #8, length: 157

The packet capture show the IS-IS Point-to-Point Hello is of 1492 bytes, as in the previous Ethernet case. However, this time the interface's ISO protocol MTU is of 4470 bytes. It confirms the Junos operating system don't pads the IIH over the standard 1492 bytes, which could led to the non detection of MTU mismatch on higher MTU interfaces.

root@lab-m7i-1# run show interfaces at-0/1/0.200 extensive | match MTU   
    Protocol iso, MTU: 4470, Generation: 316, Route table: 16
Conclusion

The IS-IS minimum MTU provide little to no space for any encapsulation overhead, at least on standard Ethernet links. Therefore, if you run IS-IS over a GRE/IP tunnel, ensure your transport MTU is big enough to accommodate the minimum MTU of 1492 bytes and the additional tunnel header(s). You can also turn on fragmentation, so the tunnel MTU become no longer an issue.

About the author Nicolas Chabbey

Nicolas Chabbey is a Network Engineer certified with Cisco Systems and Juniper Networks. He has begun his career in 2003, and has designed, implemented and maintained networks for enterprises and service providers. When he is not behind a computer, he is riding his mountain bike across the Swiss alps.

Previous Home Next

Comments

blog comments powered by Disqus