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

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

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

Метод 1: Изучение вывода ping для фрагментации пакетов

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

Чтобы найти наиболее оптимизированный MTU для вашей системы, вы должны выполнить эту команду ping с небольшим размером пакета, а затем со временем увеличивать ее до тех пор, пока она не начнет фрагментироваться, после чего вы считаете это своей точкой отсечения. Имейте в виду, что MTU = полезная нагрузка + 28, так как должно быть некоторое пространство для данных заголовка. Теперь, если вы можете увеличить размер до чего-то очень большого без каких-либо фрагментов, тогда ваш сетевой интерфейс сможет обрабатывать массивные пакеты без необходимости генерации фрагментов. Когда вы, наконец, увидите предупреждение о необходимости Frag, это означает, что любой пакет, отправленный с полезной нагрузкой того размера, который вы запустили или выше, будет отправлен как несколько пакетов. Предположим, что если вы попробуете 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 имя_интерфейса mtu ####

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

Метод 2: Создание оптимизации MTU Stick

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

Независимо от того, какой метод вы использовали для его редактирования, найдите имя интерфейса, который выкладывал ifconfig ранее. Предположим, вы просматривали первый разъем Wifi на вашем компьютере, который, вероятно, будет называться 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 / .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 Мбит / с. БДП будет:

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

Это означает, что значение net.ipv4.tcp_rmem по умолчанию должно быть где-то около 100 000. Вы можете установить его еще выше, если боитесь, что получите 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

Повторно протестируйте ваше соединение, чтобы увидеть, улучшилась ли скорость, а если нет, снова настройте вашу команду и повторите ее. Помните, что вы можете нажать кнопку «вверх» в вашем терминале, чтобы повторить последнюю использованную команду. Найдя подходящие значения, откройте  с gksu или же Судо введите текстовый редактор из метода 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 перезагрузить настройки в , и если все прошло хорошо, то это должно дать вам как минимум несколько более быстрое сетевое соединение. В зависимости от ваших исходных значений по умолчанию, разница может быть существенной или потенциально не заметной.

Ссылка на основную публикацию
Adblock
detector