Как оптимизировать скорость интернета в Ubuntu с помощью настроек MTU



Попробуйте наш инструмент устранения неполадок

Хотя компьютерные тексты различаются по своему применению термина, Ubuntu использует TCP Maximum Transmission Unit (MTU) для обозначения самого большого размера TCP-пакета, который машина может передать через сетевое соединение TCP / IP. Хотя вычислить это значение относительно просто, и значения по умолчанию работают на большинстве машин, можно было бы дополнительно оптимизировать вашу систему, если пакеты фрагментируются из-за необычных настроек. Отправка одиночных больших исходящих пакетов более эффективна, чем отправка нескольких исходящих меньших пакетов.



Самый простой способ узнать правильное значение MTU для вашей машины - открыть окно терминала. Удерживайте CTRL, ATL и T или, возможно, запустите его с тире Unity. Если вы работаете с Ubuntu Server, то по умолчанию вы будете использовать интерфейс командной строки без графической среды. Когда вы окажетесь у терминала, введите ping -s 1464 -c1 distrowatch.com и дождитесь вывода. Если вы ничего не получаете, значит, ваше сетевое соединение настроено неправильно. Предполагая, что вы получили правильный вывод, найдите раздел, который читает 1464 (1492) байта данных, что означает, что вы отправляете пакет с 28 байтами информации заголовка.



Метод 1: проверка вывода ping на фрагментацию пакета

Команда ping сообщит вам, был ли пакет отправлен в виде нескольких фрагментов с несколькими прикрепленными данными заголовка. Проверьте вывод, нет ли в нем строк, предупреждающих о чем-то, касающемся «Frag required and DF set (mtu = 1492)» или любого подобного текста. В зависимости от того, какая версия ping была включена в вашу версию Ubuntu, предупреждение может быть сформулировано по-разному. Если этого текста нет, то, скорее всего, вы уже работаете с некоторым измерением MTU, которое в настоящее время не отправляет фрагментированные пакеты.



Чтобы найти наиболее оптимизированный MTU для вашей системы, вам нужно запустить эту команду ping с небольшим размером пакета, а затем со временем увеличивать его, пока не начнется фрагментация, после чего вы считаете это своей точкой отсечения. Имейте в виду, что MTU = payload + 28, поскольку должно быть место для данных заголовка. Теперь, если вы можете увеличить размер до чего-то очень большого без каких-либо фрагментов, тогда ваш сетевой интерфейс сможет обрабатывать массивные пакеты без необходимости генерировать фрагменты. Когда вы наконец видите предупреждение о необходимости фрагментации, это означает, что любой пакет, отправленный с полезной нагрузкой того размера, который вы запустили или выше, будет отправлен в виде нескольких пакетов. Предположим, что если вы попробуете ping -s 2464 -c1 distrowatch.com без какого-либо предупреждения, но ping -s 2465 -c1 distrowatch.com отправит предупреждение, это означает, что 2,464 + 28 - это самый большой параметр MTU, который может обрабатывать ваша конфигурация TCP / IP. перед отправкой нескольких фрагментированных пакетов. Определение точного значения может занять некоторое время.



Если у вас есть смысл запускать команду ping несколько раз, вам нужно будет запустить sudo ifconfig чтобы найти список известных сетевых интерфейсов. Ubuntu и его производные хэшируют учетную запись root, но мы работали из оболочки, созданной sudo bash для наших примеров. Рекомендуется просто начинать каждую команду с помощью sudo индивидуально.

Как только вы узнаете правильное устройство, попробуйте:

sudo ifconfig interfaceName man ####

Замените interfaceName на имя сетевого адаптера, с которым вы работаете, а затем замените #### на найденный размер плюс 28 для информации заголовка. Вы можете запустить ifconfig, чтобы узнать значение MTU по умолчанию для вашей сетевой карты, и запустить его еще раз несколько раз, чтобы увидеть, изменила ли его предыдущая команда. Некоторые адаптеры сетевого интерфейса просто не позволяют вам это изменить. Если это так, то дальнейшая оптимизация, к сожалению, не принесет результатов. Если, однако, это сработало, вы действительно можете сделать это постоянным. Попробуйте бежать ifconfig | grep MTU чтобы найти все значения, если у вас несколько коннекторов, а затем вы можете сопоставить значения с коннекторами, с которыми вы работаете.

Метод 2: как сделать оптимизацию MTU

Пока что вы не внесли никаких постоянных изменений в свою систему. Если вы перезагрузитесь, то сотрете все изменения, что хорошо, если вы совершили какую-то ошибку и обнаружите, что больше не можете подключиться к Интернету. С другой стороны, если вы нашли точное значение MTU, вам нужно будет отредактировать документ. Вероятно, сейчас самое время сделать копию, если что-то случится. Пытаться или что-то подобное, чтобы у вас была копия на всякий случай. Если вы хотите отредактировать его графически, введите и введите свой пароль. Если вы используете Kubuntu, Xubuntu или Lubuntu, вам нужно будет заменить gedit графическим текстовым редактором, который использует ваш респин Ubuntu. Xubuntu, например, использует коврик для мыши вместо gedit. Если вы используете Ubuntu Server или просто предпочитаете работать с командной строкой, вместо этого введите , если вы не используете корневую оболочку.

Независимо от того, каким методом вы его редактировали, найдите имя интерфейса, которое ifconfig выплюнул раньше. Предположим, вы видели первый разъем Wi-Fi на своем компьютере, который, вероятно, будет называться wlan0 или что-то подобное. В этом случае найдите фрагмент кода, который начинается с iface wlan0 inet static или чего-то подобного. Ваш пробег может отличаться, но в следующей строке будет читаться адрес, за которым следует IP-адрес в формате ###. ###. #. ##. Он может быть отформатирован по-другому, если вы используете собственное соединение IPv6. У вас будет строка маски сети и шлюза, за которой следует что-то, в котором указано имя хоста или что-то подобное. Внизу у вас будет еще одна строка с mtu и числом. Замените это число на оптимизированное значение MTU, сохраните документ и выйдите из текстового редактора. Вам нужно перезагрузить систему, чтобы убедиться, что она работает.

Если после нескольких перезагрузок все будет в порядке, удалите файл interfaces.bak в каталоге ~ / Documents. Вместо этого вы можете использовать sudo mv а потом

если что-то пошло не так в процессе.

Метод 3: изменение настроек окна приема TCP (RWIN)

Ubuntu относится к наибольшему объему данных, который принимает хост до того, как он признает отправителя как значение RWIN. Если вы загружаете файл размером 30 МБ, то удаленный сервер не сразу отправляет вам блок данных размером 30 МБ. Ваш хост Ubuntu отправляет определенный номер RWIN при запросе файла, а затем сервер начинает потоковую передачу данных до тех пор, пока не будет достигнуто количество байтов, прежде чем он ожидает подтверждения того, что ваша система получила данные. Как только сервер получает это, он начинает отправлять дополнительные блоки, прежде чем ждать следующего подтверждения.

Задержка - это время, необходимое для передачи и приема пакетов с удаленного сервера. Скорость подключения влияет на это значение, но также влияет и множество других задержек. Команда ping объяснит задержку с точки зрения чисел времени приема-передачи (RTT). Посмотрите на результат нашего предыдущего пинга DistroWatch. Вы найдете строку, в которой указано время = 134 мс, т.е. сколько времени потребовалось пакетам, чтобы пройти туда и обратно с нашей машины Ubuntu на distrowatch.com и обратно. Мы отправляли пакет размером 1492 байта, поэтому за 134 мс мы могли вычислить формулу для определения общей скорости передачи:

1492 / 0,134 секунды = 11 134,328 байта в секунду, что составляет примерно 10,88 двоичных килобайт в секунду. В целом это довольно медленно, поэтому существует RWIN, чтобы вам не приходилось подтверждать каждый пакет, отправленный отдельно.

Настройки RWIN в Ubuntu отделены от настроек MTU. Рассчитайте произведение задержки полосы пропускания (BDP) для вашего интернет-соединения по следующей формуле:

(Общая максимальная пропускная способность вашего интернет-соединения в байтах в секунду) (RTT в секундах) = BDP

Размер пакета TCP не влияет на RWIN, но на размер самого пакета влияет значение, выбранное в методе 1. Используйте эту команду, чтобы найти переменные ядра, связанные с RWIN:

Имейте в виду, что после _mem есть пробел, но больше нигде в цитируемом тексте. Вы получите обратно несколько значений. Нужны net.ipv4.tcp_rmem, net.ipv4.tcp_wmem и net.ipv4.tcp_mem . Цифры после этих значений представляют собой минимальное, значение по умолчанию и максимальное значение для каждого. Они представляют вектор памяти окна приема, вектор отправки и вектор стека TCP. Если вы используете Ubuntu Kylin, у вас может быть длинный список дополнительных. Вы можете спокойно игнорировать любое из этих дополнительных значений. Некоторые пользователи Kylin могут также видеть некоторые значения, обозначенные в других скриптах, но еще раз просто поищите эти строки.

В Ubuntu нет переменной RWIN, но net.ipv4.tcp_rmem близок к этому. Эти переменные контролируют использование памяти, а не только размер TCP. Они включают память, поглощенную структурами сокетов данных, и короткие пакеты в больших буферах. Если вы хотите оптимизировать эти значения, отправьте пакеты максимального размера, которые вы установили в методе 1, на другой удаленный сервер. Давайте снова воспользуемся 1492-байтовым значением по умолчанию, вычтя 28 байтов для информации заголовка, но помните, что у вас может быть другое значение. Используйте команду ping -s 1464 -c5 distrowatch.com, чтобы получить дополнительные данные RTT.

Вы захотите провести этот тест несколько раз в разное время дня и ночи. Попробуйте проверить связь с некоторыми другими удаленными серверами, чтобы узнать, насколько меняется RTT. Поскольку каждый раз, когда мы пробовали его, среднее значение составляло чуть более 130 мс, поэтому мы можем использовать формулу для определения BDP. Предположим, вы используете обычное соединение со скоростью 6 Мбит / с. BDP будет:

(6 000 000 бит / сек) (. 133 сек) * (1 байт / 8 бит) = 99 750 байт

Это означает, что значение net.ipv4.tcp_rmem по умолчанию должно быть где-то около 100000. Вы можете установить его еще выше, если боитесь, что получите RTT всего за полсекунды. Все значения, найденные в net.ipv4.tcp_rmem и net.ipv4.tcp_wmem, должны быть установлены одинаково, поскольку передача и прием пакетов происходят через одно и то же Интернет-соединение. Обычно вам нужно установить net.ipv4.tcp_mem равным тому же значению, что и net.ipv4.tcp_wmem и net.ipv4.tcp_rmem, поскольку эта первая переменная является самым большим размером буферной памяти, установленным для транзакций TCP.

Выполните команду и посмотрите, установлены ли обе эти настройки на 0 или 1, что указывает на состояние выключено или включено.

Установка net.ipv4.tcp_no_metrics_save в 1 заставит ядро ​​Linux динамически оптимизировать окно приема между значениями net.ipv4.tcp_rmem и net.ipv4.tcp_wmem. Когда net.ipv4.tcp_moderate_rcvbuf включен, он предотвращает влияние перегрузки на последующее подключение. Прежде чем вносить какие-либо постоянные изменения, проведите проверку скорости через http://www.speedtest.net или http://www.bing.com/search?q=speed+test, чтобы убедиться, что вы справляетесь со своими измерениями.

Временно замените переменные вашими расчетными значениями. Обязательно замените # рассчитанными суммами.

sudo sysctl -w net.ipv4.tcp_rmem = ”#### ##### ######” net.ipv4.tcp_wmem = ”#### ##### ######» net.ipv4.tcp_mem = ”#### ##### ######” net.ipv4.tcp_no_metrics_save = 1 net.ipv4.tcp_moderate_rcvbuf = 1

Повторно протестируйте свое соединение, чтобы увидеть, улучшилась ли скорость, и, если нет, снова настройте свою команду и запустите ее повторно. Помните, что вы можете нажать кнопку «вверх» в своем терминале, чтобы повторить последнюю использованную команду. Как только вы найдете подходящие значения, откройте с гксу или же судо текстового редактора из метода 1 и отредактируйте строки, чтобы они читались следующим образом, еще раз заменив # на ваши вычисленные значения. Вы, конечно, также захотите сделать резервную копию файл так же, как и в первой части, на всякий случай. Если вы его сделали, вы также можете восстановить таким же образом.

net.ipv4.tcp_rmem = #### ##### ######

net.ipv4.tcp_wmem = #### ##### ######

net.ipv4.tcp_mem = #### ##### ######

net.ipv4.tcp_no_metrics_save = 1

net.ipv4.tcp_moderate_rcvbuf = 1

Сохраните его, когда убедитесь, что все в порядке. Выполните следующую команду:

sudo sysctl -p

Это заставит ядро ​​Linux перезагрузить настройки в , и если все пойдет хорошо, это должно дать вам хотя бы несколько более быстрое сетевое соединение. В зависимости от ваших исходных настроек по умолчанию разница может быть существенной или вообще не заметной.

8 минут на чтение