Sunteți pe pagina 1din 9

Ministerul Educației, Culturii și Cercetării Universitatea Tehnică a Moldovei

Facultatea Calculatoare, Informatică și Microelectronică


Departamentul Ingineria Software și Automatică

RAPORT
la Lucrarea de Laborator Nr. 4
Programarea în Rețea
TEMA: Aplicație Client-Server TCP.

A elaborat: st. gr. TI-172, Adasanu Gicu


A verificat: asistent universitar, Buldumac Oleg

Chișinău 2020
Sarcina lucrării:
Să se creeze o aplicație Client-Server TCP utilizând Sockets API.
Mersul lucrării:
Pentru efectuare acestei lucrări de laborator ao fost create două aplicații desktop. Prima aplicație
va permite crearea unui client server localhost pe un anumit port, iar a doua aplicație va permite crearea
un client simplu care se va conecta la acest host și va permite să transmitem mesaje.
Vom crea un nou server socket utilizind libraria ServerSocket(Port).

Fig 1. Crearea serverului socket.

După crearea serverului vom crea un thread care ne va permite să ascultăm traficul TCP spre
server.

Fig 2. Thread pentru ascultarea traficului.

Iar în final metoda pentru încheierea socket-ului.

Fig 3. Metoda pentru închiderea sesiunei pentru socket.


Următorul pas va trebui să creăm o altă aplicație pentru client, unde vom ridica un simplu socket
cu adresa și portul socket-ului server.

Fig 4. Crea socket-ului client.

Vom crea un thread care va asculta traficul TCP de pe server și toată înformația o vom printa în
căsuța pentru mesaje.

Fig. 5. Thread pentru ascultarea traficului TCP din partea serverului.


Fi
g 6. Metodele care vor permite printarea în căsuță despre activitatea user-lor,
Fig 7. Metoda pentru a trimite un mesaj.

Testare:

Fig 8. Crearea serverului socket.

Fig 9. Conectarea a 2 user.


Fig 10. Trimiterea mesajelor de la un client la altul.

Fig 11. Traficul capturat în Wireshark.

Răspunsuri la întrebări:

• Ce este un protocol orientat pe conexiune?


Un protocol orientat către conexiune este un protocol de rețea utilizat pentru a stabili o sesiune de
comunicare a datelor în care dispozitivele finale folosesc protocoale preliminare pentru a stabili conexiuni
end-to-end și apoi fluxul de date ulterioare este livrat în modul de transfer secvențial.
• Ce tipuri de aplicații beneficiază în general de utilizarea protocolului TCP?
TCP este un protocol folosit de obicei de aplicații care au nevoie de confirmare de primire a
datelor, de exemplu:

 Web
 SSH, FTP, telnet
 SMTP, trimiterea de mail
 IMAP / POP, primind mail
• Cum TCP garantează că datele vor fi transmise cu succes?

TCP împarte datele (provenind din stratul de aplicație) în bucăți de dimensiuni corespunzătoare și
apoi trece aceste bucăți în rețea. Recunoaște pachetele primite, așteaptă confirmarea pachetelor pe care le-
a trimis și stabilește timpul pentru a retrimite pachetele dacă nu sunt primite la timp.

• Diferența dintre blocking si non-blocking sockets

Blocking este atunci când nu putem servi mai mult de o conexiune într-un singur thread. În mod
implicit, soclurile TCP funcționează în modul de blocare.

Non-blocking atunci când orice operație este executată imediat. I / O care nu blochează înseamnă
că cererea este pusă în coadă imediat și că funcția este returnată.

• Diferența dintre blocking multithreaded și non-blocking single thread socket

Non-Blocking single thread reprezinta procesul prin care se execută o cerere pe un singur thread și
nu este nevoie de a fi blocat, dar în blocking multithreaded exista mai multe threaduri insa se executa
secvential, unul cate unul, celelalte fiind puse in asteptare.

• Cum are loc procesul TCP Three Way Handshake?

TCP Three Way Handshake (numit și strângere de mână TCP; strângere de mână cu trei

mesaje) este metoda folosită de TCP pentru a stabili o conexiune TCP/IP printr-o rețea bazată pe
protocolul Internet.

1. Gazda A trimite un pachet TCP SYNchronize către gazda B


2. Gazda B primește SYN-ul lui A
3. Gazda B trimite o confirmare SYNchronize
4. Gazda A primește SYN-ACK B
5. Gazda A trimite ACKnowledge
6. Gazda B primește ACK.
7. Conexiunea de priză TCP este stabilită.
• Numiti cele 4 apeluri de sistem necesare pentru a crea un server TCP

Cele patru apeluri de sistem necesare pentru crearea unui server TCP sunt: socket, bind, listen și
accept. Fiecare are un scop specific și ar trebui apelat în ordinea de mai sus.

• Care este rolul metodei bind()?

Metoda bind() atribuie o adresă de protocol locală la un socket. Cu protocoalele Internet, adresa
este combinația unei adrese IPv4 sau IPv6 (32 biți sau 128 biți), împreună cu un număr de port TCP de 16
biți.

• Care este rolul metodei accept()?


Odată ce socket-ul a fost inițializat, serverului apeleaza accept și așteaptă noi conexiuni. Spre
deosebire de socket bind și listen, acest apel va fi blocat. adică dacă nu există conexiuni noi, acest apel se
va bloca și se va întoarce doar atunci când se conectează un client nou. Socketul TCP returnat este asociat
cu un tuplu (IP client, port client, IP server, port server) și va fi utilizat pentru toate pachetele viitoare
TCP primite și ieșite care se potrivesc cu această tuplu.

• Ce se întîmplă cînd apelați mai întîi connect() apoi bind()?

Funcția de connect() este utilizată de un client TCP pentru a stabili o conexiune cu un server TCP.
Clientul nu trebuie să apeleze metoda bind () în secțiune înainte de a apela metoda connect(), deoarece
kernel-ul va alege atât portul efemer(portu care nu durează mult), cât și IP-ul sursă, dacă este necesar.

• Ați avea vreodată nevoie să implementați un timeout într-un client sau server care utilizează
TCP?

Pentru implementarea unui timeout se prevăd următoarele cazuri:

 creșterea intervalului de timp pentru utilizatori la ambele capete ale unei conexiuni TCP îi permite
să supraviețuiască perioadelor prelungite fără conectivitate end-to-end;
 scăderea timpului de utilizare permite serverelor ocupate să-și anunțe în mod explicit clienții că
vor menține starea de conexiune doar pentru o perioadă scurtă de timp, fără conectivitate.
• Într-o conexiune TCP, clientul sau serverul trimite mai întâi datele?

Clientul trimite primul date către server, aceste date fiind cererea clinetului către server pentru a se
conecta și a executa o comandă dorită, fie ea de citire, sau de înscriere.

• Care este adresa de loopback IPv4 și care este rolul ei?

Adresa IP 127.0.0.1 este o adresă IPv4 cu scop special numită localhost sau adresă loopback.
Toate computerele folosesc această adresă ca fiind locală, și nu le permite să comunice cu alte dispozitive
așa cum o face o adresă IP reală. Ea se folosește de obicei pentru testare locală înainte de lansare.

• De unde știe un sistem de operare ce aplicație este responsabilă pentru un pachet primit din
rețea?

Un sistem de operare știe ce aplicație este responsabilă de pachetul primit din rețea datorită
informației care îl conține, astfel el în dependență de portul înscris în pachet el transmite către aplicația
respectivă care suportă astfel de port.

• Datele primite prin recv() au întotdeauna aceeași dimensiune cu datele trimise cu send()?

Nu, deoarece spre exemplu, send() trimite 25 de octeți și sunt scrise în rețea, dacă nu a apărut nicio
eroare, iar la recv(), putem primi oriunde de la 1 la 25 de octeți de date.

• Este acceptabil să închei executia programului dacă este detectată o eroare de rețea?

Nu, deoarece clientul poate sa incerce din nou sa se conecteze la retea. Incheierea executiei
programului ar costa mai multe resurse si timp decat incercarea de a se conecta din nou la retea.

• Puteți îmbunătăți performanța aplicației prin dezactivarea algoritmului Nagle?

Dezactivarea Nagle nu este foarte eficientă atunci când se efectuează o comunicare uni-
direcțională. În comunicarea bidirecțională, dezactivarea Nagle poate îmbunătăți debitul, deoarece
beneficiile eliminării întârzierilor se pot acumula, deoarece fiecare nod își poate trimite răspunsurile ușor
mai devreme, lăsând cealaltă parte să răspundă chiar mai devreme.

• Ce instrumente listează socket-urile TCP deschise în sistemele de operare Windows și


Linux?
 Pentru Windows putem folosi Command Prompt și comanda netstat.
 Pentru Linux putem folosi același terminal și următoarele comenzi:
o cat /etc/services
o netstat
o ss -lntu
o sudo lsof -i -P -n
• Tehnici de sincronizare a firelor de execuții

 Semaphore

 CountDownLatch

 CyclicBarrier

 Exchanger<V>

 Phaser

S-ar putea să vă placă și