Exemplu de subiect de examen

Nota: Examenul va fi "cu cartile pe masa": este permisa folosirea oricarei documentatii.

1. Protocolul FTP

Nota: In cazul unui astfel de subiect, studentii vor fi anuntati in prealabil pentru a putea avea la ei documentatia completa (RFC-ul) protocolului FTP.

1.1. Fie o clasa C++ reprezentand, pentru client, o conexiune de control FTP:

class Ftp_control_connection {
public:
	  // Deschide conexiunea de cotrol catre serverul dat prin ip si port
	void open(long unsigned ip, int port);

	  // Citeste exact un raspuns de la server, il afiseaza la iesirea 
	  // standard, si returneaza codul
	int read_answer();

	  // Trimite o comanda, data ca sir de caractere, impreuna cu
	  // argumentul, dat tot ca sir de caractere (arg. nul inseamna
	  // fara argument; exemplu send_cmd("RETR", "abcd.zip")
	void send_cmd(const char* cmd, const char* arg=0);
};

Sa se implementeze functiile open, read_answer si send_cmd. Puteti adauga membrii privati dupa necesitati. Folositi de preferinta exceptii pentru raportarea erorilor.

1.2. O posibila implementare a unui client folosind clasa de la 1.1. este:

  // creaza socketul de date
  // listen(sock_date)
  // getsockname(sock_date, adr_sock_date)
  control.send_cmd("PORT", adr_sock_date)
  r=control.read_answer();
  if(r!=200){
    // eroare; iesire
  }
  control.send_cmd("RETR", nume_fis);
  r=control.read_answer();
  if(r!=150){
    // eroare(fisier inexistant sau alta problema)
  } else {
    // accept(sock_date)
    // citeste fisier
    r=control.read_answer();
    if(r==226){
	// ok, transfer reusit
    } else {
	// eroare la transfer
    }
  }
  

Explicati de ce daca apelul accept pe socketul de date s-ar face inaintea trimiterii comenzii "RETR" sau inaintea citirii raspunsului sau verificarii valorii 150 a raspunsului, programul ar fi gresit. Explicati ce probleme ar aparea sau ar putea sa apara in functionare.

1.3. Cand trebuie sa deschida serverul conexiunea de date:
a) la comanda PORT, inaintea trimiterii raspunsului
b) la comanda PORT, dupa trimiterea raspunsului
c) la comanda RETR, inaintea trimiterii raspunsului 150
d) la comanda RETR, dupa trimiterea raspunsului 150

Indicatie: Analizati erorile ce pot sa apara si codurile de raspuns posibile, conform protocolului, pentru fiecare comanda.

1.4. Pentru fiecare din situatiile de mai jos, enumerati conditiile ce pot determina serverul sa returneze insucces:
a) ca raspuns la comanda PORT
b) ca prim raspuns la comanda RETR
c) ca al doilea raspuns la comanda RETR (dupa un 150 initial)

2. Protocolul cu fereastra glisanta

2.1. La protocolul cu fereastra glisanta, in cadrul unei comunicatii directe punct la punct, presupunand o fereastra a emitatorului de k1 pachete si a receptorului de k2 pachete, ambele fixate si cunoscute, care este numarul minim de biti necesari pentru numarul de ordine al pachetului?

2.2. Se va completa ulterior... 2.2.


Retele de calculatoare
9 Dec 2003
Radu-Lucian LUPSA