Testing ping with jumbo frames

So you have configured your MTU/jumbo frames to be 9000 on your clients, on your destination devices and all your switches. How do we confirm if our new 9000 byte MTU is actually working

    Whilst you set your MTU to be 9000, almost all ping implementations do not account for the overhead of 28 bytes used, so the packet size to specify for ping is the MTU size -28, which is 8972 when testing for an MTU size of 9000.

The reason for the 8972 on *nix devices is that the ICMP/ping implementation does not encapsulate the 28 byte ICMP (8) + IP (20) (ping + standard internet protocol packet) header - thus we must take the 9000 and subtract 28 = 8972.

Depending on the OS you are running determinas which command and options to use in your testing.

  • For Solaris use:
    ping -D -s  8972 ip-addr
  • On Linux use:
    ping -M do -s 8972 ip-addr
  • On Mac OSX use:
    ping -D -s 8184 ip-addr

    NOTE: Even though Mac OSX are *nix kernels, the ping implementation only supports packets 8192 in size so we must remove the ICMP (8 byte) header as the ping implementation has already included the 20 byte IP header, 8192 - 8 = 8184.

  • On Microsoft Windows use:
    ping -f -l 8972 ip-addr
  • In ESX shell use:
    vmkping -s 8972 ip-addr

If you have forgotten to enable jumbo frames on your client or destination device you are sending the ping to/from you will see messages similar to the following:

PING xxx.xxx.xxx.xxx (xxx.xxx.xxx.xxx) 8972(9000) bytes of data.
ping: local error: Message too long
PING xxx.xxx.xxx.xxx (xxx.xxx.xxx.xxx) 8972(9000) bytes of data.
Request timeout for icmp_seq 0

If jumbo packets are setup correctly on both source and destination, you'll get the following:

PING xxx.xxx.xxx.xxx (xxx.xxx.xxx.xxx): 8184 data bytes
8192 bytes from xxx.xxx.xxx.xxx: icmp_seq=0 ttl=128 time=0.426 ms