Principiul împărțirii tuturor și a tot ceea ce există există pentru cât mai mulți miliarde de ani ca universul există. Cel mai adesea, obiectele sunt împărțite în proporții egale și o bucată inegală răpită de cineva sau ceva cauzează nemulțumirea divizată. Astfel de situații apar adesea atunci când obiectul de fisiune are o valoare semnificativă în sistem. Ne mutăm în secolul 21. Observând procesele în societate și, în primul rând, în sfera informațiilor, se poate observa că este rezonabil să se împartă toate învățate. Și, uneori, algoritmii sunt atât de autentici și stabili încât nu lasă nici o posibilitate de a accepta mai mult sau mai puțin. Aplicând toate cele de mai sus la transferul de date, puteți înțelege ce este în joc.
Societatea modernă și fiecare persoană în ea cere tratament egal în toate domeniile, care devine de multe ori o durere de cap pentru cei care furnizează servicii. În special, referindu-se la furnizarea de servicii de acces la Internet în ultimii ani a existat un progres imens, care rezolvă o serie de probleme cauzate de apariția World Wide Web în casele noastre și de la locul de muncă, transformând-o dintr-o anumită delicatețe în fast-food pentru sute de mii de oameni.
Mai întâi, să vedem câteva concepte pe care le vom folosi în viitor.
Tehnologie care vă permite să limitați viteza și calitatea accesului la Internet, numită formare (din formularul English Shape). Din punct de vedere figurat, aceasta este tehnologia de a oferi o anumită formă de program de descărcare a canalelor.
Un formator este un algoritm care, pe lângă controlul secvenței de pachete, permite respingerea celor care nu satisfac condițiile. Acestea includ algoritmii PCQ și HTB (vom vorbi despre ei mai târziu).
Sub-coada este o coadă formată din pachete de una sau alta caracteristică.
Disciplina de așteptare (qdisc) este un algoritm care captează pachetele și determină cu precizie în ce ordine și modul în care se vor mișca.
În centrul formării utilizate în Mikrotik, este disciplina coada HTB, implementată în multe sisteme Linux. Studiul său este destul de dificil, dar este o sarcină necesară pentru începător, deoarece puțini oameni depășesc aceste încercări nereușite și copiază regulile din documentație.
Lista de oportunități de bază pentru managementul traficului în Mikrotik arată astfel:
Conceptul cheie pentru HTB este clasa. Prefixul Hierarhical din abrevierea HTB înseamnă că disciplina vă permite să construiți o ierarhie de clasă.
Schematically, ierarhia claselor (pentru simplitate, clasele se vor numi reguli) HTB poate fi reprezentat sub forma unui copac hibrid împărțit la niveluri, vârfurile finale ale cărora sunt clienți. Clasele care nu au copii vor fi numiți clienți sau plecați. De obicei, aceștia se află la nivelul zero al ierarhiei și capturează mai întâi traficul legat de ei, transmițându-i părinților. Două sau mai multe clase care au același părinte direct sunt la același nivel și sunt conectate la aceeași coadă de ieșire locală.
Reprezentarea schematică a structurii HTB
Diagrama de mai sus prezintă o ierarhie a claselor, în care pachetele de date sunt recepționate de la Filtru. În funcție de prioritate, parametrii de clasă și încărcarea canalului, ele se încadrează fie într-o coadă locală (Self Feed), fie trecând în coada de clase părinte (Feed Inner).
Clasa este caracterizată de următorii parametri:
O clasă poate fi în una din cele trei stări:
- Verde - lățimea de bandă a regulii nu depășește parametrul limită la. În acest caz, pachetele nu se mișcă în sus pe ierarhie, ci se deplasează imediat la fluxul de ieșire al nivelului lor în funcție de priorități.
- Galben - lărgimea de bandă a regulii este mai mare decât limita la, dar mai mică decât limita maximă. În acest caz, clasa este deconectată de la fluxul de ieșire al nivelului său și este conectată la clasa parentală.
- Red - lățimea de bandă a regulii este mai mare decât limita maximă. În această stare, clasa este deconectată de la părinte și conectată la coada locală.
Chiar și folosind aceste date, puteți face reguli, dar, în practică, unele lucruri pot părea ușor diferite.
În Mikrotik există două tipuri de reguli, distribuite pe diferite file în utilitarul grafic Winbox (cu ajutorul căruia puteți configura Mikrotik de sub Windows):
Vom vorbi despre ele un pic mai târziu, iar acum vom lua în considerare mai multe exemple de operare HTB
Să creăm mai multe reguli
[admin @ MikroTik] copac coadă> add name = ClassA părinte = Local max-limit = 2048000
[admin @ MikroTik] copac coadă> add name = ClasaB părinte = ClassA max-limit = 1024000
[admin @ MikroTik] copac coadă> add name = Leaf1 părinte = ClassA max-limit = 2048000
. limit-at = 1024000 pachet-mark = pachet_mark1 prioritate = 8
[admin @ MikroTik] coadă de coadă> adăugați nume = Leaf2 părinte = ClassB max-limit = 1024000
. limit-at = 256000 pachet-mark = pachet_mark2 prioritate = 7
[admin @ MikroTik] copac coadă> adăugați nume = Leaf3 părinte = ClassB max-limit = 1024000
. limit-at = 768000 pachet-mark = packet_mark3 prioritate = 8
[admin @ MikroTik] coadă de copac> imprimare
Steaguri: X - dezactivat, I - nevalid
0 name = "ClassA" părinte = Pachet local-mark = "" limit-at = 0 queue = implicit
prioritate = 8 max-limit = 2048000 limită de spargere = 0 prag burst = 0
perioada de spargere = 0s
1 nume = "ClassB" părinte = ClassA pachete-mark = "" limit-at = 0 queue = implicit
prioritate = 8 max-limit = 1024000 burst-limit = 0 prag burst = 0
perioada de spargere = 0s
2 nume = "Leaf1" parent = Clasa pachet-mark = packet_mark1 limit-at = 1024000
cozi = prioritate implicită = 8 max-limit = 2048000 burst-limit = 0
pragul de spargere = 0 timpul de spargere = 0s
3 name = "Leaf2" părinte = pachet-mark ClassB = packet_mark2 limit-at = 256000
cozi = prioritate implicită = 7 max-limit = 1024000 burst-limit = 0
pragul de spargere = 0 timpul de spargere = 0s
4 name = "Leaf3" părinte = pachet-mark ClassB = packet_mark3 limit-at = 768000
cozi = prioritate implicită = 8 max-limit = 1024000 burst-limit = 0
pragul de spargere = 0 timpul de spargere = 0s
[admin @ MikroTik] copac coadă>
1. Luați în considerare primul caz în care clienții 1 și 2 transmit date cu o rată mai mică decât cea specificată în parametrul limită, iar clientul 3 nu funcționează.
După cum puteți vedea, pachetele cu date din leaf1 și leaf2 (clienți) nu sunt transmise clasei părinte, ci sunt construite în coada locală în conformitate cu prioritățile lor
2. Acum, să vedem ce se întâmplă dacă leaf2 clientul va transmite date la viteze de peste limită la, dar mai mică decât max-limită specificată în setările sale și mai puțin de limită la parametrii ClassB, la care este atașat. În același timp, leaf1 va transmite date la o rată care să nu depășească limita de-la.
În acest caz, se dovedește o situație interesantă: leaf1 de client va avea o prioritate mai mare decât leaf2, deși parametrii ultimului set o prioritate mai mare. Acest lucru se datorează faptului că transmiterea datelor la o limită la leaf2 conectat la clasa părinte având prioritate 8. În acest caz, există o regulă că nivelurile de prioritate inferioare ale pachetelor în aceleași condiții este mai mare decât cea superioară.
3. Luați în considerare ratele de date exemplu pentru leaf1 depășit admisibil max-limită, clientul leaf2 transmite datele privind viteza limită la mai mult și mai puțin max-limită, clientul leaf3 rulează la o viteză mai mică decât limita de la adresa.
Acesta este un caz foarte interesant. În această situație, este clar că ClassA este supraîncărcat cu date de la Leaf1, astfel încât să nu ClassB primi permisiunea de a rezultat peredachu.V ar fi realizabilă numai leaf3 client, conectat la o coadă locală la nivelul zero.
4. Acum ia în considerare un exemplu în care datele vor transmite simultan leaf1, leaf2, leaf3, ClassB vor fi galbene, iar ClassA va fi verde.
Ca rezultat, la al doilea nivel, leaf2 va ajunge la coadă mai întâi (deoarece are o prioritate mai mare), iar leaf1 și leaf3 vor fi selectate aleator pentru a determina secvența.
După cum vedem algoritmul de operare HTB este foarte logic și nu atât de complicat, așa cum părea imediat. Acesta a fost adoptat de mulți producători de software și hardware pentru flexibilitatea, fiabilitatea și lipsa de defecte inerente în predecesorii săi. Datorită marei versatilități cu ajutorul acesteia, este posibil să se construiască aproape orice ierarhizare posibilă a regulilor, care să delimiteze și să permită controlul fluxurilor de date la un nivel suficient de scăzut.
De multe ori este nevoie de a emite un așa-numita rata de vârf la client pentru o anumită perioadă de timp. De exemplu, uneori este necesar pentru a accelera de încărcare a paginilor, lăsând media fișierele de download de viteză care nu sunt atribuite mai sus. Sau rareori trebuie să trimită cereri și să primească date, dar o fac la viteza maxima. Ar fi o nebunie, în acest caz, pentru a le oferi clienților o viteză mai mare, pentru că la un moment dat, din cauza neglijenței sau rautatea alți utilizatori pot sta sau face fără Internet, sau de a primi nu ca unii ar dori și cât de mult este plătit.
Dezvoltatorii companiei Mikrotik au furnizat toate instrumentele necesare pentru controlul vitezei maxime descrise mai sus. Următorii parametri caracterizează comportamentul acestuia:
- limită de expirare - viteza care va fi disponibilă imediat după conectare;
- prag pragurit - viteza medie pentru ultimele secunde de spargere;
- timp de spargere - timp pentru calculul pragului de spargere.
Momentul în care clientul sau clasa trebuie să dea viteza maximă se determină după cum urmează. Odată la 1/16 din timpul de spargere, încărcarea canalului este calculată pentru numărul specificat de secunde. Dacă sarcina medie este mai mică decât pragul de spargere, atunci clientului sau clasei i se alocă viteza limită de spargere specificată până când depășește pragul de spargere. Ulterior, se aplică limita maximă a limitei, până când apare din nou un prag de spargere mai mic.
Acest grafic este tipic pentru cazul cu http protocolul de pompare fișier de mari dimensiuni. După prima secundă de canal medie de încărcare va fi egal cu (0 + 0 + 0 + 0 + 0 + 0 + 0 + 512) / 8 = 64 kbps, care este parametrul de contact mai mic set de spargere prag. După a doua a doua viteza medie este egală cu (0 + 0 + 0 + 0 + 0 + 0 + 512 + 512) / 8 = 128kbps. După a treia secundă, viteza medie va depăși pragul de spargere. În acest moment, viteza scade dramatic la valoarea parametrului max-limită și va rămâne la acest nivel atâta timp cât încărcarea canalului medie este mai mică de spargere prag și nu se va întâmpla din nou izbucni problemă de viteză.
Luați în considerare algoritmii programatorilor așa-numiți, menționați mai sus. De obicei, ele sunt utilizate împreună cu formatorii, dar unele dintre ele au și limite de viteză. Din punct de vedere fizic, programatorul precede formatorul și îl prezintă cu cozi de pachete deja pregătite, la care se aplică restricțiile.
Algoritm Packet / Bytes (FIFO) bazat pe principiul first-come-first-out. Folosit pentru interfețe Ethernet. Singurul parametru utilizat pentru a configura acest algoritm este pfifo-limit (bfifo-limit). Acesta indică numărul de octeți care pot fi stocați în bufferul de ieșire. Pachetele care nu ating buffer-ul se vor prăbuși. Din punct de vedere grafic, algoritmul poate fi reprezentat utilizând următoarea schemă. De fapt, PFIFO / BFIFO nu are nimic special în sine și nu oferă niciun avantaj. Pur și simplu este și este folosit acolo unde este recomandabil să-l folosiți ...
SFQ (Queuing Stochastic Fairness) - acest algoritm poate fi numit "aleatoriu-cinstit". Este utilizat când doriți să furnizați toate conexiunile TCP / UDP cu aceeași capacitate de transfer de date. Pentru a configura SFQ, se folosesc doi parametri:
- sfq-decumpăni - indică cât timp ai nevoie pentru a schimba algoritmul de hash, care determină ce va fi în formă de coadă de solicitare;
- pcq-allot - specifică numărul de octeți din sub-coadă.
SFQ funcționează după cum urmează: pachetele algoritm de reținere la sursă de la subqueues produce simultan ieșire PCQ-aloca numărul de octeți de interfață, și algoritmul hash adaugă la fiecare sub-coadă PCQ-aloc bytes, menținând în același timp echilibrul și aceeași lungime a tuturor subqueues. Funcționarea în circuit SFQ poate fi comparat cu o mașină de tocat carne, în care, prin grătarul de evacuare, în același timp, cu toate găurile din aceeași cantitate merge umplutura :).
Se recomandă utilizarea algoritmului SFQ în cazurile în care canalul este încărcat foarte mult și este necesar ca aplicațiile să aibă aceeași capacitate de a transfera date. Singurul său dezavantaj este că o aplicație, care a deschis multe fire, poate întrerupe alte conexiuni.
RED (Detectare timpurie a aleatorilor) - un algoritm conceput pentru a egaliza performanțele și sări netede, controlând dimensiunea medie a coadajului. Când dimensiunea atinge valoarea ro-min-prag, algoritmul elimină pachetul selectat aleatoriu. Numărul de pachete șterse crește odată cu mărirea dimensiunii medii a coadajului. Dacă dimensiunea atinge valoarea roșu-max-prag, toate pachetele sunt șterse. Cu toate acestea, există situații în care dimensiunea reală a coadajului (nu media) este mult mai mare decât pragul roșu-max. În acest caz, toate pachetele care depășesc limita de limită roșie. sunt șterse.
Folosind algoritmul nu este foarte de dorit în prezența UDP-trafic, la fel ca în legătură cu algoritmul promiscuu atunci când ștergeți pachetele din coada si principiul datelor UDP-protocol nu se poate ajunge la destinatar.
De la teorie la practică
Acum știm tot ceea ce este necesar pentru a construi regulile de care avem nevoie. Deoarece, în practică, utilizarea SFQ și algoritmul RED este rar folosit, atunci exemplele de munca lor, nu vom opri.
Coada de copaci este un tip special de coadă care reflectă direct dispozitivul HTB al formatorului. Vă permite să construiți arbori de reguli (clase) și la cele mai mici niveluri de gestionare a pachetelor.
Explicați pe scurt importanța controalelor de bază care sunt prezente în copaci de coadă:
- limita de spargere (integer) - viteza de spargere maxima;
- prag de prag (întreg) - sarcina medie a canalului la care este permisă emiterea unei limite de explozie;
- timp de spargere (timp) - folosit pentru calcularea sarcinii medii a canalului;
- flux (text) - fluxul marcat în / ip ip firewall mangle;
- limită la (întreg) - viteză garantată;
- max-limit (număr întreg) - viteză maximă;
- nume (text) - numele coadajului;
- părinte (text) - părinte în ierarhia clasei HTB;
- prioritate (număr întreg: 1 ... 8) - prioritatea coadă;
- coada (text) - tipul coadajului. Se specifică în tipul / coada de așteptare.
I. Deci, creați o regulă care va oferi clienților cu o viteză maximă locală sau virtual de rețea și timp minim de răspuns la accesarea site-ului www.x-drivers.ru. Cu toate acestea, va împărți viteza între toți în mod egal.
/ IP calandru firewall adăuga lanț = transmite src =-adresa 192.168.11.0 / 24 dst-address = 66.148.73.54 / 32 action = mark-conexiune nouă-conexiune-mark = utilizatorii-con-up
/ ip firewall mangle adăugați link-mark = users-con-up action = mark-packet
nou-pachet-mark = utilizatori-up lanț = înainte
/ ip firewall mangle adăugați lanțul = înainte src-address = 66.148.73.54 / 32
action = marc-conexiune new-connection-mark = utilizatori-con-down
/ ip firewall mangle adăugați conexiune-mark = users-con-down action = mark-packet
nou-pachet-mark = utilizatori-în jos lanț = înainte
/ tip de coadă adăugați nume = pcq-descărcare kind = pcq-classifier = dst-address
/ tip de coadă adăugați nume = pcq-upload kind = pcq-classifier = src-address