TCP/IP este stiva de protocoale care stă la baza internetului și a majorității rețelelor de calculatoare. Acesta combină protocolul TCP, responsabil pentru livrarea fiabilă a datelor, și IP, care asigură rutarea pachetelor între noduri. Conform datelor IETF RFC 1180 (2024), stiva TCP/IP procesează peste 80% din traficul global de rețea, inclusiv aplicații mobile și web. Stiva de protocoale definește modul în care datele sunt împachetate, adresate și transmise între dispozitive în rețea.
Puncte cheie
TCP/IP (Transmission Control Protocol / Internet Protocol) este o stivă de protocoale dezvoltată în anii 1970 pentru ARPANET, care a devenit standardul de facto pentru rețeaua globală de internet. Acesta definește modul în care datele sunt împărțite în pachete, adresate, transmise și reasamblate la destinatar.
Arhitectura TCP/IP este construită pe principiul multistrat, unde fiecare strat abstractizează funcții specifice. Stratul de aplicație lucrează cu datele aplicației, stratul de transport asigură fiabilitatea, stratul de rețea se ocupă de rutare, iar stratul de legătură asigură transmisia prin mediul fizic. Modularitatea permite înlocuirea protocoalelor în cadrul unui strat fără modificarea straturilor adiacente.
În dezvoltarea mobilă, TCP/IP este utilizat de fiecare aplicație care efectuează solicitări de rețea. Bibliotecile URLSession, OkHttp, AFNetworking și Alamofire funcționează pe această stivă, ascunzând dezvoltatorului detaliile de împachetare și rutare a pachetelor. Cu toate acestea, înțelegerea TCP/IP este necesară pentru optimizarea performanței: configurarea parametrilor TCP prin URLSessionConfiguration permite gestionarea timeout-urilor, menținerea conexiunilor persistente HTTP și configurarea proxy-urilor pentru medii corporative.
Înțelegerea TCP/IP este necesară pentru diagnosticarea problemelor de rețea: dacă aplicația nu se poate conecta la server, problema poate fi la orice nivel al stivei — de la canalul fizic până la protocolul de aplicație. Instrumente precum tcpdump, Wireshark și Charles Proxy permit analiza traficului la fiecare nivel și identificarea blocajelor. Pentru dezvoltatorii mobili, Xcode oferă Network Debug Dashboard, iar Android Studio — Network Inspector pentru analiza conexiunilor TCP în timp real.
Modelul TCP/IP include patru straturi, fiecare îndeplinind funcții strict definite la transmiterea datelor. Înțelegerea acestei ierarhii este necesară pentru diagnosticarea problemelor de rețea și optimizarea aplicațiilor.
La nivelul stratului de aplicație funcționează protocoalele cu care aplicațiile interacționează direct: HTTP, HTTPS, FTP, SMTP, DNS, WebSocket. Acest strat formatează datele într-un format inteligibil pentru aplicație și le transmite stratului de transport. Dezvoltatorii de aplicații mobile lucrează tocmai la acest nivel prin intermediul bibliotecilor de rețea.
Stratul de transport asigură transmiterea datelor între aplicații pe dispozitive diferite. Protocoale principale: TCP (transmisie fiabilă cu confirmare) și UDP (transmisie rapidă fără garanții). TCP adaugă la date portul expeditorului și al destinatarului, gestionează ordinea pachetelor și controlează supraîncărcarea rețelei.
Stratul de rețea este implementat prin protocolul IP, care definește adresarea (IPv4, IPv6) și rutarea pachetelor. Fiecare pachet conține adresa IP a expeditorului și a destinatarului, iar routerele pe calea de transmisie decid următorul nod pe baza tabelelor de rutare. IPv4 utilizează adrese pe 32 de biți (aproximativ 4,3 miliarde), iar IPv6 — adrese pe 128 de biți, ceea ce rezolvă problema epuizării adreselor.
Stratul de legătură lucrează cu mediul fizic de transmisie: Ethernet, Wi-Fi, Bluetooth. Acest strat convertește pachetele în semnale și invers, gestionează accesul la mediul de transmisie prin adrese MAC și detectează erorile la nivel fizic prin sume de control ale cadrelor (FCS).
La nivelul stratului de legătură funcționează protocoale precum ARP (Address Resolution Protocol), care convertește adresele IP în adrese MAC ale dispozitivelor din rețeaua locală, și PPP (Point-to-Point Protocol), utilizat în conexiunile VPN și rețelele mobile de transmisie a datelor.
| Strat | Protocoale | Funcție |
|---|---|---|
| Aplicație | HTTP, HTTPS, DNS, FTP, WebSocket | Formarea datelor aplicației |
| Transport | TCP, UDP | Transmiterea între aplicații, controlul erorilor |
| Rețea | IP, ICMP, ARP | Rutarea și adresarea pachetelor |
| Legătură | Ethernet, Wi-Fi, PPP | Transmiterea prin mediul fizic |
TCP (Transmission Control Protocol) este unul dintre principalele protocoale ale stratului de transport. Acesta asigură livrarea fiabilă, ordonată și verificabilă a fluxului de octeți între aplicații. Înainte de transmiterea datelor, TCP stabilește o conexiune printr-un handshake triplu (three-way handshake).
Handshake-ul triplu (three-way handshake) începe cu trimiterea de către client a pachetului SYN. Serverul răspunde cu un pachet SYN-ACK, confirmând primirea. Clientul finalizează handshake-ul cu un pachet ACK, după care începe transmiterea datelor. Acest proces garantează că ambele părți sunt pregătite pentru schimbul de date și sincronizate în ceea ce privește numerele de secvență.
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('example.com', 80))
sock.send(b'GET / HTTP/1.1\r\nHost: example.com\r\n\r\n')
response = sock.recv(4096)
print(response.decode())
sock.close()
În exemplu, se creează un socket TCP de tip SOCK_STREAM, care execută automat handshake-ul triplu la apelarea connect. Metoda send trimite o solicitare HTTP, recv primește răspunsul. După finalizare, close trimite un pachet FIN pentru închiderea corectă a conexiunii.
Să examinăm un exemplu de server TCP în Python care acceptă mai mulți clienți prin fire de execuție. Fiecare conexiune este procesată într-un fir separat, permițând deservirea simultană a mai multor clienți fără blocarea buclei principale.
import socket
import threading
def handle_client(conn, addr):
print(f'Client conectat: {addr}')
with conn:
while True:
data = conn.recv(1024)
if not data:
break
conn.sendall(data.upper())
print(f'Client {addr} deconectat')
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(('0.0.0.0', 9090))
server.listen(5)
print('Server TCP pornit pe portul 9090')
while True:
conn, addr = server.accept()
thread = threading.Thread(target=handle_client, args=(conn, addr))
thread.start()
Serverul TCP procesează fiecare conexiune într-un fir separat, apelând accept într-o buclă infinită. Funcția handle_client primește datele, le transformă în majuscule și le trimite înapoi prin sendall. La terminarea buclei recv (când clientul a închis conexiunea), firul se încheie și socketul se închide automat. În aplicațiile mobile, o astfel de lucrare la nivel scăzut cu socket-uri nu este utilizată direct — bibliotecile HTTP mobile gestionează conexiunile prin pool-uri de fire și reutilizează automat conexiunile TCP.
Alegerea între TCP și UDP este una dintre deciziile cheie în proiectarea interacțiunii de rețea. TCP garantează livrarea, ordinea și integritatea datelor cu prețul unor întârzieri suplimentare. UDP sacrifică fiabilitatea pentru o întârziere minimă și o încărcare mai mică a canalului.
| Caracteristică | TCP | UDP |
|---|---|---|
| Conexiune | Stabilește (handshake) | Nu stabilește |
| Fiabilitate | Garantează livrarea | Nu garantează |
| Ordinea pachetelor | Ordonează | Nu ordonează |
| Viteză | Mai mică | Mai mare |
| Utilizare | Web, email, fișiere | Streaming, jocuri, DNS |
Pentru aplicațiile mobile, alegerea protocolului depinde de scenariu: REST-API și încărcarea datelor necesită TCP, iar apelurile video și jocurile online beneficiază de viteza UDP. Unele aplicații combină ambele protocoale — TCP pentru gestionare și UDP pentru fluxul media. Protocolul modern QUIC, care funcționează peste UDP și este utilizat în HTTP/3, combină avantajele ambelor abordări și este deja suportat pe iOS și Android prin URLSession în mod automat.
Să examinăm un exemplu de client TCP în Python cu gestionarea erorilor și timeout. Această abordare este utilizată în aplicațiile mobile pentru o conexiune fiabilă la server.
import socket
import sys
def tcp_client(host, port):
try:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(10)
sock.connect((host, port))
print(f'Conectat la {host}:{port}')
return sock
except socket.error as err:
print(f'Eroare de conectare: {err}')
sys.exit(1)
sock = tcp_client('api.example.com', 443)
sock.close()
Funcția tcp_client primește host și port, creează un socket cu un timeout de 10 secunde și încearcă să se conecteze. În caz de eroare de conectare — de exemplu, server indisponibil sau blocaj de firewall — se aruncă o excepție cu descrierea problemei. În aplicațiile mobile, timeout-ul de conectare este critic: prea scurt duce la erori false în rețelele lente, prea lung duce la înghețarea interfeței. Valoarea recomandată pentru rețelele mobile este de 10–15 secunde pentru timeoutIntervalForRequest și 30–60 secunde pentru timeoutIntervalForResource în configurația URLSession.
Întrebări frecvente
IP este responsabil pentru rutare — livrarea pachetului de la expeditor la destinatar prin noduri intermediare. TCP asigură asamblarea fiabilă a datelor: controlează ordinea, verifică integritatea și solicită retransmiterea pachetelor pierdute. Împreună formează stiva TCP/IP.
TCP/IP nu utilizează un port fix — portul este atribuit de aplicație. Porturi standard: 80 (HTTP), 443 (HTTPS), 22 (SSH), 25 (SMTP). Portul 443 este principalul pentru traficul web securizat în aplicațiile mobile.
Conexiunea TCP este un canal logic între două aplicații, stabilit printr-un handshake triplu (SYN, SYN-ACK, ACK). Conexiunea este identificată prin perechea (adresă IP, port) a expeditorului și destinatarului. Handshake-ul garantează că ambele părți sunt pregătite pentru schimbul de date.
Da, TCP/IP funcționează în rețelele locale (LAN) fără acces la internet. Dispozitivele se conectează prin Wi-Fi Direct, Bluetooth PAN sau Ethernet și schimbă date prin adrese IP locale. TCP/IP local este utilizat în dispozitive IoT și aplicații peer-to-peer.
TCP este mai lent din cauza mecanismelor suplimentare: handshake triplu înainte de transmisie, confirmarea fiecărui pachet, retrimiterea segmentelor pierdute, controlul congestiei. UDP trimite datagrame fără aceste verificări, ceea ce reduce întârzierea cu prețul unor pierderi posibile.
Rezumat
Vom dezvolta o aplicație mobilă la cheie
IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.
Citiți și