Jak zoptymalizować prędkość Internetu Ubuntu za pomocą ustawień MTU



Wypróbuj Nasz Instrument Do Eliminowania Problemów

Podczas gdy teksty komputerów różnią się pod względem zastosowania tego terminu, Ubuntu używa maksymalnej jednostki transmisji TCP (MTU) w celu określenia największego rozmiaru pakietu TCP, jaki maszyna może przekazać przez połączenie sieciowe TCP / IP. Obliczanie tej wartości jest stosunkowo proste, a wartości domyślne działają na większości komputerów, ale może być możliwa dalsza optymalizacja systemu, jeśli pakiety są fragmentaryczne z powodu nietypowych ustawień. Wysyłanie dużych pojedynczych pakietów wychodzących jest bardziej wydajne niż wysyłanie wielu mniejszych pakietów wychodzących.



Najłatwiejszym sposobem znalezienia prawidłowej wartości MTU dla twojego komputera jest otwarcie okna terminala. Przytrzymaj CTRL, ATL i T lub być może uruchom go od myślnika Unity. Jeśli pracujesz z Ubuntu Server, domyślnie użyjesz interfejsu CLI bez żadnego środowiska graficznego. Gdy znajdziesz się w terminalu, wpisz ping -s 1464 -c1 distrowatch.com i poczekaj na wynik. Jeśli nic nie otrzymujesz, oznacza to, że połączenie sieciowe nie zostało poprawnie skonfigurowane. Zakładając, że otrzymałeś właściwe dane wyjściowe, poszukaj sekcji, która odczytuje 1464 (1492) bajtów danych, co oznacza, że ​​wysyłasz pakiet z 28 bajtami informacji nagłówka.



Metoda 1: Badanie danych wyjściowych polecenia ping pod kątem fragmentacji pakietów

Polecenie ping poinformuje Cię, czy pakiet został wysłany jako więcej niż jeden fragment z dołączonymi wieloma danymi nagłówkowymi. Sprawdź, czy na wyjściu znajduje się dowolny wiersz, który ostrzega o czymś dotyczącym „Potrzebny fragment i zestaw DF (mtu = 1492)” lub innym podobnym tekście. W zależności od wersji ping dołączonej do twojej wersji Ubuntu, ostrzeżenie może mieć inne brzmienie. Jeśli nie ma tego tekstu, najprawdopodobniej już pracujesz z jakimś pomiarem MTU, który obecnie nie wysyła pofragmentowanych pakietów.



Aby znaleźć najbardziej zoptymalizowane MTU dla twojego systemu, powinieneś uruchomić to polecenie ping z małym rozmiarem pakietu, a następnie z czasem zwiększać go, aż zacznie się fragmentować, po czym uznasz to za punkt odcięcia. Należy pamiętać, że MTU = payload + 28, ponieważ musi być trochę miejsca na dane nagłówka. Teraz, jeśli możesz zwiększyć rozmiar do czegoś bardzo dużego bez żadnych fragmentów, wtedy twój interfejs sieciowy może być w stanie obsłużyć ogromne pakiety bez potrzeby generowania fragmentów. Kiedy w końcu zobaczysz ostrzeżenie Frag potrzebował, oznacza to, że każdy pakiet wysłany z ładunkiem o rozmiarze, który uruchomiłeś lub wyższym, zostanie wysłany jako wiele pakietów. Załóżmy, że jeśli spróbujesz ping -s 2464 -c1 distrowatch.com bez żadnego ostrzeżenia, ale ping -s 2465 -c1 distrowatch.com wysyła ostrzeżenie, oznacza to, że 2,464 + 28 to największe ustawienie MTU, które może obsłużyć twoja konfiguracja TCP / IP przed wysłaniem wielu pofragmentowanych pakietów. Określenie dokładnej wartości może zająć kilka chwil.



Gdy masz już na myśli wartość wynikającą z wielokrotnego uruchamiania polecenia ping, musisz uruchomić sudo ifconfig aby znaleźć listę znanych interfejsów sieciowych. Ubuntu i jego pochodne wykasowały konto roota, ale działaliśmy z powłoki utworzonej przez sudo bash dla naszych przykładów. Zaleca się, aby przed każdym poleceniem osobno poprzedzać polecenie sudo.

Gdy tylko znajdziesz właściwe urządzenie, spróbuj:

sudo ifconfig interfaceName man ####

Zastąp interfaceName nazwą karty sieciowej, z którą pracujesz, a następnie zastąp #### znalezionym rozmiarem plus 28 dla informacji z nagłówka. Możesz uruchomić ifconfig, aby zobaczyć, jaka była domyślna wartość MTU dla karty sieciowej i uruchomić ją ponownie wiele razy, aby sprawdzić, czy poprzednie polecenie ją zmieniło. Niektóre karty sieciowe po prostu nie pozwalają na zmianę. W takim przypadku dalsza optymalizacja będzie niestety bezowocna. Jeśli jednak to zadziałało, możesz to zrobić na stałe. Spróbuj biegać ifconfig | grep MTU aby znaleźć wszystkie wartości, jeśli masz wiele łączników, a następnie możesz dopasować wartości do łączników, z którymi pracujesz.

Metoda 2: Dokonywanie optymalizacji MTU

Jak dotąd nie dokonałeś żadnych trwałych zmian w swoim systemie. Jeśli zrestartujesz komputer, usuniesz wszystkie zmiany, co jest dobre, jeśli popełnisz jakiś błąd i stwierdzisz, że nie możesz już połączyć się z Internetem. Z drugiej strony, jeśli znalazłeś dokładną wartość swojego MTU, musisz edytować plik dokument. To prawdopodobnie dobry moment na zrobienie kopii tego na wypadek, gdyby coś się stało. Próbować lub coś podobnego, więc masz kopię na wszelki wypadek. Jeśli chcesz edytować go graficznie, wpisz i wprowadź swoje hasło. Jeśli używasz Kubuntu, Xubuntu lub Lubuntu, musisz zastąpić gedit graficznym edytorem tekstu, którego używa Twój system Ubuntu. Na przykład Xubuntu używa podkładki pod mysz zamiast gedit. Jeśli używasz Ubuntu Server lub po prostu wolisz pracować z wierszem poleceń, zamiast tego wpisz , zakładając, że nie używasz powłoki roota.

Niezależnie od tego, której metody użyłeś do edycji, znajdź nazwę interfejsu, który wypluł wcześniej ifconfig. Załóżmy, że patrzysz na pierwsze złącze Wi-Fi na swoim komputerze, które prawdopodobnie miałoby nazwę wlan0 lub podobnie. W takim przypadku znajdź fragment kodu, który zaczyna się od iface wlan0 inet static lub podobnego. Twój przebieg może się różnić, ale w następnym wierszu zostanie wyświetlony adres, a po nim adres IP w formacie ###. ###. #. ##. Może mieć inny format, jeśli korzystasz z natywnego połączenia IPv6. Będziesz mieć maskę sieci i linię bramy, a następnie coś, co zawiera nazwę hosta lub coś podobnego. U dołu pojawi się kolejna linia, w której jest napisane mtu i liczba. Zastąp tę liczbę wartością optymalizacji MTU, zapisz dokument, a następnie zamknij edytor tekstu. Będziesz chciał ponownie uruchomić system, aby upewnić się, że działa.

Jeśli po kilku ponownych uruchomieniach wszystko będzie dobrze, usuń plik interfaces.bak z katalogu ~ / Documents. Zamiast tego możesz użyć sudo mv i wtedy

jeśli coś poszło nie tak.

Metoda 3: Edycja ustawień okna odbierania TCP (RWIN)

Ubuntu odnosi się do największej ilości danych, które host akceptuje, zanim potwierdzi nadawcę jako wartość RWIN. Jeśli pobierzesz plik o rozmiarze 30 MB, serwer zdalny nie prześle od razu bloku danych o wielkości 30 MB. Twój host Ubuntu wysyła określony numer RWIN, gdy żąda pliku, a następnie serwer rozpoczyna przesyłanie strumieniowe danych, aż osiągnie liczbę bajtów, zanim zaczeka na potwierdzenie, że Twój system otrzymał dane. Gdy serwer to otrzyma, zaczyna wysyłać dodatkowe bloki przed czekaniem na kolejne potwierdzenie.

Opóźnienie to czas potrzebny na przesłanie i odebranie pakietów ze zdalnego serwera. Opłaty za połączenia mają wpływ na tę wartość, ale także wiele innych opóźnień. Polecenie ping wyjaśni opóźnienie w postaci liczb w obie strony (RTT). Spójrz na wynik naszego poprzedniego polecenia ping z DistroWatch. Znajdziesz wiersz, który odczytuje czas = 134 ms, czyli ile czasu zajęło pakietom podróż w obie strony z naszego komputera Ubuntu do distrowatch.com iz powrotem. Wysyłaliśmy pakiet o rozmiarze 1492 bajtów, więc przy 134 ms mogliśmy obliczyć wzór na całkowitą prędkość transferu:

1492 / 0,134 sekundy = 11 134,328 bajtów / sekundę, co daje około 10,88 binarnych kilobajtów na sekundę. Jest to ogólnie dość powolne, dlatego RWIN jest na miejscu, aby uniknąć konieczności potwierdzania każdego wysłanego pakietu indywidualnie.

Ustawienia RWIN w Ubuntu są niezależne od ustawień MTU. Oblicz produkt opóźnienia przepustowości (BDP) dla swojego połączenia internetowego za pomocą następującego wzoru:

(Całkowita maksymalna przepustowość, którą Twoje połączenie internetowe powinno zapewniać w bajtach na sekundę) (RTT w sekundach) = BDP

Rozmiar pakietu TCP nie ma wpływu na RWIN, ale na sam rozmiar pakietu ma wpływ wartość wybrana w metodzie 1. Użyj tego polecenia, aby znaleźć zmienne jądra związane z RWIN:

Pamiętaj, że po _mem jest spacja, ale nigdzie indziej w cytowanym tekście. Otrzymasz z powrotem kilka wartości. Potrzebne są net.ipv4.tcp_rmem, net.ipv4.tcp_wmem i net.ipv4.tcp_mem . Liczby po tych wartościach przedstawiają wartości minimalne, domyślne i maksymalne dla każdej z nich. Reprezentują wektor pamięci okna odbioru, wektor wysyłania i wektor stosu TCP. Jeśli używasz Ubuntu Kylin, możesz mieć długą listę dodatkowych. Możesz bezpiecznie zignorować każdą z tych dodatkowych wartości. Niektórzy użytkownicy Kylin mogą również zobaczyć niektóre wartości nakreślone w innych skryptach, ale raz jeszcze po prostu szukają tych wierszy.

Ubuntu nie ma zmiennej RWIN, ale net.ipv4.tcp_rmem jest blisko. Te zmienne kontrolują użycie pamięci, a nie tylko rozmiar TCP. Obejmują one pamięć zajętą ​​przez struktury gniazd danych i krótkie pakiety w ogromnych buforach. Jeśli chcesz zoptymalizować te wartości, wyślij pakiety o maksymalnym rozmiarze ustawionym w metodzie 1 do innego zdalnego serwera. Użyjmy ponownie domyślnej wartości 1492 bajtów, odejmując 28 bajtów na informacje z nagłówka, ale pamiętaj, że możesz mieć inną wartość. Użyj polecenia ping -s 1464 -c5 distrowatch.com, aby uzyskać dodatkowe dane RTT.

Będziesz chciał przeprowadzać ten test więcej niż raz o różnych porach dnia i nocy. Spróbuj pingować również inne zdalne serwery, aby zobaczyć, jak bardzo różni się RTT. Ponieważ za każdym razem mieliśmy średnio nieco ponad 130 ms, możemy użyć wzoru, aby obliczyć nasze BDP. Załóżmy, że korzystasz z bardzo ogólnego połączenia o przepustowości 6 Mb / s. BDP byłoby:

(6 000 000 bitów / s) (. 133 s) * (1 bajt / 8 bitów) = 99,750 bajtów

Oznacza to, że domyślna wartość net.ipv4.tcp_rmem powinna wynosić około 100 000. Możesz ustawić go jeszcze wyżej, jeśli obawiasz się, że RTT wystąpi nawet przez pół sekundy. Wszystkie wartości znalezione w net.ipv4.tcp_rmem i net.ipv4.tcp_wmem muszą być ustawione identycznie, ponieważ transmisja i odbiór pakietów odbywa się przez to samo połączenie internetowe. Generalnie będziesz chciał ustawić wartość net.ipv4.tcp_mem na taką samą wartość, jaka jest używana przez net.ipv4.tcp_wmem i net.ipv4.tcp_rmem, ponieważ ta pierwsza zmienna to łączny największy rozmiar pamięci bufora ustawiony dla transakcji TCP.

Wydaj polecenie i sprawdź, czy oba te ustawienia są ustawione na 0 lub 1, co wskazuje na stan wyłączenia lub włączenia.

Ustawienie wartości net.ipv4.tcp_no_metrics_save na 1 zmusi jądro Linuksa do optymalizacji okna odbioru między wartościami net.ipv4.tcp_rmem i net.ipv4.tcp_wmem w sposób dynamiczny. Włączenie net.ipv4.tcp_moderate_rcvbuf zapobiega wpływowi przeciążenia na kolejną łączność. Przed wprowadzeniem jakichkolwiek trwałych zmian przeprowadź kontrolę szybkości przez http://www.speedtest.net lub http://www.bing.com/search?q=speed+test, aby upewnić się, że masz kontrolę nad swoimi pomiarami.

Tymczasowo zmień zmienne za pomocą obliczonych wartości. Pamiętaj, aby zastąpić # z obliczonymi sumami.

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

Ponownie przetestuj połączenie, aby sprawdzić, czy poprawiła się prędkość, a jeśli nie, zmień ponownie polecenie i uruchom je ponownie. Pamiętaj, że możesz nacisnąć klawisz w górę w terminalu, aby powtórzyć ostatnio używane polecenie. Po znalezieniu odpowiednich wartości otwórz z gksu lub sudo polecenia edytora tekstu z metody 1 i edytuj wiersze, aby odczytać je w następujący sposób, ponownie zastępując # z obliczonymi wartościami. Oczywiście będziesz chciał również wykonać kopię zapasową złożyć w taki sam sposób, jak w części pierwszej, na wypadek, gdybyś się pomylił. Jeśli już utworzyłeś, możesz również przywrócić w ten sam sposób.

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

Zapisz go, gdy będziesz mieć pewność, że wszystko jest w porządku. Wydaj następujące polecenie:

sudo sysctl -p

Zmusi to jądro Linuksa do ponownego załadowania ustawień , a jeśli wszystko poszło dobrze, powinno to zapewnić przynajmniej nieco szybsze połączenie sieciowe. W zależności od oryginalnych ustawień domyślnych różnica może w rzeczywistości być dramatyczna lub potencjalnie w ogóle niezauważalna.

8 minut czytania