У вас есть признаки проблемы MTU : некоторые TCP-соединения зависают, более или менее воспроизводимо для данной команды или URL, но без какого-либо легко различимого общего шаблона. Характерным признаком является то, что интерактивные сеансы SSH работают хорошо, но передача файлов почти всегда заканчивается неудачей. Кроме того, pppoe является источником проблем MTU для домашних пользователей. Поэтому я прописываю проверку MTU.
Что это? М aximum т ransmission у нита максимального размера пакета по каналу сети. MTU варьируется от транспортной среды к транспортной среде, например, проводной Ethernet и Wi-Fi (802.11) имеют разные MTU, а каналы ATM (которые составляют большую часть инфраструктуры дальней связи) имеют свои собственные MTU.
PPPOE - это инкапсулированный протокол, который означает, что каждый пакет состоит из нескольких байтов заголовка, за которым следует базовый пакет, поэтому он уменьшает максимальный размер пакета на размер заголовка.
IP позволяет маршрутизаторам фрагментировать пакеты, если они обнаруживают, что они слишком велики для следующего перехода, но это не всегда работает. В теории должен быть обнаружен надлежащий MTUавтоматически , но это тоже не всегда работает. В частности, поиск в Google предполагает, что Network Manager не всегда должным образом действует на информацию MTU, полученную из обнаружения MTU, но я не знаю, какие версии подвержены уязвимости или каковы проблемные варианты использования.
Как измерить это.
Если у вас есть tracepath
из Linux iputils , запустите, tracepath 8.8.8.8
чтобы увидеть MTU по пути к DNS-серверу Google. Если ваша версия traceroute
имеет --mtu
опцию, запустите traceroute -n --mtu 8.8.8.8
. Посмотрите Обнаружение MTU между мной и целевым IP для большего количества вариантов.
Не имея автоматизированных инструментов, вы можете измерить вручную. Попробуйте отправить ping-пакеты заданного размера внешним хостам, которые на них отвечают, например ping -c 1 -s 42 8.8.8.8
(в Linux; в других системах посмотрите документацию вашей ping
команды). Ваши пакеты должны пройти для достаточно малых значений 42 (если 42 не работает, что-то блокирует пинг.). Для больших значений пакет не пройдет. 1464 - типичное максимальное значение, если ограничивающим элементом инфраструктуры является ваша локальная сеть Ethernet. Если вам повезет, когда вы отправите слишком большой пакет, вы увидите сообщение вроде Frag needed and DF set (mtu = 1492)
. Если вам не повезло, продолжайте экспериментировать со значением, пока не найдете максимальное значение, а затем добавьте 28 ( -s
указывает размер полезной нагрузки, и помимо этого есть 28 байтов заголовков). Смотрите такжеКак оптимизировать подключение к Интернету, используя MTU и RWIN на форумах Ubuntu.
Как его установить (замените 1454 на MTU, которое вы определили, и eth0
на имя вашего сетевого интерфейса)
- Как раз (Linux): запустить
ifconfig eth0 mtu 1454
- Постоянно (Debian и его производные, такие как Ubuntu, если не используется Network Manager): Изменить
/etc/network/interfaces
. Сразу после ввода для вашего сетевого интерфейса (после iface eth0 …
директивы) добавьте строку с pre-up ifconfig $IFACE mtu 1454
. Кроме того, если ваш IP-адрес является статическим, вы можете добавить mtu 1454
параметр в iface eth0 inet static
директиву.
Постоянно (Debian и его производные, такие как Ubuntu, с или без Network Manager): создайте скрипт, вызываемый /etc/network/if-pre-up.d/mtu
со следующим содержимым, и сделайте его исполняемым во всем мире ( chmod a+rx
):
#!/bin/sh
ifconfig $IFACE mtu 1454
Другие ресурсы