Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pc:laboratoare:07 [2022/04/10 19:18]
vlad_andrei.badoiu [Sockets API for TCP]
pc:laboratoare:07 [2022/05/02 11:50] (current)
vlad_andrei.badoiu [Exerciții]
Line 29: Line 29:
  
  
-Pentru a intelege ​mai bine cum functioneaza ​protocolul TCP in parctic, vom studia o captura a mesajelor TCP trimise de catre chrome la accesarea unui website folosind [[https://​www.cloudshark.org/​captures/​88b6405ca75d?​filter=tcp.stream%20eq%200|CloudShark]]. Ne intereseaza ​doar pachetele TCP din captura, nu si cele cu TLS (folosit pentru encriptie peste TCP).+Pentru a înțelege ​mai bine cum funcționează ​protocolul TCP, vom studia o captura a mesajelor TCP trimise de către ​chrome la accesarea unui website folosind [[https://​www.cloudshark.org/​captures/​88b6405ca75d?​filter=tcp.stream%20eq%200|CloudShark]]. Ne interesează ​doar pachetele TCP din captura, nu și cele cu TLS (folosit pentru encriptie peste TCP).
  
-In primele 3 pachete TCP, putem observa operatia ​de three way handshake ​intre client (browser) ​si server. ​In acest caz, observam ca numarul ​de secventa atat la server ​cat si la client ​porneste ​de la 0 (SEQ = 0, ACK = 0). Urmatoarele ​pachete pe care le observam ​sunt datele trimise ​intre cele doua entitati. Putem observa ​cum numarul ​de secventa creste ​cu dimensiunea ​in bytes a mesajelor trimise.+În primele 3 pachete TCP, putem observă operația ​de three way handshake ​între ​client (browser) ​și server. ​În acest caz, observăm că numărul ​de secvență atât la server ​cât și la client ​pornește ​de la 0 (SEQ = 0, ACK = 0). Următoarele ​pachete pe care le observăm ​sunt datele trimise ​între ​cele două entități. Putem observă ​cum numărul ​de secvență crește ​cu dimensiunea ​în bytes a mesajelor trimise.
  
-In cadrul laboratorului de astazi, pentru a realiza conexiunea vom folosi ​functii ​precum **connect** ​si **accept**.+În cadrul laboratorului de astăzi, pentru a realiza conexiunea vom folosi ​funcții ​precum **connect** ​și **accept**.
  
  
Line 277: Line 277:
 ==== Exerciții ==== ==== Exerciții ====
  
-Pentru implementarea cerințelor,​ vom porni de la [[https://​gitlab.cs.pub.ro/​protocoale-de-comunicatie/​pcom-laboratoare-public/​-/​tree/​master/​lab7|acest schelet de cod]].+Pentru implementarea cerințelor,​ vom porni de la [[https://​gitlab.cs.pub.ro/​protocoale-de-comunicatie/​pcom-laboratoare-public/​-/​tree/​master/​lab7|acest schelet de cod]]. Treceți cu atenție peste scheletul de cod.
  
   - Scrieți o aplicație client-server TCP în care serverul se va comporta ca ecoul clientului (echo server). Într-o buclă, clientul citește un string de la tastatură, îl trimite serverului, așteaptă răspuns de la server și îl afișează. Serverul trimite înapoi clientului același lucru pe care îl primește de la el. Atât serverul cât și clientul primesc ca argumente adresa și portul serverului.   - Scrieți o aplicație client-server TCP în care serverul se va comporta ca ecoul clientului (echo server). Într-o buclă, clientul citește un string de la tastatură, îl trimite serverului, așteaptă răspuns de la server și îl afișează. Serverul trimite înapoi clientului același lucru pe care îl primește de la el. Atât serverul cât și clientul primesc ca argumente adresa și portul serverului.
-  - Folosidn ​Wireshark, ​interceptati ​pachetele TCP trimise de catre client si server. Ce semnifica primele trei pachete? Pentru ce sunt folosite primele trei pachete? De ce nu putem folosi doar doua? Care este numarul de secventa de la care incepe clientul sa trimita?+  - Folosind ​Wireshark, ​interceptați ​pachetele TCP trimise de catre client si server. Ce semnifica primele trei pachete? Pentru ce sunt folosite primele trei pachete? De ce nu putem folosi doar doua? Care este numarul de secventa de la care incepe clientul sa trimita?
   - Completați codul serverului de mai sus astfel încât să funcționeze cu 2 clienți (ambele apeluri de //​accept()//​ trebuie făcute înainte de primul //send()// sau //​recv()//​). Serverul va intermedia un fel de chat între cei doi clienți: va primi ceva de la un client și va trimite celuilalt, și reciproc. Trebuie avută atenție la ordinea operațiilor (scriere și citire de pe socket) atunci când rulați clienții (în laboratorul viitor, vom folosi în server un mecanism de multiplexare care va elimina acest inconvenient;​ clienții nu vor mai trebui să scrie și să citească de pe socket într-o anumită ordine).   - Completați codul serverului de mai sus astfel încât să funcționeze cu 2 clienți (ambele apeluri de //​accept()//​ trebuie făcute înainte de primul //send()// sau //​recv()//​). Serverul va intermedia un fel de chat între cei doi clienți: va primi ceva de la un client și va trimite celuilalt, și reciproc. Trebuie avută atenție la ordinea operațiilor (scriere și citire de pe socket) atunci când rulați clienții (în laboratorul viitor, vom folosi în server un mecanism de multiplexare care va elimina acest inconvenient;​ clienții nu vor mai trebui să scrie și să citească de pe socket într-o anumită ordine).
 +  - Împreună cu alți colegi din aceiași rețea (e.g. pe același WiFi), incercați să vă conectați între voi.
 +
 +
 +<​note>​
 +O posibila solutie a laboratorului se gaseste [[https://​ocw.cs.pub.ro/​courses/​_media/​pc/​laboratoare/​lab7_-_rezolvare.zip|aici]]
 +</​note>​
pc/laboratoare/07.1649607537.txt.gz · Last modified: 2022/04/10 19:18 by vlad_andrei.badoiu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0