Hoe Ubuntu-internetsnelheid te optimaliseren met MTU-instellingen



Probeer Ons Instrument Voor Het Oplossen Van Problemen

Hoewel computerteksten verschillen in hun toepassing van de term, gebruikt Ubuntu de TCP Maximum Transmission Unit (MTU) om te verwijzen naar de grootste grootte van een TCP-pakket dat een machine kan doorgeven via een TCP / IP-netwerkverbinding. Hoewel het berekenen van deze waarde relatief eenvoudig is en de standaardinstellingen op de meeste computers werken, is het wellicht mogelijk om uw systeem verder te optimaliseren als pakketten fragmenteren vanwege ongebruikelijke instellingen. Het verzenden van grote afzonderlijke uitgaande pakketten is efficiënter dan het verzenden van meerdere kleinere uitgaande pakketten.



De eenvoudigste manier om de juiste MTU-waarde voor uw machine te achterhalen, is door een terminalvenster te openen. Houd CTRL, ATL en T ingedrukt of start het misschien vanuit het Unity-streepje. Als u met Ubuntu Server werkt, gebruikt u standaard een CLI-interface zonder grafische omgeving. Als je eenmaal bij de terminal bent, typ je ping -s 1464 -c1 distrowatch.com en wacht je op de uitvoer. Als u niets ontvangt, is uw netwerkverbinding niet correct geconfigureerd. Ervan uitgaande dat u de juiste uitvoer heeft ontvangen, zoek dan naar een sectie die 1464 (1492) bytes aan gegevens leest, wat aangeeft dat u het pakket met 28 bytes aan koptekstinformatie verzendt.



Methode 1: ping-uitvoer onderzoeken voor pakketfragmentatie

Het ping-commando laat u weten of het pakket is verzonden als meer dan één fragment met meerdere kopgegevens als bijlage. Onderzoek de uitvoer voor elke regel die waarschuwt voor iets met betrekking tot 'Frag nodig en DF set (mtu = 1492)' of gelijkaardige tekst. Afhankelijk van welke versie van ping bij uw versie van Ubuntu is geleverd, kan de waarschuwing anders worden geformuleerd. Mocht deze tekst niet aanwezig zijn, dan werkt u hoogstwaarschijnlijk al met een of andere MTU-meting die op dit moment geen gefragmenteerde pakketten verzendt.



Om de meest geoptimaliseerde MTU voor uw systeem te vinden, zou u dit ping-commando willen uitvoeren met een kleine pakketgrootte, en het na verloop van tijd verhogen totdat het begint te fragmenteren, waarna u dit als uw afkappunt beschouwt. Houd er rekening mee dat MTU = payload + 28, aangezien er ruimte moet zijn voor de headergegevens. Als u de grootte nu kunt vergroten tot iets heel groots zonder fragmenten, dan kan uw netwerkinterface mogelijk enorme pakketten verwerken zonder dat u fragmenten hoeft te genereren. Als je eindelijk de waarschuwing Frag nodig ziet, betekent dit dat elk pakket dat wordt verzonden met een payload van de grootte die je hebt uitgevoerd of hoger, als meerdere pakketten wordt verzonden. Stel dat als u ping -s 2464 -c1 distrowatch.com zonder enige waarschuwing probeert, maar ping -s 2465 -c1 distrowatch.com een ​​waarschuwing verzendt, dit betekent dat 2,464 + 28 de grootste MTU-instelling is die uw TCP / IP-configuratie aankan voordat u meerdere gefragmenteerde pakketten verzendt. Het kan even duren om een ​​exacte waarde te bepalen.



Als u eenmaal een waarde in gedachten heeft door de ping-opdracht meerdere keren uit te voeren, moet u deze uitvoeren sudo ifconfig om een ​​lijst met bekende netwerkinterfaces te vinden. Ubuntu en zijn derivaten hashen het root-account, maar we werkten vanuit een shell gemaakt door sudo bash voor onze voorbeelden. Het wordt aanbevolen om elke opdracht afzonderlijk in te leiden met sudo.

Zodra u het juiste apparaat kent, probeert u:

sudo ifconfig interfaceName man ####

Vervang interfaceName door de naam van de netwerkadapter waarmee u werkt, en vervang #### door de gevonden grootte plus 28 voor header-informatie. U kunt ifconfig uitvoeren om te zien wat de standaard MTU was voor uw NIC en deze meerdere keren opnieuw uitvoeren om te zien of deze vorige opdracht dit wijzigt. Bij sommige netwerkinterfaceadapters kunt u deze eenvoudigweg niet wijzigen. Als dat het geval is, zal verdere optimalisatie helaas vruchteloos zijn. Als dit echter heeft gewerkt, kunt u het daadwerkelijk permanent maken. Probeer te rennen ifconfig | grep MTU om alle waarden te vinden als u meerdere connectoren heeft, en vervolgens kunt u de waarden afstemmen op de connectoren waarmee u werkt.

Methode 2: MTU-optimalisaties laten plakken

Tot dusver heeft u geen permanente wijziging in uw systeem aangebracht. Als u opnieuw opstart, wist u alle wijzigingen, wat goed is als u een fout heeft gemaakt en merkt dat u geen verbinding meer kunt maken met internet. Als u daarentegen een nauwkeurige waarde voor uw MTU heeft gevonden, moet u de document. Dit is waarschijnlijk een goed moment om er een kopie van te maken voor het geval er iets gebeurt. Proberen of iets soortgelijks, dus je hebt een kopie voor het geval dat. Als u het grafisch wilt bewerken, typt u en voer uw wachtwoord in. Als je Kubuntu, Xubuntu of Lubuntu gebruikt, dan moet je gedit vervangen door de grafische teksteditor die je Ubuntu-respin gebruikt. Xubuntu gebruikt bijvoorbeeld mousepad in plaats van gedit. Als u Ubuntu Server gebruikt of gewoon liever met de opdrachtregel werkt, typ dan , ervan uitgaande dat u geen root-shell gebruikt.

Ongeacht welke methode je hebt gebruikt om het te bewerken, zoek de naam van de interface die ifconfig eerder uitspuugde. Laten we aannemen dat u naar de eerste wifi-connector op uw machine keek, die waarschijnlijk wlan0 of iets dergelijks zou heten. Zoek in dit geval een codefragment dat begint met iface wlan0 inet static of iets dergelijks. Uw kilometerstand kan variëren, maar op de volgende regel wordt het adres weergegeven, gevolgd door een IP-adres in ###. ###. #. ## formaat. Het kan een andere opmaak hebben als u een systeemeigen IPv6-verbinding gebruikt. Je hebt een netmasker en gateway-regel, gevolgd door iets met een hostnaam of iets dergelijks. Onderaan heb je nog een regel met mtu en een cijfer. Vervang dat nummer door de optimalisatie MTU-waarde, sla het document op en verlaat de teksteditor. U wilt het systeem opnieuw opstarten om er zeker van te zijn dat het werkt.

Mocht alles in orde zijn na verschillende herstarts, verwijder dan het bestand interfaces.bak in uw ~ / Documents-directory. U kunt in plaats daarvan sudo mv gebruiken en toen

als er iets mis ging in het proces.

Methode 3: TCP-ontvangstvenster (RWIN) -instellingen bewerken

Ubuntu verwijst naar de grootste hoeveelheid gegevens die een host accepteert voordat deze de afzender erkent als de RWIN-waarde. Als u een bestand van 30 MB downloadt, stuurt de externe server u niet onmiddellijk een gegevensblok van 30 MB. Uw Ubuntu-host stuurt een specifiek RWIN-nummer wanneer het het bestand opvraagt, en vervolgens begint de server gegevens te streamen totdat het aantal bytes is bereikt voordat het wacht op een bevestiging dat uw systeem de gegevens heeft ontvangen. Zodra de server dit heeft ontvangen, begint hij extra blokken te verzenden voordat hij op een nieuwe bevestiging wacht.

Latentie is de tijd die nodig is om pakketten van een externe server te verzenden en te ontvangen. Verbindingssnelheden dragen bij aan deze waarde, maar dat geldt ook voor tal van andere vertragingen. Het ping-commando zal de latentie verklaren in termen van round-trip time (RTT) -nummers. Kijk naar de uitvoer van onze vorige ping van DistroWatch. U zult een regel vinden met de tijd = 134 ms, wat aangeeft hoe lang het duurde voordat pakketten heen en weer gingen van onze Ubuntu-machine naar distrowatch.com en weer terug. We stuurden een pakket van 1.492 bytes, dus na 134 ms konden we een formule berekenen om de totale overdrachtssnelheid te vinden:

1.492 / .134 seconden = 11.134.328 bytes / seconde, wat neerkomt op ongeveer 10,88 binaire kilobytes per seconde. Dat is over het algemeen nogal traag, en daarom is RWIN aanwezig om te voorkomen dat u elk verzonden pakket afzonderlijk moet bevestigen.

RWIN-instellingen in Ubuntu staan ​​los van MTU-instellingen. Bereken het Bandwidth Delay Product (BDP) voor uw internetverbinding met deze formule:

(Totale maximale bandbreedte die uw internetverbinding zou moeten leveren in bytes per seconde) (RTT in seconden) = BDP

De grootte van het TCP-pakket heeft geen invloed op RWIN, maar de pakketgrootte zelf wordt beïnvloed door de waarde die is geselecteerd in Methode 1. Gebruik dit commando om de kernelvariabelen te vinden die gerelateerd zijn aan RWIN:

Houd er rekening mee dat er een spatie achter _mem staat, maar nergens anders in de geciteerde tekst. U krijgt verschillende waarden terug. De benodigde zijn net.ipv4.tcp_rmem, net.ipv4.tcp_wmem en net.ipv4.tcp_mem . De cijfers achter deze waarden vertegenwoordigen de minimum-, standaard- en maximumwaarden voor elk. Ze vertegenwoordigen de geheugenvector van het ontvangstvenster, de verzendvector en de TCP-stapelvector. Als u Ubuntu Kylin gebruikt, heeft u mogelijk een lange lijst met extra. U kunt deze aanvullende waarden gerust negeren. Sommige gebruikers van Kylin zien misschien ook enkele van de waarden afgebakend in andere scripts, maar zoeken gewoon opnieuw naar deze regels.

Ubuntu heeft geen RWIN-variabele, maar net.ipv4.tcp_rmem is dichtbij. Deze variabelen bepalen het geheugengebruik en niet alleen de TCP-grootte. Ze omvatten geheugen dat wordt opgegeten door datacontactdoosstructuren en korte pakketten in enorme buffers. Als u deze waarden wilt optimaliseren, verzendt u de pakketten met de maximale grootte die u in methode 1 instelt naar een andere externe server. Laten we de standaardwaarde van 1.492 bytes opnieuw gebruiken, waarbij 28 bytes worden afgetrokken voor koptekstinformatie, maar onthoud dat u mogelijk een andere waarde heeft. Gebruik het commando ping -s 1464 -c5 distrowatch.com om extra RTT-gegevens op te halen.

U wilt deze test meer dan eens op verschillende tijdstippen van de dag en nacht uitvoeren. Probeer ook enkele andere externe servers te pingen om te zien hoeveel RTT varieert. Omdat we elke keer dat we het probeerden gemiddeld iets meer dan 130 ms hadden, kunnen we de formule gebruiken om onze BDP te achterhalen. Laten we aannemen dat u een zeer algemene verbinding van 6 Mbits / seconde gebruikt. De BDP zou zijn:

(6.000.000 bits / sec) (. 133 sec) * (1 byte / 8 bits) = 99.750 bytes

Dit betekent dat de standaardwaarde voor net.ipv4.tcp_rmem ergens rond de 100.000 moet liggen. Je zou het nog hoger kunnen instellen als je bang bent dat je een RTT zo slecht als een halve seconde zou krijgen. Alle waarden in net.ipv4.tcp_rmem en net.ipv4.tcp_wmem moeten identiek worden ingesteld, aangezien de verzending en ontvangst van pakketten via dezelfde internetverbinding plaatsvinden. Over het algemeen wilt u net.ipv4.tcp_mem instellen op dezelfde waarde die wordt gebruikt door net.ipv4.tcp_wmem en net.ipv4.tcp_rmem, aangezien deze eerste variabele de totale grootte van het buffergeheugen is die is ingesteld voor TCP-transacties.

Geef het commando en kijk of beide instellingen zijn ingesteld op 0 of 1, wat aangeeft dat ze uit of aan zijn.

Het instellen van net.ipv4.tcp_no_metrics_save op 1 zal de Linux-kernel dwingen om het ontvangstvenster tussen de waarden net.ipv4.tcp_rmem en net.ipv4.tcp_wmem op een dynamische manier te optimaliseren. Wanneer net.ipv4.tcp_moderate_rcvbuf is ingeschakeld, wordt voorkomen dat congestie de daaropvolgende connectiviteit beïnvloedt. Voer voordat u permanente wijzigingen aanbrengt een snelheidscontrole uit via http://www.speedtest.net of http://www.bing.com/search?q=speed+test om er zeker van te zijn dat u grip op uw metingen hebt.

Verander tijdelijk de variabelen met uw berekende waarden. Zorg ervoor dat u de #s vervangt door uw berekende sommen.

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

Test uw verbinding opnieuw om te zien of de snelheid is verbeterd, en zo niet, pas uw opdracht opnieuw aan en voer deze opnieuw uit. Onthoud dat u op de toets omhoog in uw terminal kunt drukken om de laatst gebruikte opdracht te herhalen. Zodra u de juiste waarden heeft gevonden, opent u met de gksu of sudo text editor commando van methode 1, en bewerk de regels om als volgt te lezen, waarbij u nogmaals de #s vervangt door uw berekende waarden. U wilt natuurlijk ook een back-up maken van het bestand op dezelfde manier als in deel één, voor het geval u een fout maakt. Als je er een hebt gemaakt, kun je ook op dezelfde manier herstellen.

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

Bewaar het zodra u zeker weet dat alles in orde is. Geef het volgende commando:

sudo sysctl -p

Dit zal de Linux-kernel dwingen om de instellingen opnieuw te laden in , en als alles goed is gegaan, zou het je op zijn minst een iets snellere netwerkverbinding moeten opleveren. Afhankelijk van uw oorspronkelijke standaardinstellingen, is het verschil mogelijk dramatisch of mogelijk helemaal niet merkbaar.

8 minuten gelezen