Monthly Archives: March 2014

I’m working on a Juniper rollout right now, and this network will need to interop with routers and switches from other vendors such as Cisco.

A mismatched MTU could result in something simple like an OSPF adjacency not forming, or cause layer-2 issues such as dropped frames. This post outlines the MTU configuration differences on Cisco IOS/XE/XR and Juniper Junos.

Ethernet Frame

This is a standard “1500 byte” frame and consists of the following fields:

Destination address: The 6 byte destination MAC address

Source address: The 6 byte source MAC address

Ethertype: A 2 byte field that identifies the upper layer protocol

Data: a variable length field of length 46-1500 bytes

FCS: The 4 byte checksum (frame check sequence / CRC)

You can see here that an Ethernet frame containing 1500 bytes of data actually places 1514 bytes on the wire, plus the CRC. So does that mean that the configured MTU is 1500 or 1514 or 1518? Is there a difference between the interface MTU and the protocol MTU? Let’s see!

MTU Lab

Topology

For the purposes of this blog I’m using the virtual topology below.

Software revisions are as follows

IOS (Cisco 7200 12.4(24)T)

IOS-XE (CSR1000V 15.4(1)S)

IOS-XR (IOS-XRv 5.1.1)

Junos (12.3R5.7)

Junos (Firefly 12.1X46)

Cisco IOS

OK, so lets start with IOS. The default physical MTU is set to 1500, but this does not include the 14-bytes of Layer 2 frame overhead. Note, the 4-byte FCS is never included in MTU calculations. The IP MTU is also set to 1500.

IOS includes the IP and ICMP headers in the size, as well as ICMP data. If we look at what’s been placed on the wire with a 1500 byte ping we should expect to see 1514 bytes:

1472 bytes data

8 bytes of ICMP header

20 bytes of IP header

14 bytes of Ethernet headers

Great – that’s exactly what we expected to see. We’ve confirmed that the MTU setting on IOS does not include the L2 headers and that setting the hardware MTU to 1500 on IOS enables 1500 bytes of protocol data.

Let’s see what this router places on the wire. Again, a ping of size 1500 so as with IOS we expect to see expect to see 1514 bytes on the wire, which we do

Cisco IOS-XR

This is where things start to get a little different. The hardware MTU is configured including the L2 headers (not the FCS). Therefore if we want to allow 1500 bytes of protocol data, we must set the MTU to 1514.

The maximum ping achievable was with size 1500. We can derive from this that the ping “size” is not including the L2 headers, but does include the IP and ICMP headers. The packet capture should show 1514 bytes on the wire, which it does.

Junos

On Junos the MTU includes the Layer 2 headers, again without the FCS. Therefore if we want to allow 1500 bytes of protocol data, we must set the MTU to 1514.

The protocol MTU is derived from the interface MTU if it is not explicitely configured. Below we can see the interfaces MTU set to 1514 and the IP MTU set to 1500.

Well that didn’t work. The 1500 on Junos is specifying the size of ICMP data only, not the data and headers. With that in mind, we’d expect a ping of size 1472 (1500 – 20 – 8) to be the maximum that will work. Let’s see.