Heb je ooit situaties meegemaakt waarbij één applicatie je netwerkbandbreedte domineerde? Als je ooit in een situatie bent geweest waarbij één applicatie al je verkeer opslokte, dan zul je de rol van de trickle bandbreedtevormingsapplicatie waarderen.
Of je nu een systeembeheerder bent of gewoon een Linux-gebruiker, je moet leren hoe je de upload- en downloadsnelheden voor applicaties kunt controleren om ervoor te zorgen dat je netwerkbandbreedte niet wordt opgeslokt door één enkele applicatie.
Wat is Trickle?
Trickle is een netwerkbandbreedtevormingstool die ons in staat stelt om de upload- en downloadsnelheden van applicaties te beheren om te voorkomen dat een van hen alle (of de meeste) beschikbare bandbreedte in beslag neemt.
In een paar woorden, Trickle stelt je in staat om het netwerkverkeer per toepassing te beheersen, in tegenstelling tot per-gebruikerbeheer, wat het klassieke voorbeeld is van bandbreedteshaping in een client-serveromgeving en waarschijnlijk de setup is waarmee we meer vertrouwd zijn.
Hoe werkt Trickle?
Bovendien kan een Trickle ons helpen om prioriteiten per toepassing te definiëren, zodat wanneer er algehele limieten zijn ingesteld voor het hele systeem, toepassingen met prioriteit nog steeds automatisch meer bandbreedte krijgen.
Om deze taak te volbrengen, stelt Trickle verkeerslimieten in voor de manier waarop gegevens worden verzonden en ontvangen van en naar, sockets met behulp van TCP-verbindingen. We moeten onthouden dat Trickle, behalve de gegevensoverdrachtssnelheden, op geen enkele manier het gedrag van de processturing verandert op een bepaald moment.
Wat kan Trickle niet doen?
Het enige beperkende, zo je wilt, is dat Trickle niet werkt met statisch gekoppelde toepassingen of binaire bestanden met de SUID of SGID bits ingesteld, omdat het dynamische koppeling en laden gebruikt om zichzelf tussen het geshapen proces en de bijbehorende netwerksocket te plaatsen. Trickle fungeert dan als een proxy tussen deze twee softwarecomponenten.
Sinds trickle geen supergebruikersrechten nodig heeft om te draaien, kunnen gebruikers hun eigen verkeerslimieten instellen. Aangezien dit mogelijk niet wenselijk is, zullen we onderzoeken hoe we algemene limieten kunnen instellen die systeemgebruikers niet kunnen overschrijden. Met andere woorden, gebruikers zullen nog steeds in staat zijn om hun verkeerssnelheden te beheren, maar altijd binnen de grenzen die door de systeembeheerder zijn ingesteld.
Testomgeving
In dit artikel zullen we uitleggen hoe je de netwerkbandbreedte die door applicaties wordt gebruikt op een Linux-server kunt beperken met trickle.
Om het benodigde verkeer te genereren, zullen we ncftpput en ncftpget gebruiken (beide tools zijn beschikbaar door ncftp te installeren) op de client (CentOS-server – dev1: 192.168.0.17), en vsftpd op de server (Debian – dev2: 192.168.0.15) ter illustratie.
Dezelfde instructies werken ook op RHEL-gebaseerde en Debian-gebaseerde distributies zoals Ubuntu en Linux Mint.
Hoe ncftp en vsftpd te installeren in Linux
1. Voor RedHat-gebaseerde distributies moet u de EPEL-opslagplaats inschakelen, wat een opslagplaats is van hoogwaardige gratis en open-source software onderhouden door het Fedora-project.
Installeer EPEL op RHEL 9:
sudo subscription-manager repos --enable codeready-builder-for-rhel-9-$(arch)-rpms sudo dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm
Installeer EPEL op CentOS 9, AlmaLinux 9, Rocky Linux 9:
sudo dnf config-manager --set-enabled crb sudo dnf install epel-release
Installeer EPEL op RHEL 8:
sudo subscription-manager repos --enable codeready-builder-for-rhel-8-$(arch)-rpms sudo dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
Installeer EPEL op CentOS 8, AlmaLinux 8, Rocky Linux 8:
sudo dnf config-manager --set-enabled powertools sudo dnf install epel-release
2. Vervolgens installeert u ncftp als volgt.
sudo dnf install ncftp [On RHEL/CentOS/Fedora and Rocky/AlmaLinux] sudo apt install ncftp [On Debian, Ubuntu and Mint]
3. Stel een FTP-server in op een aparte server. Let op dat hoewel FTP inherent onveilig is, het nog steeds veel wordt gebruikt in gevallen waarin beveiliging bij het uploaden of downloaden van bestanden niet nodig is.
We gebruiken het in dit artikel om de voordelen van trickle te illustreren en omdat het de overdrachtssnelheden toont in stdout op de client, en we zullen de discussie of het wel of niet moet worden gebruikt voor een andere datum en tijd laten.
sudo dnf install vsftpd [On RHEL/CentOS/Fedora and Rocky/AlmaLinux] sudo apt install vsftpd [On Debian, Ubuntu and Mint]
Bewerk nu het bestand /etc/vsftpd/vsftpd.conf op de FTP-server als volgt:
$ sudo nano /etc/vsftpd/vsftpd.conf OR $ sudo nano /etc/vsftpd.conf
Maak de volgende wijzigingen:
anonymous_enable=NO local_enable=YES chroot_local_user=YES allow_writeable_chroot=YES
Zorg er daarna voor dat u vsftpd start voor uw huidige sessie en schakel het in voor automatisch starten bij toekomstige opstarts:
sudo systemctl start vsftpd sudo systemctl enable vsftpd sudo systemctl status vsftpd
4. Als u ervoor kiest om de FTP-server in een CentOS/RHEL-droplet op te zetten met SSH-sleutels voor externe toegang, heeft u een gebruikersaccount met wachtwoordbeveiliging nodig met de juiste directory- en bestandsmachtigingen voor het uploaden en downloaden van de gewenste inhoud BUITEN de thuismap van de root.
Vervolgens kunt u naar uw thuisdirectory bladeren door de volgende URL in uw browser in te voeren. Er verschijnt een aanmeldvenster waarin u wordt gevraagd om een geldig gebruikersaccount en wachtwoord op de FTP-server.
ftp://192.168.0.15
Als de verificatie slaagt, ziet u de inhoud van uw thuisdirectory. Later in deze handleiding kunt u die pagina vernieuwen om de bestanden weer te geven die tijdens eerdere stappen zijn geüpload.

Hoe Trickle te installeren in Linux
Installeer nu trickle via yum of apt.
Om een succesvolle installatie te garanderen, wordt het als een goede praktijk beschouwd om ervoor te zorgen dat de momenteel geïnstalleerde pakketten up-to-date zijn (met yum update) voordat u de tool zelf installeert.
sudo yum -y update && sudo yum install trickle [On RedHat based systems] sudo apt -y update && sudo apt install trickle [On Debian based systems]
Controleer of trickle zal werken met het gewenste binair. Zoals we eerder hebben uitgelegd, zal trickle alleen werken met binaries die dynamische of gedeelde bibliotheken gebruiken.
Om te verifiëren of we dit hulpmiddel kunnen gebruiken met een bepaald toepassingsprogramma, kunnen we de bekende ldd utiliteit gebruiken, waarbij ldd staat voor lijst dynamische afhankelijkheden.
In het bijzonder zullen we zoeken naar de aanwezigheid van glibc (de GNU C-bibliotheek) in de lijst van dynamische afhankelijkheden van een bepaald programma, omdat het juist die bibliotheek is die de systeemoproepen definieert die betrokken zijn bij communicatie via sockets.
Voer de volgende opdracht uit tegen een gegeven binair bestand om te zien of trickle kan worden gebruikt om zijn bandbreedte te vormen:
sudo ldd $(which [binary]) | grep libc.so
Bijvoorbeeld,
sudo ldd $(which ncftp) | grep libc.so
waarvan de uitvoer is:
sudo libc.so.6 => /lib64/libc.so.6 (0x00007efff2e6c000)
De tekenreeks tussen haakjes in de uitvoer kan van systeem tot systeem en zelfs tussen opeenvolgende runs van dezelfde opdracht veranderen omdat het de laadadres van de bibliotheek in fysieke geheugen vertegenwoordigt.
Als de bovenstaande opdracht geen resultaten teruggeeft, betekent dit dat het binair bestand waartegen het werd uitgevoerd geen libc gebruikt, en dus kan trickle in dat geval niet worden gebruikt als bandbreedtevormer.
Leer Hoe u Trickle in Linux kunt gebruiken
De meest basale toepassing van trickle is in standalone-modus. Met deze aanpak wordt de trickle gebruikt om expliciet de download- en uploadsnelheden van een bepaalde toepassing te definiëren. Zoals we eerder uitlegden, zullen we voor de kortheid dezelfde toepassing gebruiken voor download- en uploadtests.
Trickle uitvoeren in standalone-modus
We zullen de download- en uploadsnelheden vergelijken met en zonder het gebruik van trickle. De -d
optie geeft de downloadsnelheid aan in KB/s, terwijl de -u
vlag trickle vertelt om de uploadsnelheid in dezelfde eenheid te beperken. Bovendien zullen we de -s
vlag gebruiken, die aangeeft dat trickle in standalone-modus moet worden uitgevoerd.
De basissyntaxis om trickle in standalone-modus uit te voeren is als volgt:
sudo trickle -s -d [download rate in KB/s] -u [upload rate in KB/s]
Om de volgende voorbeelden zelf uit te voeren, zorg ervoor dat trickle en ncftp geïnstalleerd zijn op de clientmachine (192.168.0.17 in mijn geval).
Voorbeeld 1: Uploaden van een 2,8MB-bestand met en zonder Trickle
We gebruiken het vrij verspreide Linux Fundamentals PDF-bestand (beschikbaar vanaf hier) voor de volgende tests.
U kunt dit bestand eerst downloaden naar uw huidige werkdirectory met de volgende wget command:
wget http://linux-training.be/files/books/LinuxFun.pdf
De syntaxis om een bestand naar onze FTP-server te uploaden zonder trickle is als volgt:
sudo ncftpput -u username -p password 192.168.0.15 /remote_directory local-filename
Waarbij /remote_directory het pad van de uploaddirectory is ten opzichte van de thuismap van de gebruiker en local-filename een bestand is in uw huidige werkdirectory.
In het bijzonder, zonder ’trickle’, krijgen we een piekuploadsnelheid van 52,02 MB/s (let erop dat dit niet de echte gemiddelde uploadsnelheid is, maar een momentopname van de startpiek), en wordt het bestand bijna onmiddellijk geüpload:
sudo ncftpput -u username -p password 192.168.0.15 /testdir LinuxFun.pdf
Output:
LinuxFun.pdf: 2.79 MB 52.02 MB/s
Met ’trickle’ beperken we de uploadoverdrachtssnelheid tot 5 KB/s. Voordat we het bestand voor de tweede keer uploaden, moeten we het verwijderen uit de bestemmingsdirectory.
Anders zal ncftp ons informeren dat het bestand in de bestemmingsdirectory hetzelfde is als wat we proberen te uploaden, en zal de overdracht niet uitvoeren:
rm /absolute/path/to/destination/directory/LinuxFun.pdf
Dan:
trickle -s -u 5 ncftpput -u username -p password 111.111.111.111 /testdir LinuxFun.pdf
Output:
LinuxFun.pdf: 2.79 MB 4.94 kB/s
In het voorbeeld hierboven kunnen we zien dat de gemiddelde uploadsnelheid daalde tot ~5 KB/s.
Voorbeeld 2: Het downloaden van hetzelfde 2,8MB bestand met en zonder ’trickle’
Vergeet eerst niet om de PDF te verwijderen uit de oorspronkelijke brondirectory:
rm /absolute/path/to/source/directory/LinuxFun.pdf
Let erop dat de volgende gevallen het bestand downloaden naar de huidige directory op de clientmachine. Dit wordt aangegeven door de periode (‘.‘) die verschijnt na de IP-adres van de FTP-server.
Zonder ’trickle’:
ncftpget -u username -p password 111.111.111.111 . /testdir/LinuxFun.pdf
Output:
LinuxFun.pdf: 2.79 MB 260.53 MB/s
Met ’trickle’, de downloadsnelheid beperken tot 20 KB/s:
trickle -s -d 30 ncftpget -u username -p password 111.111.111.111 . /testdir/LinuxFun.pdf
Output:
LinuxFun.pdf: 2.79 MB 17.76 kB/s
Het uitvoeren van ’trickle’ in gedistribueerde [ongeleide] modus
‘Trickle’ kan ook in ongeleide modus draaien, gevolgd door een reeks parameters gedefinieerd in /etc/trickled.conf. Dit bestand definieert hoe ’trickled’ (de daemon) zich gedraagt en ’trickle’ beheert.
Bovendien, als we globale instellingen willen instellen die door alle applicaties gebruikt worden, zullen we de trickled commando moeten gebruiken. Dit commando start de daemon en stelt ons in staat om download- en uploadlimieten te definiëren die worden gedeeld door alle applicaties die via trickle worden uitgevoerd, zonder dat we telkens limieten moeten specificeren.
Bijvoorbeeld, uitvoeren:
trickled -d 50 -u 10
Dit zal de download- en uploadsnelheden van elke applicatie die via trickle wordt uitgevoerd, beperken tot 30 KB/s en 10 KB/s, respectievelijk.
Merk op dat je op elk moment kunt controleren of trickled draait en met welke argumenten:
ps -ef | grep trickled | grep -v grep
Uitvoer:
root 16475 1 0 Dec24 ? 00:00:04 trickled -d 50 -u 10
Voorbeeld 3: Uploaden van een 19MB MP4-bestand naar FTP-server met behulp van Trickle
In dit voorbeeld gebruiken we de vrije te verspreiden “video Hij is het geschenk“, beschikbaar voor download vanaf deze link.
We zullen eerst dit bestand downloaden naar je huidige werkdirectory met het volgende commando:
wget http://media2.ldscdn.org/assets/missionary/our-people-2014/2014-00-1460-he-is-the-gift-360p-eng.mp4
Eerst beginnen we de trickled daemon met het bovenstaande commando:
trickled -d 30 -u 10
Zonder trickle:
ncftpput -u username -p password 192.168.0.15 /testdir 2014-00-1460-he-is-the-gift-360p-eng.mp4
Uitvoer:
2014-00-1460-he-is-the-gift-360p-eng.mp4: 18.53 MB 36.31 MB/s
Met trickle:
trickle ncftpput -u username -p password 192.168.0.15 /testdir 2014-00-1460-he-is-the-gift-360p-eng.mp4
Uitvoer:
2014-00-1460-he-is-the-gift-360p-eng.mp4: 18.53 MB 9.51 kB/s
Zoals we in de bovenstaande uitvoer kunnen zien, daalde de uploadoverdrachtssnelheid naar ~10 KB/s.
Voorbeeld 4: Het downloaden van dezelfde video met Trickle
Zoals in Voorbeeld 2, zullen we het bestand downloaden naar de huidige werkdirectory.
Zonder trickle:
ncftpget -u username -p password 192.168.0.15 . /testdir/2014-00-1460-he-is-the-gift-360p-eng.mp4
Uitvoer:
2014-00-1460-he-is-the-gift-360p-eng.mp4: 18.53 MB 108.34 MB/s
Met trickle:
trickle ncftpget -u username -p password 111.111.111.111 . /testdir/2014-00-1460-he-is-the-gift-360p-eng.mp4
Uitvoer:
2014-00-1460-he-is-the-gift-360p-eng.mp4: 18.53 MB 29.28 kB/s
Wat overeenkomt met de eerder ingestelde downloadlimiet (30 KB/s).
Opmerking: Zodra de daemon is gestart, is er geen behoefte om individuele limieten in te stellen voor elke applicatie die trickle gebruikt.
Zoals we eerder zeiden, kan men de bandbreedteschaling van trickle verder aanpassen via trickled.conf. Een typisch gedeelte in dit bestand bestaat uit het volgende:
[service] Priority = <value> Time-Smoothing = <value> Length-Smoothing = <value>
Waarbij,
- [service] het naam van de applicatie aangeeft waarvan we de bandbreedtegebruik willen vormen.
- Prioriteit stelt ons in staat om een service een hogere prioriteit te geven ten opzichte van een andere, waardoor een enkele applicatie niet alle bandbreedte kan gebruiken die de daemon beheert. Hoe lager het nummer, hoe meer bandbreedte wordt toegewezen aan [service].
- Tijd-Vloeiendheid [in seconden]: definieert met welke tijdsintervallen trickled zal proberen de applicatie data te laten overdragen en/of ontvangen. Kleinere waarden (iets tussen het bereik van 0,1 – 1s) zijn ideaal voor interactieve applicaties en zullen resulteren in een meer continue (soepele) sessie, terwijl iets grotere waarden (1 – 10 s) beter zijn voor applicaties die bulkoverdracht nodig hebben. Als er geen waarde is opgegeven, wordt de standaardwaarde (5 s) gebruikt.
- Lengte-Glazigheid [in KB]: het idee is hetzelfde als in Tijd-Glazigheid, maar gebaseerd op de lengte van een I/O-operatie. Als er geen waarde is opgegeven, wordt de standaardwaarde (10 KB) gebruikt.
Het wijzigen van de glazigheidswaarden zal resulteren in het door [service] aangegeven toepassingsgebruik van overdrachtssnelheden binnen een interval in plaats van een vaste waarde. Helaas is er geen formule om de onder- en bovengrenzen van dit interval te berekenen, aangezien dit voornamelijk afhankelijk is van elk specifiek gevalscenario.
Het volgende is een trickled.conf voorbeeldbestand op de CentOS 7-client (192.168.0.17):
[ssh] Priority = 1 Time-Smoothing = 0.1 Length-Smoothing = 2 [ftp] Priority = 2 Time-Smoothing = 1 Length-Smoothing = 3
Met deze setup zal trickled SSH-verbindingen prioriteren boven FTP-overdrachten. Merk op dat een interactief proces, zoals SSH, kleinere tijd-glazigheidswaarden gebruikt, terwijl een service die bulkgewijze gegevensoverdrachten uitvoert (FTP) een grotere waarde gebruikt.
De glazigheidswaarden zijn verantwoordelijk voor de download- en uploadsnelheden in ons eerdere voorbeeld niet overeenkomend met de exacte waarde die is opgegeven door de trickled-daemon, maar bewegen in een interval in de buurt van deze waarde.
[ Je zou het ook leuk kunnen vinden: Hoe u OpenSSH-server veilig en versterkt ]
Conclusie
In dit artikel hebben we onderzocht hoe u de bandbreedte beperkt die door toepassingen wordt gebruikt met trickle op Fedora-gebaseerde distributies en Debian / derivaten. Andere mogelijke gebruiksvoorbeelden zijn onder andere:
- Beperken van de downloadsnelheid via een systeemhulpprogramma zoals wget, of een torrent client, bijvoorbeeld.
- Beperken van de snelheid waarmee uw systeem kan worden bijgewerkt via `yum` (of `aptitude`, als u in een op Debian gebaseerd systeem zit), het pakketbeheersysteem.
- Als uw server toevallig achter een proxy of firewall zit (of zelf de proxy of firewall is), kunt u trickle gebruiken om limieten te stellen op zowel de download- en uploadsnelheid of communicatiesnelheid met de clients of de buitenwereld.
Vragen en opmerkingen zijn zeer welkom. Gebruik gerust het formulier hieronder om ze naar ons door te sturen.
Source:
https://www.tecmint.com/limit-linux-network-bandwidth-usage-with-trickle/