Conan
Moderator
Inregistrat: acum 17 ani
Postari: 198
|
|
TCP Transmission Control Protocol
Parte integrantă a suitei TCP/IP, TCP reprezintă protocolul orientat conexiune care oferă transmisia datelor în modul full-duplex. în figura de mai jos este prezentată structura unui fragment TCP. înainte de a prezenta semnificaţia elementelor din figura următoare, facem câteva precizări. Prin intermediul TCP, calculatoarele schimbă informaţii între ele sub formă de segmente. Un segment este format dintr-un antet de 20 de octeţi urmat de zero sau mai mulţi octeţi de date. Programul decide singur care este mărimea acestor segmente ţinând cont de două situaţii. Fiecare segment nu trebuie să depăşească cei 65535 octeţi de informaţie utilă IP. Mai mult, fiecare reţea are o unitate maximă de transfer (MTU -maximum transfer unit) în care trebuie să încapă segmentul TCP. Un segment care ajunge într-o reţea cu o MTU mai mică decât dimensiunea sa, va fi fragmentat de către routerul respectivei reţele. Fiecare nou segment format prin fragmentare are propriile antete TCP şi IP, această situaţie conducând la creşterea gradului de încărcare a reţelei (fiecare segment primeşte un antet de 40 octeţi de informaţie suplimentară. Port sursă (16 biţi) şi port destinaţie (16 biţi) sunt câmpurile care identifică punctul iniţial şi pe cel final al conexiunii (în paragraful următor vom lămuri cum stă treaba cu porturile). Câmpul numărul secvenţei (32 biţi) este folosit pentru a asigura la destinaţie ordonarea corectă a informaţiilor. Numărul confirmării (32 biţi) se referă la următorul octet care este aşteptat la destinaţie. HLEN - lungimea antetului TCP indică numărul de cuvinte de 32 de biţi care sunt conţinute în antetul TCP, deoarece câmpul opţiuni este de lungime variabilă. Acest câmp este urmat de 6 biţi nefolosiţi (rezervaţi pentru dezvoltările ulterioare, dar de care nu a mai fost nevoie). Cele 6 câmpuri de un bit au următoarea semnificaţie: • URG (Urgent) - indică deplasamentul în octeţi faţă de numărul curent de secvenţă la care se află informaţia urgentă. Foloseşte îndeosebi la înlocuirea mesajelor de întrerupere. • ACK (Confirmare) - indică validitatea numărului de confirmare. Dacă acest bit are valoarea zero, este ignorat cîmpul număr de confirmare al segmentului respectiv. • PSH (Push - Forţare) - acest bit indică destinatarului să livreze aplicaţiei informaţia imediat ce este recepţionată, fără a o mai memora în buf fer. • RST (Reset) ~ desfiinţează o conexiune care a devenit inutilizabilă. • SYN (sincronizare) - stabileşte conexiunea între calculatoare. • FIN (Sfirşit) - termină o conexiune.
TCP-ul foloseşte pentru controlul fluxului informaţional ferestre glisante de dimensiune variabilă. Câmpul dimensiunea ferestrei indică numărul de octeţi care pot fi trimişi, începând cu octetul confirmat. Câmpul sumă de control este calculat pentru antet şi informaţia propriuzisă. Iniţial, acest câmp are valoarea zero, iar câmpul de date este completat cu un octet suplimentar nul, dacă lungimea sa este un număr impar. Proiectat pentru a suporta facilităţi ulterioare, câmpul opţiune este folosit mai ales pentru a indica lungimea maximă a unui segment TCP. În conformitate cu RFC 793, TCP a fost proiectat să realizeze următoarele funcţii: * multiplexare; * refacerea în urma erorilor; * controlul fluxului folosind ferestre ; * stabilirea şi închiderea conexiunilor; * transferul datelor. Multiplexarea Este procesul prin care un calculator decide cărei aplicaţii îi sunt destinate datele recepţionate şi face apel la conceptul de socket. în acest context, un socket este alcătuit din trei lucruri: adresa IP, protocolul de transport folosit şi un număr de port. Continuând exemplul cu care am început acest capitol, să presupunem că browser-ul de pe calculatorul lui Florin apelează serverul Web de pe calculatorul lui Marius. în acest caz, socketul de pe calculatorul lui Marius va fi: 10.1.1.2, TCP, 80. Socketul folosit de Fiorin va fi: 10.1.1.1, TCP, 1030. în general, calculatoarele care lansează cereri alocă în mod dinamic porturi mai mari de 1024, Portul este o componentă de bază a soketului folosită pentru a transmite informaţiile nivelurilor superioare şi pentru a urmări conversaţiile care au loc în acelaşi timp în reţea. Cei care dezvoltă aplicaţii sunt nevoiţi să folosească numărul porturilor definite prin RFC 17001. Conversaţiilor care nu folosesc aplicaţii cu porturi definite li se atribuie aleator numere pentru porturi. Acestea vor fi folosite ca adrese sursă şi destinaţie în cadrul segmentului TCP. Pentru a discuta despre o conexiune TCP, trebuie stabilită mai întâi o conexiune într-un soclu de pe maşina sursă şi unul de pe maşina destinaţie. Un soclu poate fi folosit pentru mai multe conexiuni. Numerele de port mai mici de 255 se numesc porturi general cunoscute şi sunt rezervate serviciilor standard. Porturile din intervalul 256-1023 sunt folosite de companiile publice care dezvoltă aplicaţii specifice, iar cele peste 1024 se atribuie aleator. Fiecare calculator face apel la un anumit port pentru a rula o aplicaţie. Calculatorul sursă foloseşte un port atribuit dinamic în momentul în care lansează o cerere, port care de obicei are un număr mai mare decât 1023. Lista completă cu numerele porturilor o găsiţi la adresa port-numbers. Noi le vom aminti aici doar pe cele mai uzuale:
Numărul portului TCP Descriere 20 FTP server (canalul pentru date) 21 FTP server (canalul de control) 23 Telnet server 53 Domain Name System 80 Web server (HTTP) 139 NetBIOS Refacerea în urma erorilor (siguranţă Pentru a oferi siguranţă în timpul transportului, TCP numără bytes folosind câmpurile numărul secvenţei şi numărul de confirmare din antetul segmentului. În figura următoare, câmpul confirmare (ACK) trimis de client către server atenţionează asupra următorului byte care trebuie recepţionat. Această situaţie se numeşte forward acknowledgment. Să presupunem însă că cel de-al doilea segment transmis de server conţine erori sau s-a pierdut pe drum. în acest caz, clientul transmite un câmp confirmare egal cu 2000, ceea ce înseamnă că aşteaptă bytes cu numărul 2000. Funcţia TCP a serverului Web poate reface datele prin retransmiterea segmentului cu numărul 2000 şi apoi aşteaptă confirmarea recepţiei celor 400 de bytes. Controlul fluxului folosind ferestre Câmpul dimensiunea ferestrei din cadrul segmentului TCP determină cantitatea de date care poate fi transmisă simultan, fără a fi nevoie de vreo confirmare. Despre ce este vorba. Când un calculator transmite numărul de bytes care determină mărimea ferestrei, trebuie să primească o confirmare din partea destinatarului înainte de a transmite alt mesaj. De exemplu, dacă mărimea ferestrei este 1, calculatorul sursă trebuie să confirme recepţia fiecărui segment înainte ca sursa să-1 transmită pe următorul. De aici rezultă o utilizare total ineficientă a lăţimii de bandă. Three-way handshake/open connection sau înţelegerea în trei paşi este folosită pentru a sincroniza conexiunea între calculatorul sursă şi cel destinaţie înainte ca datele să fie transferate între acestea. Schimbul numerelor care reprezintă secvenţa este folosit pentru a se asigura că datele ce se pierd din cauza problemelor care pot apărea în reţea pot fi recuperate. TCP foloseşte un sistem de confirmare în expectativă (tehnică care se numeşte sliding window - fereastră glisantă, adică numărul confirmării se referă la următorul octet care se aşteaptă a fi recepţionat. Partea glisantă din cadrul ferestrei se referă la faptul că mărimea ferestrei este negociată în mod dinamic în timpul unei sesiuni TCP. TCP ordonează segmentele într-o anumită secvenţă prin transmiterea către destinaţie a unei informări ce poartă denumirea de confirmare. Fiecare datagramă este numerotată înainte de a fi transmisă. La destinaţie, TCP reasamblează segmentele pentru a forma mesajul iniţial. Dacă numărul unei secvenţe lipseşte din cadrul seriei pe care trebuia să o recepţioneze staţia destinaţie, segmentul va fi retransmis. Segmentele a căror recepţie nu este confirmată într-o perioadă dată de timp trebuie retransmise. Stabilirea şi închiderea conexiunilor Stabilirea conexiunii se referă la procesul prin care sunt iniţializate câmpurile numărul secvenţei şi confirmare precum şi porturile care vor fi utilizate. Aici intră în acţiune, pe de o parte, câmpul SYN (sincronizează numerele de secvenţă care este componenta în baza căreia se iniţializează sesiunea TCP, iar pe de altă parte, câmpul ACK (câmpul confirmare este valid pentru acest antet). Până ce nu este iniţializat numărul secvenţei, câmpul confirmare nu joacă nici un rol. După cum se vede şi din fig. 5.1.2, în primul segment TCP nu este inclus nici un număr de confirmare, deoarece încă nu putem avea un astfel de număr valid sau, altfel spus, nu există nimic de confirmat. Pentru închiderea unei sesiuni intră în acţiune câmpul FIN prin care se atrage atenţia asupra faptului că una dintre părţi întrerupe sesiunea şi nu va fi nevoie de retransmiterea unor segmente.
Modificat de Conan (acum 16 ani)
|
|