Назад | Перейти на главную страницу

В чем именно заключается проблема MTU / MRU, чем она вызвана и как ее исправить?

В случаях зависания, зависания, медленного, не отвечающего интернет-соединения причина обычно необоснованно определяется как «проблема MTU / MRU» с несколькими поспешно предложенными «волшебными лекарствами» (обычно недействительными или неприменимыми для данной ситуации), такими как команды, включающие iptables или ifconfig, и другие заклинания "закрепить MTU на TSS".

Я хочу знать, в чем именно заключается проблема MTU / MRU, почему она влияет на скорость и задержку соединения и как ее лечить (известные и современные методы), поскольку я хотел бы со знанием дела подойти к решению проблемы, не волшебным образом.

Это немного сложный вопрос, поэтому я начну с основ. Простите, если вы все это уже знаете.

MTU - это максимальная единица передачи, самый большой пакет данных, который отправляет компьютерный интерфейс. Для Ethernet значение по умолчанию - 1500 байт. Кадры Ethernet обычно могут иметь размер до 1522-1542 (зависит от того, что вы считаете), а дополнительное пространство «зарезервировано» для информации заголовка.

Различные соединения могут иметь разные возможности. Довольно часто встречается ссылка в Интернете, у которой MTU немного меньше 1500. Обычно это происходит из-за того, что ссылка использует дополнительную информацию заголовка или использует среду, отличную от «стандартного» Ethernet (большая часть Интернета фактически работает на Соединения ATM / SoNet). Обычно трафик, который встречает такую ​​ссылку, просто разбивается на несколько частей и отправляется.

Поскольку это распространено и было во время изобретения IP, частью ответственности протокола ICMP было сообщение о любых проблемах с MTU. Если пакет по какой-либо причине не может быть нарушен и переадресован, используется ICMP, чтобы сообщить о проблеме компьютеру-отправителю. Отправляющий компьютер предпринимает соответствующие действия, разбивая информацию на более мелкие части, и все довольны. Весь этот процесс происходит за кулисами. В правильно функционирующая сеть никогда не надо гадить с настройками MTU.

Квалификатор в последнем предложении - кикер. Есть три распространенных причины, по которым автоматизированный процесс выходит из строя:

  1. Сломанная реализация - программное обеспечение в какой-то момент просто не работает, как должно. Нет никаких законов, говорящих, что люди должны соблюдать соответствующие стандарты Интернета, и есть компании, которые нарушают стандарты, обычно чтобы быть дешевыми.
  2. Внедрение с отключенной административной функцией - бывает, что люди с добрыми намерениями ломают программное обеспечение, потому что на самом деле не знают, что делают. Я лично видел, как люди блокируют ICMP, потому что думают, что он используется только для пакетов ICMP.0.0 (эхо, большинство людей знают это по ping утилита).
  3. Другие причины полностью выходят за рамки этого «нормального» процесса. Чаще всего это означает, что соединение с такими потерями, что только более короткие пакеты надежно проходят через соединение (или без большого количества повторных попыток). Некоторые ранние модели DSL и CableModems имели подобные проблемы. А до этого при коммутируемом доступе обычно возникали подобные проблемы при использовании телефонных линий очень низкого качества и агрессивного кодирования линий.

Итак, почему это распространено: ленивые техники / компании. Почти всегда «проще» помешать соединению с помощью крошечного MTU, чем исправить одну из проблем, описанных выше. Как указано выше, в наши дни никто не должен возиться с MTU (единственное исключение, которое я могу придумать, это включение Jumbo-кадров, но на самом деле это не то, что мы здесь обсуждаем). Правильное лекарство в любом случае - выяснить причину проблемы и исправить ее; классический случай лечения болезни, а не симптома.

Как MTU влияет на соединение? Разделение данных на крошечные части означает, что у каждой части будет больше шансов добраться до пункта назначения, особенно при очень ненадежных соединениях. Однако, будучи меньшими частями, на передаваемые данные приходится больше накладных расходов. Это означает, что эффективная скорость соединения снижается; существенно, если MTU действительно маленький. Это может повлиять на задержку, хотя я ожидал, что она будет незначительной, из-за дополнительной обработки и накладных расходов на заголовок и процесс фрагментации / повторной сборки.

Обновить: - Что касается --clamp-mss-to-pmtu
Лично я никогда не возился с MTU; Признаюсь, я немного перфекционист, и когда мне предлагают такие уродливые хаки, я всегда нахожу корень проблемы и могу ее исправить. С этой целью iptables вариант --clamp-mss-to-pmtu мне незнаком. По-видимому, использование этого хака является чрезвычайно распространенным и, вероятно, в большинстве ситуаций совершенно необоснованным. Это все еще хитрость, призванная компенсировать одну из вышеперечисленных проблем. Я цитирую справочную страницу Linux для iptables (8):

Эта цель используется для борьбы с преступно бездумными интернет-провайдерами или серверами, которые блокируют пакеты ICMP Fragmentation Needed или ICMPv6 Packet Too Big.

Относительно суровый язык справочной страницы должен указывать на то, насколько презирают интернет-провайдеры и сети, которые не следуют RFC (и не прилагают никаких усилий, чтобы попытаться или компенсировать это).

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

Многие современные протоколы туннелирования VPN построены либо на более низких уровнях (с еще меньшими накладными расходами), например, GRE и L2TP; или туннелируются на более высоких уровнях (обычно для совместимости с ограничивающими межсетевыми экранами или по другим причинам), например SSTP или SSH. Они постепенно заменят UDP в качестве транспортного механизма.

Обновление 2: - Диагностика проблем MTU / ICMP
Итак, вы думаете, что у вас проблема с MTU / ICMP, и хотите быть уверенным. Этот процесс состоит из двух основных этапов. Указания относятся к системе Linux или BSD, но могут быть адаптированы практически к любой ОС.

  1. Выберите цель ICMP Ping (например, Google.com, Yahoo.com, Facebook.com и т. Д.). Попробуйте пропинговать их с помощью следующей команды: ping -c 2 -s 1472 -D google.com.
    • это должен добиться успеха. Если это не удается, он должен вернуть «пакет должен быть фрагментирован». Если одно из этих утверждений верно, остановитесь, ваше соединение работает нормально.
    • Если это ничего не возвращает или выдает сообщение «тайм-аут», значит, у вас проблема.
  2. Только для разорванных соединений: запустить traceroute -F google.com 1472. Это скажет вам, какой переход сломан. Примечание: CPE довольно часто не отвечает на запросы traceroute, поэтому не беспокойтесь, если первый переход не отвечает.
    • Какой из переходов будет последним, будет последним, который правильно работает для вас.
    • Если ни один из них не отвечает, это ваша линия CPE или DSL (выяснить, что может быть немного сложно, но это почти никогда не CPE, если он современный). Примечание. Если ваше соединение работает нормально, трассировка завершится успешно.

На заметку: какой интернет-провайдер использует PPTP в наши дни ?! Это взрыв из устаревшего и бесполезного прошлого. По крайней мере, они должны использовать PPPoE; но простая авторизация модема по MAC и сегменту была бы намного проще (проще как для интернет-провайдера, так и для клиента).