Tuesday, April 15, 2014

How to check and change MTU value on the Windows server/computer

MTU is Maximum Transmission Unit and it's the size of the biggest packet that can be sent without being fragmented. By default it's set to 1500 on Windows systems (and on most of other types of systems). When source or destination device sends or receives data that is bigger than the MTU, it fragments the data so it's sent in several packets of MTU size. So if the MTU is set to 1500 and the data will be 2000 bytes, there will be two packets sent - 1500 and 500. By default 28 bytes are taken by so called frame, which is information about a packet and not the data itself. Why is MTU setting important? Well, not all kinds of data can be fragmented and secondly, inconsistency in MTU size can cause issues. If one device sends packets fragmented to 1500 and the receiving device has MTU set to 1400, it won't accept the packets at all.

I had an issue that for some reason one of the servers had MTU persistent value set to 1496. This was a domain controller and that caused AD replication to fail. It took a while to find the cause and turned out it was the incorrect MTU value because the replication partner of this DC was sending 1500 bytes packets and they were not allowed. However the value set on server was set to 1500, the maximum allowed packet was 1496. This was caused by additional 4 bytes added to the frame by backup software and backup NIC. As a workaround it was decided to change the value of MTU on both replication partners to 1400 which immediately resolved the issue.

How to check MTU value:

Open command prompt as Administrator and run the following command:

    netsh int ip show interfaces

the result should be similar to this:








Sometimes, as described in the issue above, the actual MTU value can be lower then the one set up on the interface. To check the actual accepted MTU size you can use mturoute tool: 


which can show you MTU values on all devices in the path and help you to find the bottleneck.

Also to check the biggest packet size regardless of MTU set up you can use ping and trial/error approach - accepted size will reply, too big size will time out

    ping destination_ip -l packet_size

example: ping 10.10.10.10 -l 1500

How to change MTU value:

Open command prompt as Administrator and run the following command

    netsh int ip set subinterface "interface_number" mtu="mtu_value" store=persistent

example: netsh int ip set subinterface 17 mtu=1500 store=persistent