1) il client quando vuole collegarsi con un server dice al sistema operativo di creare un socket s ,poi dice sempre al sistema operativo di collegare questa estremità s con il server che avrà un certo TCP e quindi si crea un tubo che va da s al welcoming socket nel quale il server invia una richiesta di connessione, ma il client è già connesso appunto da questo tubo con il server quindi perchè chiede una richiesta di connessione casomai dovrebbe chiedere una richiesta di invio dati?
evidenzio in rosso le imprecisioni solo ed esclusivamente a fine didattico.
"il server ha un certo indirizzo TCP";
il server non invia nessuna richiesta di connessione; è il client che invia richieste di connessione:
"perché chiede una richiesta": non capisco chi sia il soggetto della frase; è il client o il server? inoltre, nessuno chiede una richiesta; al massimo invia una richiesta.
detto questo, non sono certo di avere capito la domanda; credo che se uno cancella dalla propria testa la slide sopra indicata allora il dubbio alla radice di questa domanda sparisce;
cerco di spiegare in modo diverso lo stesso concetto.
noi ci troviamo al di sopra del livello TCP (cioè del sistema operativo, che tra il miliardo di cose che fa, implementa anche TCP); pertanto noi vediamo solo come si usa TCP, non come è implementato e funziona internamente; questo è il concetto fondamentale;
da ciò discende che noi vediamo solo le procedure con cui si interagisce con TCP (socket, bind, listen, etc); non vediamo come sono implementate queste procedure;
da ciò discende che noi non sappiamo come faccia il sistema operativo del client a creare una connessione TCP con il sistema operativo del server. sappiamo solo che il server ha eseguito socket, poi bind, listen e accept sul welcoming socket, poi si sveglia ed ha disposizione anche un communication socket; mentre il client ha eseguito socket, poi connect specificando l'indirizzo TCP del server; basta. non sappiamo altro.
quindi quando diciamo che "il client invia una richiesta al server", stiamo solo facendo una descrizione molto superficiale ed approssimata di ciò che probabilmente accade; ma è importante notare che questa descrizione non è necessaria per capire le caratteristiche del servizio TCP (cioè, ancora, come si usa; come è realizzato non lo sappiamo).
2) il sistema operativo del server una volta ricevuta la richiesta crea un nuovo socket s2 e quindi un nuovo tubo e lo collega con s corretto?
si
3) ma quindi anche il sistema operativo del server può aprire una connessione dopo la richiesta di connessione da parte del client, cioè non è solo il sistema operativo del client ma anche quello del server che apre una connessione corretto?
si. apre una connessione quando il processo server sta eseguendo accept e un qualche processo client in giro per il mondo sta eseguendo connect verso l'indirizzo TCP di quel processo server.
4) SOCKET= ESTREMITA' DI CONNESSIONE = PORTA ?
socket = estremità di connessione è vero;
socket = porta è falso, esattamente come è falso dire che calzino = pera; sono oggetti di tipo diverso, non ha senso chiedersi se sono uguali;
(osservazione didattica e non polemica) questa domanda è un esempio illuminante di quanto ho cercato di dire a lezione: è fondamentale abituarsi ad associare ad ogni entità il suo tipo; è necessario farlo sempre ed istintivamente;
cerco di rielaborare la domanda; intanto che cos'è una "porta"? noi abbiamo parlato di socket, connessioni, estremità di connessioni, port number; non abbiamo mai parlato di porta; se io ho parlato qualche volta di porta allora ho sbagliato;
le porte non esistono; esistono i numeri di porta; so che la faccenda è strana e controintuitiva, ma non sono io ad avere scelto la terminologia; peraltro, vi ho già fatto notare che ci sono i socket ma non ci sono i plug (cioè ci sono le prese ma non ci sono le spine);
talvolta, quando si parla in modo informale e gergale si usa il termine "porta" come sinonimo di "numero di porta"; visto che stiamo cercando di imparare, è importantissimo usare un linguaggio preciso (quindi non porta ma port number); quando uno ha imparato può permettersi di usare un linguaggio ambiguo, perché nella propria testa uno ha chiara la differenza (si spera); ma quando uno sta imparando, l'uso di un linguaggio ambiguo può danneggiare la comprensione ed introdurre ambiguità anche nella testa;
"è in ascolto sulla porta 80"; significa "è in attesa di richieste di apertura di connessione sul port number 80"; "è connesso sulla porta 80" significa "è connesso sul numero di porta (locale o remoto, dipende da cosa si sta dicendo) 80";