# How to set the right MTU

March 2018

Let's use an analogy here: suppose one walks to the market and only has one carrier bag. The individual will aim to buy as many items as possible but still make sure that all of these can fit in the bag rather than being split across several bags which he hasn't got. Similarly for digital networks, MTU is the parameter that decides the largest datagram transferred without being fragmented through the network. Below is an introduction to MTU as well as an explanation on how to calculate it. Also, find out the value of MTU in Windows and Linux and how to change them.

## What is MTU?

The Maximum Transmission Unit (MTU) (maximum size of transfer unit) is a parameter that determines the longest datagram can be transmitted by an IP interface without needing to be fragmented into smaller units. The MTU should be larger than the largest datagram you want to convey without being fragmented. More simply, the MTU defines the maximum size (in bytes) of the packet that can be transmitted at once.
• For ethernet, this value should be 1500 bytes.
• For PPPoE connections, 1492
• For CTS (low speed), 576

## Calculate the MTU

Each transmission frame is defined by the body (= MMS = maximum segment size) which defines the largest segment of TCP information that can be transmitted, and the header .
• MTU = MSS + TCP / IP headers

Consider that:
• MSS = MTU-40 <- 40 for the header (20 byte IP and 20 byte TCP)

Packets are not fragmented
No lost packets
• Packet size / speed

Either a transfer of information of 1500000 bytes using different size of packets through a T1 line (CTS) (T1 = 1544000 bits / sec) as follows:

`(MSS + header) * 8 bits / byte       ---------------------------------- = Latency       1,544,000 bits / sec.`
• By using different values of MTU, one can calculate the latency of transmission:

If MTU = 1500, then: (1460 +40) * 8 / 1544000 = 7772 ms

If MTU = 576, then: (536 +40) * 8 / 1544000 = 2924 ms
• At 10 loops, we get 77.72 ms for the MTU to 1500, and 29.24 ms for the 576.
• To summarize, the more packets there are, the longer the transfer ;-)

Using the same formula for the transfer of 1mb.

1MByte = 1024 KB = 1,048,576 bytes.
• If MTU = 1500, then: (1460 +40) * 8 / 1544000 = 7772 ms
• 1 MByte / MSS = 1048576 bytes / 1460 = 718.2, so 719 packages to transfer 1 MByte.
• To transfer 1Mbyte: 719 ms 7772 * packets (always loop) = 5588.068 ms, or 5588 seconds.
• If we transfer our 1 MByte in 10 loops (defined by the header), we will ideally:

(1 packet loops * 10 * 7.772ms delay) + 718 * 7772 = 5658 seconds.

If MTU = 576, then: (536 +40) * 8 / 1544000 = 2924 ms

1 MByte / MSS = 1048576 bytes / 536 = 1956.3, therefore 1957 packets to transfer 1 MByte.
• To transfer 1 MByte: 1957 packets * 2924 ms (always loop) = 5722.268 ms, or 5722 seconds per loop.

If we transferred the 1 MByte in 10 loops:

(1 packet loops * 10 * 2.924ms) * 2924 + 1956 = 5748 sec.

The difference is that most packet size is large, less that of the header is important (relatively ^ ^)
So to transfer 1Mbyte, if one uses an MTU to 1500 then there is 719 * 40 = 28,760 bytes for the header, while the MTU to 576, we get 1957 * 40 = 78,280, more than 49,520 bytes of 'header sent Mbyte each. For our example of 10 loops, it is not considerable, but on the daily transfers ...

Most modems use a larger header, and we do not take into account and such other latencies that may be associated.

## Find the value of the MTU on Windows

To find the maximum MTU, it should be in the command prompt (Start> Run> "cmd"). Once in the command prompt (black page), it is necessary to test ping, indicating the size of packages to test:
• ping-f-l (size of the package -28) (IP of your server)

The-f option allows you to take the test by requiring routers encountered not fragment the packet

The-l option sends the packet size

Removing 28 to the packet size to be tested corresponds to the header of this package

We must take the test to an IP. For the sake of Internet browser, it is better to take a web address.
• This gives:

`ping-f-l 1372 192.168.0.1    - If the answer to the query is:       Reply from 192.168.0.1: bytes = 1372 ....       Reply from 192.168.0.1: bytes = 1372 ....       Reply from 192.168.0.1: bytes = 1372 ....       Reply from 192.168.0.1: bytes = 1372 .... `

Here the packet size allows to transport without fragmentation, one can test a higher value. When you get the message: "The package must be fragmented but DF set", the packet size is too large.

### Changing the MTU on Windows

Once you have determined the optimal MTU, there are two ways to change the value of MTU. I mention here the easiest to implement, via the software:

Once installed, you have a "MTU" box, where you must enter the value of the test under DOS by adding 28 for the header.

## Find the value of the MTU on Linux

• Just run this command as root with name_interface to replace with the name of the network interface concerned:

`interface_name ifconfig | grep-Eo "MTU: [0-9] +"    `

### Changing the MTU on Linux

• In root with the ifconfig command that changes the MTU on Linux with the following syntax:

`interface_name ifconfig mtu value_mtu `
• Example: set the MUT of the interface to 1500

`ifconfig eth0 mtu 1500`