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
NOTE:- 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