system
Răspunde în limba română, în stilul Wikipedia, cat mai corect gramatical.
user
Ce detalii îmi poți spune despre Transmission Control Protocol?
assistant
Transmission Control Protocol (sau TCP, în traducere liberă din engleză Protocolul de Control al Transmisiei) este un protocol folosit de obicei de aplicații care au nevoie de confirmare de primire a datelor. Efectuează o conectare virtuală full duplex între două puncte terminale, fiecare punct fiind definit de către o adresă IP și de către un port TCP.

Transmission Control Protocol (TCP) este unul dintre protocoalele de bază ale suitei de protocoale Internet. TCP este unul dintre cele două componente originale ale suitei (celalalt fiind Protocolul Internet, sau IP), astfel încât întreaga suita este frecvent menționată ca stiva TCP/IP. În special, TCP oferă încredere, asigura livrarea ordonata a unui flux de octeți de la un program de pe un computer la alt program de pe un alt computer aflat în rețea. Pe lângă sarcinile sale de gestionare a traficului, TCP controlează mărimea segmentului de date, debitul de informație, rata la care se face schimbul de date, precum și evitarea congestionării traficului de rețea. Printre aplicațiile cele mai uzuale ce utilizează TCP putem enumera World Wide Web (WWW), posta electronica (e-mail) și transferul de fișiere (FTP).

Funcții oferite rețelei 

Protocolul corespunde nivelului transport din stiva TCP/IP.  TCP oferă un serviciu de comunicare la un nivel intermediar între un program de aplicație și Protocolul Internet (IP). Atunci când un program de aplicare  dorește sa trimită o bucată mare de date pe Internet, în loc sa fragmenteze datele în pachete IP de dimensiuni mici și sa emită o serie de cereri pentru protocolul IP, software-ul poate emite o cerere unică pentru TCP și sa lase protocolul TCP sa se ocupe de detaliile de manipulare.

Protocolul Internet (IP) se ocupa cu schimbul de blocuri de informații numite pachete. Un pachet este o secvență de octeți și constă dintr-un antet, urmată de  secțiunea de date propriu-zise. Antetul furnizează informații despre destinația pachetului și, opțional, informații de rutare utilizate pentru transmitere, până când acesta ajunge la destinația sa finală. Secțiunea de date conține informația necesara pe care IP trebuie sa o transmită.

Datorită congestiilor din rețea, încărcarea traficului, sau alte comportamente imprevizibile, pachetele IP pot fi pierdute, duplicate, sau livrate în alta ordine la destinație. TCP-ul detectează aceste probleme, solicita retransmisia pachetelor pierdute, rearanjează pachetele în ordine, ajută la minimizarea traficul din rețea în vederea reducerii apariției altor probleme. Odată ce la recepție, protocolul TCP termina de reasamblat secventa de octeți transmisa inițial, o pasează mai sus către programul de aplicație. Prin urmare, TCP va ascunde nivelului aplicație detaliile de transmise specifice nivelului inferior, rețea.

TCP este folosit pe scară largă de multe de aplicații de Internet cele mai populare, inclusiv a World Wide Web (WWW), E-mail, File Transfer Protocol (FTP), Secure Shell, de tip peer-to-peer file sharing, precum și unele aplicații media de streaming.

TCP este optimizat, mai degrabă, pentru livrarea exacta decât livrarea la timp a datelor, și prin urmare, TCP înregistrează uneori, întârzieri relativ mari de timp (de ordinul secundelor), în timpul de așteptare pentru unele mesaje ce sosesc în alta ordine sau pentru retransmisia de mesaje pierdute. Acesta nu este deosebit de potrivit pentru aplicații în timp real, cum ar fi Voice over IP. Pentru acest gen de aplicații, sunt recomandate protocoale cum ar fi Real-Time Transport Protocol (RTP), ce rulează peste User Datagram Protocol (UDP).

TCP este un serviciu de încredere care garantează livrarea unui flux de date trimis de la o gazdă la alta fără duplicarea sau pierderea de date. Din moment ce transferul de pachete de date pe rețea, nu este sigur, o tehnică cunoscută sub numele de confirmare pozitivă cu retransmitere este folosita pentru a garanta fiabilitatea transferurilor de pachete. Aceasta tehnica fundamentala,  consta în faptul ca receptorul răspunde cu un mesaj de confirmare (acknowledgement) de fiecare data când primește un pachet de date. Expeditorul păstrează o copie a fiecarui pachet trimis, și așteaptă confirmarea înainte de a trimite pachetul următor. Expeditorul păstrează, de asemenea, și un timer, atunci când pachetul a fost trimis, și va relua retransmiterea pachetului în cazul în care timer-ul expira iar confirmarea recepției întârzie sa apară. Contorul de timp este necesar în cazul în care un pachet se pierde sau este deteriorat.

TCP constă într-un set de reguli: pentru protocol, el este totdeauna asociat cu Protocolul Internet, iar pentru Protocolul Internet, reprezinta o metoda de a trimite datele, pe baza unui "sir de unități de mesaj" între calculatoare prin Internet. În timp ce IP-ul se ocupa doar de livrarea efectiva a datelor, TCP-ul are grija ca un mesaj sa fie împărțit în unități individuale de date, numite segmente, și sa tina evidenta segmentelor transmise, pentru dirijarea eficientă prin intermediul rețelei. De exemplu, când un fișier HTML este trimis de la un server web, stratul software TCP de pe acel server împarte secvența de octeți al acelui fișier, în segmente și le transmite în mod individual către stratul software IP (Nivelul Internet). Nivelul Internet încapsulează fiecare segment TCP într-un pachet IP prin adăugarea unui antet, care include (printre alte date) adresa IP destinație. Chiar dacă fiecare pachet are aceeași adresă de destinație, acestea pot fi rutate pe căi diferite prin intermediul rețelei. În cazul în care programul client pe computerul destinație le primește, stratul TCP (Nivelul Transport) reasamblează segmentele individuale asigurându-se totodată de ordonarea corecta și fără erori a acestora, înainte de a fi livrate către nivelul aplicație.

Mod de lucru 
Modul de operare al protocolului TCP implica existenta a trei faze. In prima faza, conexiunea trebuie stabilita (), urmând un proces de confirmare pe baza mai multor pași. Imediat ce conexiunea a fost realizata, urmează transferul datelor (). Odată ce transferul datelor s-a încheiat, conexiunea trebuie terminata () în ideea de a închide calea virtuala și de a elibera resursele hardware/software implicate în proces.

O conexiune TCP implica mai multe stări; câteva dintre ele sunt descrise mai jos:
 LISTEN - în cazul unui server se așteaptă o solicitare din partea unui client  
 SYN-SENT - se așteaptă din partea nodului pereche trimiterea unui segment TCP cu flagurile de SYN și ACK setate (starea este specifica clienților ce rulează protocolul TCP)
 SYN-RECEIVED -  așteaptă din partea nodului pereche a confirmării ca răspuns la confirmarea de conectare trimisa către acesta (stare specifica serverelor cu TCP)
 ESTABLISHED - portul este pregătit pentru a trimite/primi date către/dinspre nodul pereche
 FIN-WAIT-1 - Serverul așteaptă din partea procesul aplicație propriu, indicația de pregătire a închiderii conexiunii 
 FIN-WAIT-2 - clientul așteaptă recepția segmentului TCP de finalizare a conexiunii (aceasta indica faptul ca serverul va demara faza de închidere a conexiunii)
 CLOSE WAIT - serverul primește notificare din partea aplicației ca s-a încheiat procesul de închidere; el va informa clientul prin trimiterea unui segment de finalizare 
 LAST-ACK - Indica faptul ca serverul se afla în procesul de transmitere a segmentului de finalizare a conexiunii
 TIME-WAIT - reprezinta starea de așteptare a unui timp ceva mai lung (aproximativ 4 minute, în concordanta cu RFC 793) ca o metoda de asigurare a faptului ca nodul pereche a primit confirmarea de terminare a conexiunii.  
 CLOSED - Conexiunea este închisa

Porturile TCP 

TCP utilizează noțiunea de numere de port () pentru a identifica trimiterea și recepția aplicațiilor punctelor finale (end-points) de la o gazdă, sau a prizelor de Internet (Internet sockets). Fiecare parte a unei conexiuni TCP are asociat un număr de port pe 16 biți, fără semn (0-65535) rezervat pentru expedierea sau primirea datelor de aplicație. Sosirea pachetelor de date TCP sunt identificate ca aparținând unei anumite conexiuni TCP, după priza sa (), care este o combinație dintre adresa gazdei sursă, portul sursă, adresa gazdei destinație, și portul de destinație. Aceasta înseamnă că un computer server poate susține pentru o multitudine de clienți, simultan mai multe servicii per client, atât timp cât fiecare client are grija de a iniția simultan mai multe conexiuni către un port de destinație din porturi sursă diferite.

Numerele de porturi sunt clasificate în trei categorii de bază: bine-cunoscute, înregistrate, precum și dinamice/private. Porturile "bine-cunoscute" sunt atribuite de către Internet Assigned Numbers Authority (IANA) și sunt, de obicei utilizate de nivele sistem sau procese rădăcină. Aplicațiile bine cunoscute care rulează ca servere și care asculta în mod pasiv pentru conexiuni, de obicei folosesc aceste porturi. Câteva exemple includ: FTP (20 și 21), SSH (22), Telnet (23), SMTP (25) și HTTP (80). Porturile înregistrate sunt de obicei utilizate de aplicații  ale utilizatorului final, ca porturi sursa efemere atunci când contactează servere, dar pot identifica, de asemenea, anumite servicii care au fost înregistrate de către o terță parte. Porturile dinamice/private pot fi, de asemenea, utilizate de aplicații ale utilizatorul final, dar acest lucru este mai puțin frecvent. Porturile  dinamice/private nu-și au nici un sens în afara unei conexiuni TCP de aceea e ceva normal, sigur.

Bibliografie

Vezi și 
 TCP/IP
 SCTP
 Protocol de rețea

Protocoale de nivel transport