Cum se configurează smartphone-uri și PC-uri. Portal informativ
  • Acasă
  • Sfat
  • Algoritmi de compresie a imaginii fără pierderi. Ce este o fereastră glisantă

Algoritmi de compresie a imaginii fără pierderi. Ce este o fereastră glisantă

Una dintre cele mai naturale tehnici folosite pentru a organiza transmisia fiabilă este strângerea de mână. Expeditorul trimite datele și așteaptă până când primește o chitanță care confirmă că datele sale au ajuns în siguranță la destinatar. TCP folosește un caz special de strângere de mână - algoritmul ferestrei glisante. Înainte de a trece la o analiză detaliată a specificului implementării acestui algoritm în protocolul TCP, este foarte util să îl discutăm în termeni generali.

Deci, există două metode de organizare a procesului de schimb de chitanțe: metoda sursă inactivă și metoda ferestrei glisante.

Metoda sursă inactivă necesită ca sursa care a trimis cadrul (în acest caz, nu contează ce nume este folosit pentru unitatea de date transmise), să aștepte de la receptor o chitanță care anunță că cadrul original a fost primit și că datele din el sunt corecte și numai după aceea au trimis următorul cadru (sau repetat unul distorsionat). Dacă chitanța nu a sosit în timpul expirării, atunci cadrul (sau chitanța) este considerat pierdut și transmiterea sa se repetă. În fig. 1 se arată că cel de-al doilea cadru se trimite numai după ce a sosit chitanța care confirmă livrarea primului cadru. Cu toate acestea, a urmat o pauză lungă în trimiterea următorului al treilea cadru.

În timpul acestei pauze, sursa a fost forțată să retransmite cadrul 2, deoarece chitanța pentru prima copie a fost pierdută. Este clar că, cu un astfel de algoritm pentru operarea sursă, partea de recepție trebuie să fie capabilă să recunoască cadrele duplicate și să scape de ele.

Orez. 1. Metoda sursă inactivă

Este destul de evident că atunci când se utilizează această metodă, performanța de comunicare este mai mică decât potențial posibil - emițătorul ar putea trimite următorul cadru imediat după trimiterea celui precedent, dar trebuie să aștepte primirea chitanței.

A doua metodă se numește metoda ferestrei glisante. În această metodă, pentru a crește viteza de transfer de date, sursei i se permite să transmită un anumit număr de cadre într-un mod continuu, adică la rata maximă posibilă pentru sursă chiar înainte de a primi chitanțe pentru aceste cadre. Numărul de cadre care pot fi transmise în acest mod se numește dimensiunea ferestrei.

Figura 2 ilustrează aplicarea acestei metode pentru o fereastră cu 5 cadre. La momentul inițial, când încă nu au fost trimise cadre, fereastra definește intervalul de numere de cadre de la 1 la 5 inclusiv. Sursa începe să transmită cadre și, după un timp, să primească chitanțe ca răspuns. Din motive de simplitate, să presupunem că chitanțele sosesc în aceeași succesiune (dar nu neapărat la aceeași rată) ca și cadrele cărora le corespund. În momentul în care expeditorul primește o chitanță 1, fereastra este deplasată cu o poziție în sus, definind o nouă gamă de cadre permise pentru trimitere (de la 2 la 6).

Procesele de trimitere a pachetelor și de primire a chitanțelor sunt destul de independente unele de altele. În exemplul nostru, expeditorul continuă să transmită cadre, dar de ceva timp nu primește chitanțe pentru ele. După ce cadrul 6 a fost transmis, fereastra este epuizată și sursa suspendă transmisia.

Orez. 2. Metoda ferestrei glisante

După primirea chitanței 2 (prin cadrul 2), fereastra este deplasată în sus cu unul, definind intervalul de cadre permise pentru transmitere de la 3 la 7. O „alunecare” similară a ferestrei în sus are loc după primirea fiecărei chitanțe: fereastra este deplasată în sus cu 1, dar dimensiunea sa nu se modifică și rămâne egală cu 5. După primirea chitanței 8, fereastra este în intervalul de la 9 la 13 și rămâne așa pentru o lungă perioadă de timp, deoarece din anumite motive sursa nu mai primește confirmare de livrarea ramelor. După ce a trimis ultimul cadru permis 13, emițătorul oprește din nou transmisia pentru a o relua după primirea chitanței 9.

Când este trimis un cadru, este setat un timeout la sursă. Dacă în timpul specificat chitanța pentru cadrul trimis nu vine, atunci cadrul (sau o chitanță pentru acesta) este considerată pierdută și cadrul este transmis din nou. Dacă fluxul de încasări ajunge regulat în toleranța de 5 cadre, atunci cursul de schimb atinge valoarea maximă posibilă pentru canalul dat și protocolul adoptat.

În cazul general, metoda ferestrei glisante este mai dificil de implementat decât metoda sursă inactivă, deoarece transmițătorul trebuie să stocheze în buffer copii ale tuturor cadrelor pentru care încă nu au fost primite chitanțe. În plus, atunci când utilizați această metodă, este necesar să urmăriți mai mulți parametri ai algoritmului, cum ar fi dimensiunea ferestrei, numărul cadrului pentru care a fost primită chitanța și numărul cadrului care poate fi încă transmis. înainte de a primi o nouă chitanță.

Pentru a crește sarcina utilă a canalului, utilizați mecanism de geam culisant.În mod preliminar, observăm că, dacă mecanismele de confirmare și timeout discutate mai sus presupun prezența unui canal semi-duplex între nodurile care interacționează, atunci mecanismul ferestrei glisante poate fi implementat numai în prezența unui canal full-duplex. În acest caz, cadrele de date și chitanțele pot fi transmise simultan pe diferite canale (Fig. 1.48).

Esența mecanismului ferestrei glisante este următoarea. Nodul expeditor poate trimite mai multe cadre de date la rând fără a primi confirmări pentru aceste cadre. În acest caz, blocurile sunt numerotate ciclic de la 1 la W, Unde W - dimensiunea (lățimea) ferestrei - numărul maxim de cadre care pot fi transmise fără confirmare. Numărul cadrului este indicat în antet. Lățimea ferestrei poate fi selectată din condiția încărcării maxime a canalului de comunicație directă de la nodul expeditor la nodul receptor, care poate fi realizată prin transmiterea mai multor cadre în așteptarea unei chitanțe pentru primul cadru:

Unde - timp minim de așteptare pentru o chitanță; -

timpul de transmisie a cadrului, - timpul de propagare a canalului

comunicare, - timpul petrecut la nodul receptor pentru procesarea cadrului și

formarea unei chitanțe.

După cum reiese din expresia prezentată, dacă neglijăm timpul de propagare a semnalului prin canalul de comunicație și timpul de procesare a cadrelor la nodul receptor U2, atunci lățimea minimă a ferestrei ar trebui să fie de cel puțin 2.

Să presupunem că la momentul inițial de timp fereastra nodului expeditor Y1 arată ca în figura 1.49, a), ceea ce înseamnă că este posibil să se transfere W cadre fără confirmare. Pentru a minimiza canalul de comunicare simplu, se poate genera o chitanță la nodul receptor înainte de transmiterea tuturor W cadre, adică nodul receptor poate trimite o chitanță nodului expeditor în orice moment convenabil pentru acesta. Un astfel de moment este de obicei asociat cu formarea unui cadru de date trimis pe canalul invers de la nodul U2 la nodul U1. În acest caz, în antetul acestui cadru se introduce o chitanță, indicând numărul ultimului cadru care a fost primit fără erori (confirmare pozitivă) sau cu o eroare (confirmare negativă). Dacă o chitanță pentru un cadru cu un număr La(1 < La< W) - este pozitivă, atunci fereastra de la nodul U1 este deplasată așa cum se arată în Fig. 1.49.6), ceea ce înseamnă că este posibil să transferați mai mult W cadre cu numere fără chitanțe. Dacă o chitanță pentru un cadru cu un număr - negativ, înseamnă că cadrele cu numere până la (k-1) luate corect, și cadre care încep de la număr La, trebuie retransmis. În acest caz, fereastra de la nodul U1 este deplasată așa cum se arată în Fig. 1.49, c), ceea ce înseamnă posibilitatea de a transfera mai multe W cadre cu numere fără chitanțe. Astfel, se poate genera o chitanță nu pentru toate cadrele transmise, ci doar pentru unele dintre ele, în plus, dacă la cadru a venit o chitanță pozitivă cu numărul La, atunci se consideră că acest cadru și toate cadrele anterioare cu numere de la 1 la (La-1) au fost acceptate fără erori. La fel, o chitanță negativă pe cadru numerotat Laînseamnă că toate cadrele anterioare au fost primite fără erori și toate cadrele transmise anterior, începând cu numărul La.

Algoritmul de expirare adaptiv KARN

Timeouts

Numerele de octeți

Duplicate

Probleme rezolvate prin procedura de strângere de mână

Dacă stația transmite 20 de octeți, atunci serverul va crește ACK-ul cu 20 (devine 751 de octeți), etc.

Confirmarea este generată pentru toți octeții care vin în secvența corectă. Trecerea dublelor nu va strica imaginea. Puteți confirma de 3 ori că au sosit 731 de octeți (acesta este un exemplu). Toate confirmările sunt cumulative. Confirmările pierdute nu reprezintă o problemă.

Pot apărea duplicate în TCP:

  1. Din cauza pierderii segmentului original
  2. Din cauza pierderii confirmării
  3. Din cauza timpului de retransmisie depășit
  4. Din cauza întârzierii segmentului
  5. Datorită enumerarii tuturor numerelor posibile de octeți

Numere consecutive până la 2 32. La o viteză de 2 Mbps, va dura 9 ore pentru a repeta toate valorile. Numerele de serie duplicate pot avea ca rezultat un duplicat. Pe măsură ce viteza crește, probabilitatea acestui lucru crește.

Se luptă cu o sumă incredibilă de fonduri.

Setați timeout-uri. Valoarea timeout afectează performanța. Timeout-ul este asociat cu timp de rulare dublu(RTT). Timeout lung - așteptare lungă pentru eroare. Timeout mic - retransmisie inutilă.

Sunt diverse algoritmi de timeout adaptivi(sarcină OS). CISCO folosește algoritmul KARN.

Esența algoritmului. Se calculează timpul mediu RTT, înmulțit cu un anumit coeficient (în KARN, coeficientul este 2). Este necesar să modificați nu numai timpul mediu de expirare, ci și să redimensionați fereastra. În KARN, fereastra se schimbă până când devine liberă de la 20% la 40% din fereastra.

TCP presupune o fereastră dinamică. Receptorul raportează numărul de octeți pe care îi poate primi (de la 0 la 65535). Numărul inițial al ferestrei este întotdeauna setat în timpul fazei de stabilire a conexiunii. Receptorul determină ce fereastră ar trebui să fie, în funcție de capabilitățile minime. Un proces de aplicație receptor care utilizează buffer-uri are un impact semnificativ asupra performanței TCP. Alegerea dimensiunii corecte a ferestrei va optimiza TCP. Se deschide o fereastră când procesul de recepție de pe cealaltă parte citește confirmarea și eliberează tamponul TCP. Dacă marginea din stânga coincide cu marginea din dreapta, expeditorul ar trebui să nu mai transmită (fereastră zero). Fereastra este închisă când are loc transmiterea și confirmarea datelor (chenarul din stânga se deplasează spre dreapta).

Conexiunea se termină când stația trimite steag-ul FIN către server. Serverul trimite ACK și FIN. Apoi serverul trimite din nou FIN, iar stația trimite ACK și FIN.

protectie la suprasarcina - pornire lent- nu trimite imediat și rapid pachete în rețea.

De asemenea este si mecanism rapid de retransmisie(nu este nevoie de pornire lentă) și

mecanism de confirmare întârziată (pe Windows).

Acest algoritm (algoritmul LZ77 4 Numit după autorii Abraham Lempel și Jacob Ziv. Publicat în 1977.) a fost unul dintre primii care a folosit un dicționar. Ultimele N elemente deja codificate ale secvenței sunt folosite ca dicționar. În procesul de comprimare, subsecvența dicționarului se deplasează („diapozitive”) de-a lungul secvenței de intrare. Lanțul de elemente la ieșire este codificat astfel: poziția părții potrivite a lanțului de elemente procesate în dicționar - offset (față de poziția curentă), lungime, primul element care urmează părții potrivite a lanțului. Lungimea lanțului de chibrituri este delimitată de sus de numărul n. În consecință, sarcina este de a găsi cel mai mare șir din dicționar care se potrivește cu secvența procesată. Dacă nu există potriviri, atunci sunt înregistrate decalajul zero, lungimea unității și numai primul element al secvenței necodificate - (0, 1, e).

Schema de codificare de mai sus duce la concept fereastra glisanta(ing. fereastră glisantă), constând din două părți:

  1. succesiune a elementelor deja codificate de lungime N - dicționar - tampon de căutare(buffer de căutare în engleză);
  2. succesiune de lungime n din lanțul de elemente pentru care se va încerca găsirea unei potriviri - tampon de previzualizare(tampon de previziune în engleză).

În termeni fereastra glisanta algoritmul de compresie este descris astfel: dacă e 1,. ... ... , e i este o subsecvență deja codificată, apoi e i-N + 1,. ... ... , e i este un dicționar sau tampon de căutare și e i + 1,. ... ... , e i + n - tampon de previzualizare. În mod similar, sarcina este să găsești cel mai mare lanț de elemente din bufferul de previzualizare, începând cu elementul e i + 1, care se potrivește cu lanțul din tamponul de căutare - acest lanț poate începe de la orice element și se poate termina cu orice element, adică. treceți dincolo de bufferul de căutare invadând tamponul de previzualizare. Este firesc să treci dincolo fereastra glisanta este interzis. Fie ca lungimea maximă care coincide lanțul de elemente e i-p să fie găsită în fereastra glisantă. ... ... , ei + q, atunci va fi codificat astfel: (p + 1, q + p + 1, ei + p + q + 2) - offset față de începutul bufferului de previzualizare (ei + 1), lungimea al lanțului potrivit, elementul care urmează lanțului potrivit din memoria tampon de previzualizare. Dacă căutarea găsește două potriviri cu aceeași lungime, este selectată cea mai apropiată de începutul bufferului de previzualizare. După aceea, fereastra glisantă este deplasată cu p + q + 2 elemente înainte, iar procedura de căutare se repetă.

Alegerea numerelor N și n este o problemă importantă separată, deoarece cu cât N și n sunt mai mari, cu atât este nevoie de mai mult spațiu pentru a stoca valorile offset și lungime. Desigur, timpul de rulare al algoritmului crește, de asemenea, odată cu creșterea lui N și n. Rețineți că de obicei N și n diferă printr-un ordin de mărime.

Să dăm un exemplu de compresie prin acest algoritm. Să comprimăm șirul „TOBEORNOTTOBE” cu parametrii N = 10 și n = 3:

Etapa fereastra glisanta Max. lanț asortat Ieșire
1 „” + „TOB” T 0,1, T
2 „T” + „OBE” O 0,1, O
3 „TO” + „BEO” B 0,1, B
4 „TOB” + „EOR” E 0,1, E
5 „TOBE” + „ORN” O 3.1, R
6 „TOBEOR” + „NU” N 0,1, N
7 „TOBEORN” + „OTT” O 3.1, T
8 „TOBEORNOT” + „TOBE” TOB 9.3, E

Dacă alocam 4 biți pentru stocarea offset-ului, 2 biți de lungime și 8 biți de elemente, atunci lungimea secvenței codificate (excluzând desemnarea sfârșitului secvenței) va fi 4 x 8 + 2 x 8 + 8 x 8 = 112 biți, iar originalul - 102 biți. În acest caz, nu am comprimat secvența, ci, dimpotrivă, am crescut redundanța prezentării. Acest lucru se datorează faptului că lungimea secvenței este prea mică pentru un astfel de algoritm. Dar, de exemplu, desenul arborelui cod Huffman din Fig. 13.1, care ocupă 420 kiloocteți de spațiu pe disc, după comprimare are o dimensiune de aproximativ 310 kiloocteți.

Mai jos este pseudocodul algoritmului de compresie.

// M - graniță fixă ​​// citește secvențial caractere din fluxul de intrare // în - input - secvență comprimată // n - lungime maximă a lanțului // pos - poziție în dicționar, len - lungime a lanțului // nelem - element cu lanț , str - found chain // in - input, out - output // SlideWindow - search buffer while (! in.EOF ()) // în timp ce există date (// se caută potrivirea maximă și parametrii acesteia SlideWindow.FindBestMatch ( in, n, pos , len, nelem); // scrie ieșirea: offset, lungime, element out.Write (pos); out.Write (len); out.Write (nelem); // mută fereastra glisantă cu len + 1 elemente SlideWindow.Move (în, len + 1);) Lista 13.2. Algoritmul de compresie LZ77

Decodificarea unei secvențe comprimate este o decriptare directă a codurilor înregistrate: fiecare intrare este asociată cu un șir dintr-un dicționar și un element scris în mod explicit, după care dicționarul este mutat. Evident, dicționarul este recreat pe măsură ce algoritmul de decodare rulează.

Se poate observa că procesul de decodare este mult mai simplu din punct de vedere computațional.

// n - lungime maximă a lanțului // pos - poziție în dicționar, len - lungime a lanțului // nelem - element cu lanț, str - lanț găsit // in - input, out - output // Dict - dicționar while (! in . EOF ()) // în timp ce există date (in.Read (pos); in.Read (len); in.Read (nelem); if (pos == 0) (// un singur caracter nou // eliminați primul din dicționar (departe) un element Dict.Remove (1); // adăugați elementul Dict.Add (nelem); out.Write (nelem);) else (// copiați șirul corespunzător din dicționarul str = Dict.Get (pos, len); // elimina din dicționar len + 1 elemente Dict.Remove (len + 1); // Adăugați un lanț la dicționar Dict.Add (str + nelem); out.Write ( str + nelem);)) Lista 13.3. Algoritm

Acest algoritm este strămoșul unei întregi familii de algoritmi și practic nu este utilizat în forma sa originală. Avantajele sale includ un raport de compresie decent pe secvențe destul de mari, decompresie rapidă și absența unui brevet 5 un document care oferă dreptul exclusiv de a exploata invenția pentru o anumită perioadă de timp (de obicei 15-20 de ani) asupra algoritmului. Dezavantajele includ o viteză mică de compresie, precum și un raport de compresie mai mic decât cel al algoritmilor alternativi (modificările algoritmilor se confruntă cu acest dezavantaj). Combinația de algoritmi Huffman (Lossless Image Compression) și LZ77 se numește metoda DEFLATE 6 Acesta este numele compresiei, iar decompresia se numește INFLATE (în engleză DEFLATE - to deflate, INFLATE - to inflate).... Metoda DEFLATE este utilizată în formatul de imagine PNG, precum și în formatul generic de compresie ZIP.

Stratul de transport utilizează serviciile oferite de stratul de rețea:

servicii de selectare a căilor și adresare logică. Aceste servicii Layer 3 oferă conectivitate end-to-end între expeditor și receptor. Acest capitol descrie modul în care stratul de transport reglează fluxul de informații de la emițător la receptor. Stratul de transport are următoarele caracteristici:

Fluxul de date din stratul de transport este o conexiune logică între punctele finale ale rețelei;

- mecanismul ferestrei glisante oferă control și fiabilitate end-to-end a conexiunii, permite urmărirea secvenței numerelor de pachete și a notificărilor;

 așa-numitele porturi(port).

Stiva de straturi de transportTCP/IP

După cum sugerează și numele, stratul de transport al stivei de protocoale TCP / IP este responsabil pentru transportul datelor între aplicațiile dispozitivului de primire și de expediere. Cunoașterea principiilor stratului de transport este un punct cheie care este necesar pentru o înțelegere profundă a tehnologiilor de rețea moderne. Următoarele secțiuni detaliază funcțiile și serviciile unuia dintre cele mai importante straturi ale modelului TCP/IP, transportul.

Introducere în stratul de transport al stiveiTCP/IP

Pentru a descrie al patrulea, transportul, stratul, expresia este adesea folosită calitatea serviciului... UDP, care este discutat în detaliu mai jos, este un nivel de transport și oferă servicii de transport fără conexiune. Cu toate acestea, protocolul principal care operează la acest nivel este TCP, care utilizează un mecanism de stabilire a conexiunii. Principalele funcții ale acestui protocol sunt transportul și controlul fiabil al fluxului de informații de la expeditor la destinatar. Principalele funcții ale stratului de transport sunt de a asigura controlul transmisiei de la capăt la capăt, controlul fluxului printr-un mecanism de fereastră glisantă și garantarea fiabilității livrării prin setarea numerelor secvențiale și utilizarea confirmărilor.

Pentru a înțelege la ce servește fiabilitatea și controlul fluxului, imaginați-vă un străin care vorbește foarte repede. Cel mai probabil, ascultătorul său va trebui uneori să ceară cuvinte individuale (analog al fiabilității transmisiei) și să ceară să vorbească mai încet (analog al unui flux).

Stratul de transport oferă un mijloc pentru transferul fiabil al datelor de la un nod de trimitere la un nod de primire. La acest nivel, se creează o conexiune logică între punctele finale ale rețelei; în plus, sarcinile stratului de transport includ segmentarea și reasamblarea datelor transmise de diverse aplicatii straturile superioare într-un singur flux de date strat de transport. Acest flux oferă transfer de date de la un capăt la altul între punctele finale.

Un flux de date la nivel de transport este o conexiune logică între punctele finale dintr-o rețea; stratul de transport verifică și conectivitatea dintre aplicații. În fig. 11.2 ilustrează funcționarea stratului de transport.

Stratul de transport oferă următoarele funcții:

    segmentarea datelor din aplicațiile de nivel superior;

    managementul comunicațiilor end-to-end;

    transferul de segmente de la un nod final la altul;

    controlul fluxului prin redimensionarea ferestrei;

    asigurarea fiabilității prin atribuirea de numere și utilizarea confirmărilor.

Pentru stratul de transport, rețeaua externă poate fi reprezentată ca un mediu (de obicei reprezentat ca un nor) prin care pachetele de date sunt transmise de la expeditor la destinatar. Acest mediu este responsabil pentru ruta care este optimă pentru un anumit destinatar. Deja în această etapă, puteți înțelege ce rol important joacă routerele în procesul de transmitere a datelor în rețea.

Suita de protocoale TCP/IP constă din două protocoale separate: TCP și IP. IP este un protocol de nivel 3 fără conexiune care permite transmiterea eficientă a datelor printr-o rețea. TCP este un protocol Layer 4, este un serviciu orientat spre conexiune și oferă control al fluxului și, prin urmare, fiabilitate ridicată a transmisiei. Combinația acestor două protocoale permite rezolvarea unei game largi de probleme de transmisie a datelor. Desigur, stiva de protocoale TCP / IP constă din multe alte protocoale, dar TCP și IP sunt principalele. Apropo, întreaga rețea de internet se bazează tocmai pe stiva de protocoale TCP / IP.

Controlul debitului

Atunci când protocolul de transport TCP transmite segmente de date, acesta poate garanta integritatea datelor. Una dintre metodele de a atinge acest obiectiv este Controlul debitului (curgereControl) ceea ce evită problemele asociate cu situațiile în care un nod de la un capăt al unei legături debordează tampoanele unei stații la celălalt capăt. Overflow este o problemă serioasă, deoarece poate duce la pierderea datelor.

Serviciile de transport permit utilizatorilor să solicite transport fiabil de date între nodurile de expediere și de primire. Un mecanism orientat spre conexiune este utilizat pentru a asigura un transfer fiabil de date între sistemele partenere de comunicare. Transportul în siguranță oferă următoarele funcții:

    garantează că expeditorul va primi confirmarea livrării fiecărui segment;

    asigură retrimiterea oricăror segmente pentru care nu a fost primită confirmarea de livrare;

    vă permite să sortați segmentele de la destinație în ordinea corectă;

    previne congestionarea rețelei și controlează congestionarea dacă apare.

Instalare, control și încheiere a sesiunii

În modelul de referință OSI, mai multe aplicații pot folosi aceeași conexiune de transport în același timp. Funcția de transport de date este implementată segment cu segment. Aceasta înseamnă că diferite aplicații pot transmite date pe baza FIFO (primul intrat, primul ieșit). Segmentele pot fi destinate unui singur destinatar sau altora diferiți. Această regulă este uneori denumită mecanismul de multiplexare a dialogului aplicației de nivel superior (Figura 3).

Orez. 3. Diverse aplicații ale stratului superior al modelului OSI utilizează stratul de transport

Una dintre funcțiile principale ale stratului de transport este de a stabili o sesiune de conexiune cu un sistem peer-to-peer. Pentru a începe transferul de date, aplicațiile expeditor și destinatar își informează sistemele de operare să inițializeze conexiunea. Una dintre stații inițiază o conexiune, care trebuie să fie acceptată de cealaltă stație. Modulele sistemului de operare responsabile cu funcționarea protocoalelor comunică între ele prin trimiterea unui mesaj special și verifică posibilitatea transferului de date și pregătirea nodurilor finale.

După finalizarea procesului de sincronizare și stabilirea conexiunii, începe transferul de date. În timpul transferului, ambele posturi nu încetează să schimbe mesaje, ceea ce vă permite să vă asigurați că datele primite sunt corecte. În fig. 4 ilustrează o conexiune tipică între un emițător și un receptor. Primul mesaj de solicitare este necesar pentru a sincroniza nodurile finale. Al doilea și al treilea sunt necesare pentru a confirma cererea inițială de sincronizare; ele sincronizează și parametrii de conectare în sens invers. Ultima postare este confirmare(confirmare), care este utilizat pentru a informa destinatarul că ambele părți sunt gata să stabilească o conexiune. După stabilirea conexiunii, începe transferul de date.

Orez. 4. Procesul de stabilire a unei conexiuni cu un sistem peer-to-peer

În timpul transferului de date, supraîncărcarea poate apărea din două motive. Primul este că un computer rapid poate genera un flux de date mai rapid decât îl poate transmite rețeaua. Al doilea apare într-o situație în care mai multe computere trebuie să trimită simultan date unui singur destinatar. În acest caz, destinatarul se poate confrunta cu aglomerație, deși fiecare expeditor individual nu provoacă probleme.

În cazurile în care datagramele ajung prea repede și nodul final sau gateway-ul nu le poate procesa, acestea sunt stocate temporar în memorie. Dacă traficul de date nu scade, atunci nodul final sau gateway-ul, epuizându-și în cele din urmă resursele de memorie, va fi forțat să renunțe la toate datagramele ulterioare.

Pentru a preveni pierderea datelor, funcția de transport poate trimite expeditorului un mesaj informativ „dispozitivul nu este pregătit pentru a primi” ”. Acționând ca un semafor roșu, acest mesaj indicator îi semnalează expeditorului să nu mai trimită date. După ce destinatarul poate procesa din nou datele suplimentare, acesta trimite un mesaj indicator de trafic „dispozitiv gata să primească date” ”, care este ca un semafor verde. Primind un astfel de indicator, expeditorul poate relua transmiterea segmentelor.

După încheierea transferului de date, expeditorul trimite un semnal către receptor, care indică finalizarea transferului. Destinatarul confirmă deconectarea, după care conexiunea dintre mașini este întreruptă.

Recunoaștere în trei pași

TCP utilizează un algoritm orientat spre conexiune, deci trebuie stabilită o conexiune logică înainte de a transfera date. Pentru a stabili o conexiune de rețea între două stații de lucru, este necesară sincronizarea numerelor lor inițiale de secvență (ISN - Initial Sequence Number). Sincronizarea se realizează prin schimbul de segmente specializate care conţin bitul de control SYN (prescurtare de la ssincronizare) și ISN. Modulele care poartă bitul SYN sunt uneori denumite și mesaje SYN. Pentru a rezolva problema stabilirii, este necesar să se selecteze un mecanism adecvat pentru selectarea numerelor ISN prin stabilirea unei conexiuni inițiale pentru schimbul de numere ISN.

Sincronizarea necesită ca fiecare parte să își trimită ISN-ul inițial și să primească o confirmare sub forma unui ACK (prescurtare pentru confirmare) de la un alt participant la conexiune. În plus, fiecare parte trebuie să primească numărul ISN al partenerului de comunicare și să trimită o notificare ACK în acest sens. Secvența de schimb de mesaje între două noduri de rețea, A și B, este descrisă mai jos.

Acest mesaj este numit recunoaștere în trei etape (Trei- cale strângere de mână) (fig. 5).

Orez. 5. Recunoaștere în trei pași

1.AB SYN. ISN-ul meu inițial este X, ACK este 0, SYN este setat, dar ACK nu.

2.BUN ACK. Numărul dvs. de secvență este X + 1, ISN-ul meu este Y și biții SYN și ACK sunt setați.

3. AÎNAPOI. Numărul dvs. de secvență este Y + 1, numărul meu de secvență este X + 1, bitul ACK este setat și bitul SYN nu este setat.

Handshaking-ul în trei căi este un mecanism de conexiune asincronă care este necesar pentru a sincroniza numerele de secvență, deoarece astfel de numere sunt independente de un contor global virtual din rețea. Prin urmare, o rețea TCP utilizează diferite mecanisme pentru alocarea ISN-urilor. Una dintre ele este o strângere de mână în trei pași. Cu toate acestea, acest mecanism nu este destinat doar obținerii unui număr ISN. Folosind-o, dispozitivele finale fac schimb de informații despre dimensiunea ferestrei de transmisie a datelor, parametrul MTU și întârzierea transmisiei datelor în rețea. Destinatarul primului SYN nu are mijloacele pentru a determina dacă segmentul primit a fost un mesaj vechi sau nou în așteptare până la primirea următorului mesaj; singura excepție este atunci când receptorul stochează ultimul număr de secvență folosit pe conexiune (ceea ce nu este întotdeauna posibil). Astfel, receptorul trebuie să ceară expeditorului să verifice un astfel de mesaj SYN.

Mecanism de geam culisant

În cea mai generală formă de transfer de date fiabil orientat spre conexiune, pachetele de date trebuie să fie livrate la capătul receptor în aceeași ordine în care au fost trimise. Protocolul semnalează o eroare dacă orice pachet de date este pierdut, deteriorat, duplicat sau primit într-o ordine diferită. Cea mai simplă soluție la această problemă este să folosiți confirmarea de primire a destinatarului pentru fiecare segment de date.

Cu toate acestea, dacă expeditorul este forțat să aștepte o confirmare după trimiterea fiecărui segment, așa cum se arată în Fig. 6, rata de transmisie este redusă semnificativ cu această metodă. Întrucât se scurge un anumit interval de timp din momentul în care expeditorul termină trimiterea pachetului de date până la finalizarea procesării oricărei confirmări primite, acesta poate fi utilizat pentru a transmite o porțiune suplimentară de date. Este apelat numărul de pachete de date care pot fi trimise expeditorului fără a primi confirmare fereastră(fereastră).

TCP utilizează ceea ce este cunoscut sub numele de confirmări în așteptare; ele conțin un număr octet care este așteptat în continuare. Mecanismul ferestrei glisante este că dimensiunile ferestrelor sunt negociate dinamic în timpul sesiunii TCP. Mecanism de geam culisant este un mecanism de control al fluxului care cere receptorului să primească o confirmare de la expeditor după trimiterea unei anumite cantități de date.

Orez. 6. Dimensiunea ferestrei este una

Pentru a controla fluxul de date între două dispozitive, folosește TCP mecanism de control al fluxului(mecanism de control al fluxului). Destinatarul raportează expeditorului despre primirea datelor; primirea unei astfel de notificări vă permite să setați dimensiunea ferestrei. Fereastra definește numărul de octeți, numărați din numărul curent de confirmare, pe care dispozitivul TCP îi poate primi la un moment dat.

De exemplu, cu o dimensiune a ferestrei de 3, emițătorul poate transmite trei octeți către receptor. După aceea, trebuie să aștepte confirmarea destinatarului. Dacă destinatarul a primit trei octeți, el TREBUIE să trimită o confirmare expeditorului octeților. Expeditorul poate transmite apoi următorii trei octeți. Dacă destinatarul nu a primit trei octeți, de exemplu, din cauza depășirii tamponului, atunci nu va trimite o confirmare. Dacă expeditorul nu primește o confirmare, aceasta înseamnă că ultimii octeți trebuie retransmiși și rata de transmisie redusă.

Dimensiunea ferestrei TCP se poate modifica pe măsură ce un flux de date este transmis între două dispozitive de rețea. Fiecare confirmare trimisă de la receptor conține informații despre numărul de octeți pe care receptorul este capabil să îi primească. TCP prevede utilizarea unei așa-numite ferestre de control a congestiei, care este în mod normal egală cu fereastra dispozitivului destinatar, dar dimensiunea acesteia este redusă la jumătate dacă se pierde orice segment de date (de exemplu, din cauza congestiei rețelei). Acest mecanism vă permite să reduceți sau să măriți dimensiunea ferestrei după cum este necesar în procesul de gestionare a buffer-ului dispozitivului și de procesare a fluxului de date. O dimensiune mai mare a ferestrei permite transmiterea simultană a mai multor octeți.

Când expeditorul transmite trei octeți, trece la așteptarea unui semnal ACK pentru patru octeți. Dacă receptorul este capabil să proceseze un bloc de date de doi octeți, atunci el renunță la al treilea octet și îl desemnează ca următorul bloc de date așteptat. În acest caz, este indicată noua dimensiune a ferestrei, care este egală cu două. Expeditorul transmite următorii doi octeți, dar dimensiunea ferestrei este încă trei (să presupunem că dispozitivul poate procesa în continuare trei octeți în același timp). Receptorul solicită octetul numărul 5 și setează dimensiunea noii ferestre la doi.

Confirmare

Un mecanism de livrare fiabil asigură că un flux de date trimis de o stație va fi livrat printr-o altă legătură de date fără duplicare sau pierdere de date. Recunoașterea pozitivă cu retransmisie este o tehnică pentru a asigura livrarea fiabilă a fluxurilor de date. O confirmare pozitivă necesită ca destinatarul să comunice cu expeditorul trimițând înapoi un mesaj de confirmare după primirea datelor. Expeditorul înregistrează fiecare pachet pe care îl trimite și așteaptă confirmarea înainte de a trimite următorul pachet de date. În momentul trimiterii segmentului, expeditorul pornește și cronometrul și retransmite blocul de date dacă timpul stabilit de temporizator expiră înainte de a primi o confirmare.

În fig. 7 prezintă un expeditor care transmite pachetele 1, 2 și 3. Receptorul confirmă primirea pachetelor solicitând pachetul 4. Expeditorul, la primirea unei confirmări, trimite pachetele 4, 5 și 6. Dacă pachetul 5 nu este livrat destinatarului, acesta trimite o confirmare corespunzătoare solicitând o reîncercare.trimiterea pachetului 5. Expeditorul retrimite pachetul 5 și trebuie să primească confirmarea corespunzătoare pentru a continua transmiterea pachetului 7.

TCP impune secvența de segmente urmată de confirmare. Fiecărei datagrame i se atribuie un număr înainte de transmitere (Figura 8). După ce destinatarul a primit toate datagramele, acestea sunt asamblate într-un mesaj complet. TCP este responsabil pentru recuperarea datelor deteriorate, pierdute, duplicate sau necomandate care au fost transmise prin Internet. Mecanismul de recuperare funcționează prin atribuirea unui număr de secvență fiecărui octet transmis, la primirea căruia receptorul trebuie să trimită o confirmare (ACK). Dacă nu a fost primită nicio confirmare în intervalul de expirare, datele sunt transmise din nou de către expeditor. După ce octeții sunt livrați destinatarului, numerele lor de secvență sunt folosite pentru a reasambla mesajul din fragmente și pentru a elimina duplicatele. Datele deteriorate sunt recuperate folosind o sumă de control care este adăugată fiecărui segment transmis. Suma de control este verificată de destinatar, iar dacă nu se potrivește, datele corupte sunt eliminate.

Orez. 7. Dimensiunea ferestrei este de trei

Orez. 8. Numere de serie și confirmări

ProtocolTCP

TCP(Transmission Control Protocol - protocol de control al transmisiei) este un protocol de nivel de transport orientat spre conexiune care oferă transmisie de date fiabilă, full-duplex. TCP face parte din stiva de protocoale TCP/IP. Într-un mediu orientat spre conexiune, trebuie stabilită o conexiune între două computere pentru a începe transferul de date. TCP este responsabil pentru segmentarea mesajelor în pachete, reasamblarea lor de către destinatar și retransmiterea oricăror bucăți de date care nu au fost primite. Protocolul este, de asemenea, capabil să creeze circuite virtuale între aplicațiile utilizatorului final.

Servicii de nivel superior și protocoale care utilizează mecanisme TCP:

    FTP (File Transfer Protocol);

    HTTP (Hypertext Transfer Protocol);

    SMTP (Simple Mail Transfer Protocol);

Câmpurile segmentului TCP afișate pe diapozitiv sunt descrise mai jos.

Port expeditor - numărul portului apelant.

Port destinatar - numit numărul de port.

Număr de serie - numărul folosit pentru a plasa datele primite în ordinea corectă.

Număr de confirmare este numărul următorului octet TCP așteptat.

HLEN - numărul de cuvinte de 32!-biți din antet.

Câmp rezervat- toți biții sunt setați la 0.

Biți de cod- funcții de serviciu (de exemplu, configurarea și terminarea sesiunii).

Fereastră- numărul de octeți pe care expeditorul este dispus să-i accepte.

Verificați suma- suma de control calculată a antetului și a câmpurilor de date.

Indicator de date urgente- indică sfârşitul datelor urgente.

Parametrii- în prezent este definit un parametru: dimensiunea maximă a segmentului TCP.

Date- date de protocol de nivel superior.

ProtocolUDP

UDP (Utilizator Datagrama Protocol- protocol pentru transferul datagramelor utilizatorului), al cărui format de segment este afișat în diapozitiv, este un protocol de transport fără conexiune în stiva de protocoale TCP / IP. UDP este un protocol simplu care face schimb de datagrame fără confirmare și fără garanție de livrare. Simplitatea protocolului devine evidentă când se compară formatele de segment ale protocoalelor UDP și TCP. Când se utilizează UDP, gestionarea erorilor și retransmiterea datelor trebuie gestionate de protocolul de nivel superior. De exemplu, dacă transferul este întrerupt în timpul transferului de date prin TFTP, atunci numai operatorul uman poate re-descărca informațiile.

Lista de mai jos listează câmpurile segmentului UDP care este afișat pe diapozitiv

    Port expeditor - numărul portului apelant.

    Port destinatar - numit numărul de port.

    Lungime- numărul de octeți, inclusiv antetul și datele.

    Verificați suma- suma de control calculată a antetului și a câmpurilor de date.

    Date- date de protocol de nivel superior.

Protocolul UDP nu folosește un mecanism de fereastră glisantă, așa că trebuie asigurată fiabilitatea transmiterii datelor protocoale la nivel de aplicație(protocol de nivel de aplicație). UDP a fost conceput pentru aplicații care nu au nevoie să însireze segmente secvențiale împreună.

UDP este utilizat de următoarele servicii și protocoale de nivel superior:

    TFTP (Trivial File Transfer Protocol - cel mai simplu protocol de transfer de fișiere);

    SNMP (Simple Network Management Protocol);

    DHCP (Dynamic Host Configuration Protocol);

    DNS (Domain Name System).

Numerele portului de protocolTCPșiUDP

Pentru a transfera informații în straturile superioare, atât TCP, cât și UDP folosesc un număr de port (port) sau așa-numitul socket (socket). Numerele de port sunt folosite pentru a ține evidența diferitelor comunicații care se desfășoară în același timp în rețea.

Dezvoltatorii de aplicații au fost de acord să utilizeze numere de porturi rezervate, care sunt administrate de Autoritatea pentru Numerele Alocate de Internet (IANA). De exemplu, orice schimb de date FTP ar trebui să utilizeze porturile standard 20 (pentru date) și 21 (pentru control). Pentru interacțiunile de rețea care nu sunt asociate cu aplicații care au un număr de port binecunoscut, numerele de porturi sunt atribuite aleatoriu, dar sunt selectate dintr-un interval specific de valori - peste 1023. Unele porturi sunt rezervate în protocoalele TCP și UDP. Deși unele porturi sunt rezervate în protocoalele TCP și UDP, este posibil ca aplicațiile să nu fie codificate hard la aceste numere.

După cum se arată în diapozitiv, sistemul final folosește numărul portului pentru a selecta aplicația corespunzătoare. Numărul portului expeditorului este de obicei un număr mai mare de 1023 și este atribuit dinamic de gazda expeditorului. De exemplu, o gazdă încearcă să se conecteze la o altă gazdă utilizând FTP, trimițând pachete care conțin numărul portului TCP al destinatarului 21 (FTP) și generează în mod dinamic numărul portului expeditorului 1028. Această pereche de porturi (emițător și destinatar) determină unicitatea comunicării intre doua gazde.... Dacă aceeași gazdă inițiază o conexiune FTP la o a treia gazdă, atunci portul destinatar rămâne la 21, dar portul expeditor este selectat diferit de cel anterior (de exemplu, 1030) pentru a separa cele două sesiuni de comunicare.

Top articole similare