MTU (Maximum Transmission Unit) - это максимальный размер пакета, который может быть передан без фрагментации. Неправильно настроенное значение MTU может привести к странным сетевым багам: страницы не грузятся до конца, SSH висит, API-запросы обрываются и т.д.
▪️ Как проверить MTU между двумя узлами?
Один из самых надежных способов - использовать
ping с флагом запрета фрагментации (в Linux - -M do):
ping -c 4 -M do -s 1472 8.8.8.8
Почему 1472? 1472 байта данных + 28 байт заголовков (IP + ICMP) = 1500 байт - стандартное MTU для Ethernet.
Если MTU меньше - вы получите ошибку:
Frag needed and DF set
Уменьшайте значение -s по шагам, пока ping не пройдет - это и будет максимальный размер без фрагментации.
▪️ Альтернатива - tracepath:
tracepath 8.8.8.8
Этот инструмент сам определяет, на каком узле в пути начинается фрагментация.
▪️ Настройка MTU:
Постоянная настройка через netplan (Ubuntu):
ethernets:
eth0:
dhcp4: yes
mtu: 1400
Для временного изменения:
ip link set dev eth0 mtu 1400
▪️ Проблемы с фрагментацией чаще всего появляются:
При использовании VPN и туннелей (WireGuard, IPsec, OpenVPN)
В облачных сетях с Jumbo Frames
При неправильно настроенном MSS (Maximum Segment Size)
Для TCP можно использовать
iptables для автоматической коррекции MSS:
iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN \
-j TCPMSS --clamp-mss-to-pmtu
#ping #MTU
🧑💻 NetworkAdmin