other than manually changing it, how is MTU set?

I recently discovered a Windows 7 client that couldn't connect to one of our servers. It turned out the problem was both that the server was set for an MTU of 1514 and that the client was set to 1504.

The server runs CentOS and grep -i MTU /etc/sysconfig/network-scripts/ifcfg* shows nothing. The non-public interface eth1 was still 1500. None of our other machines on the server side have anything other than 1500 for an MTU.

On the client side, there was one other Windows 7 machine in the mix that also had 1504. Taking these machines off-site caused them to work again (but I don't know if that was in spite of the bad MTU, or if the new location caused Windows to select a valid one), but failed once brought back.

  1. What would have caused these two Windows machines to have this non-standard MTU setting? How does Windows determine MTU settings?

  2. Why would eth0 have had an MTU setting of 1514? How does Linux determine MTU settings?

  3. Should I hard-code MTU=1500 into all my ifcfg files from now on for fear that something else will bump it higher? What would override the default of 1500?


The client can perform Path MTU Discovery, which is the smallest MTU on the complete path between two devices, and then reduce the MTU to match. This is particularly necessary for traffic that shouldn't be fragmented, such as IPSec.

As Shane Madden mentions in the comments above dropped ICMP packets in the path will break this. I suspect there are some switches on the market that have all ICMP blocked by default, so I would check to see whether any new switches or routers were introduced and whether they need to have ICMP traffic enabled.