Найти в Дзене
Linux | Network | DevOps

MTU (maximum transmission unit)

Ранее уже был пост на тему выбора размера MTU для VPN туннелей. Чаще всего об этом не нужно беспокоиться, принимая все параметры по умолчанию, но иногда бывают ситуации, и я с ними сталкивался, когда приходится разбираться из-за заметного уменьшения быстродействия туннеля без видимых причин. Я вспомнил об этой теме, потому что столкнулся с реальным примером. У меня не возникло каких-то проблем с быстродействием, но получилось на практике посмотреть на эти настройки. Мне нужно было подключиться к старенькому PPTP туннелю. Клиентом выступал Mikrotik. При создании PPTP интерфейса Mikrotik предлагает выбрать MTU 1450. Я немного погуглил, но не понял, а почему именно это значение ставить? Есть рекомендации сделать либо больше, либо меньше. Не понятно. Взял под Windows утилиту mturoute. Это лучшее решение для быстрого определения MTU. Она отправляет нефрагментированные ICMP пакеты разного размера, определяя максимальный размер, который доходит до адресата. В настройках Mikrotik для начала ук

Ранее уже был пост на тему выбора размера MTU для VPN туннелей. Чаще всего об этом не нужно беспокоиться, принимая все параметры по умолчанию, но иногда бывают ситуации, и я с ними сталкивался, когда приходится разбираться из-за заметного уменьшения быстродействия туннеля без видимых причин.

Я вспомнил об этой теме, потому что столкнулся с реальным примером. У меня не возникло каких-то проблем с быстродействием, но получилось на практике посмотреть на эти настройки. Мне нужно было подключиться к старенькому PPTP туннелю. Клиентом выступал Mikrotik.

При создании PPTP интерфейса Mikrotik предлагает выбрать MTU 1450. Я немного погуглил, но не понял, а почему именно это значение ставить? Есть рекомендации сделать либо больше, либо меньше. Не понятно.

Взял под Windows утилиту mturoute. Это лучшее решение для быстрого определения MTU. Она отправляет нефрагментированные ICMP пакеты разного размера, определяя максимальный размер, который доходит до адресата. В настройках Mikrotik для начала указал MTU 1500, запустил туннель и выполнил проверку:

> mturoute 192.168.10.1

* ICMP Fragmentation is not permitted. *

* Speed optimization is enabled. *

* Maximum payload is 10000 bytes. *

- ICMP payload of 1472 bytes is too big.

+ ICMP payload of 92 bytes succeeded.

+ ICMP payload of 1299 bytes succeeded.

- ICMP payload of 1466 bytes is too big.

+ ICMP payload of 1463 bytes succeeded.

+ ICMP payload of 1464 bytes succeeded.

- ICMP payload of 1465 bytes is too big.

Path MTU: 1492 bytes.

В Linux можно использовать tracepath:

# tracepath 192.168.10.1
 1?: [LOCALHOST]           pmtu 1500
 1: ???                         0.586ms
 1: ???                         0.256ms
 2: 10.8.2.1                    5.685ms
 3: 10.8.0.3                    11.253ms
 4: 10.8.0.3                    14.199ms pmtu 1492
 4: 192.168.10.1                17.783ms reached
   Resume: pmtu 1492 hops 4 back 4

Обе утилиты показали максимальный размер пакета 1492. Его я и установил в настройках PPTP интерфейса. Если бы я оставил то, что предлагалось по умолчанию 1450, то проблемы бы тоже не было. Но теоретически, с 1492 скорость будет немного выше. А вот если поставить 1500, то наверняка будут проблемы, так как стандартные пакеты начнут дополнительно фрагментироваться.

Задался вопросом. А почему, собственно, рабочее MTU 1492? Ведь по идее PPTP уменьшает стандартный размер пакета как минимум на следующие заголовки: IPv4+TCP+GRE. То есть там как минимум будет уменьшение на 20+20+8 = 48 байт. MTU должно быть 1452. Дело тут скорее всего в том, PPTP для передачи данных использует отдельное соединение с помощью протокола GRE. Сначала выполняется управляющее подключение по TCP порту 1723. А потом данные передаются по отдельному GRE соединению. Если верить калькулятору, то GRE с ключом как раз забирает для своих заголовков 8 байт и MTU будет 1492.

Данный вопрос 100% актуален, если у вас используется PPPoE соединение с интернетом, а поверх него VPN туннель. Там точно нужно будет делать поправку на PPPoE. У меня есть одна точка с таким соединением. Без VPN mturoute показывает MTU 1480.

Надеюсь вам эта информация будет полезна и где-то пригодится. Тема с MTU сложная. Нужно хорошо понимать, как вообще устроена передача данных, из чего состоят пакеты, как передаются, фрагментируются и т.д.

️Из этой заметки стоит сохранить на память как минимум:

◽️Visual packet size calculator

◽️mturoute.exe

◽️Чем отличаются утилиты traceroute, tracert и tracepath?