(quello del capo che ha eseguito la chiusura attiva) venga perso, chi esegue
la chiusura passiva non ricevendo risposta rimanderà un ulteriore FIN, per
questo motivo chi esegue la chiusura attiva deve mantenere lo stato della
(quello del capo che ha eseguito la chiusura attiva) venga perso, chi esegue
la chiusura passiva non ricevendo risposta rimanderà un ulteriore FIN, per
questo motivo chi esegue la chiusura attiva deve mantenere lo stato della
handshake} non si è ancora concluso. Questi socket sono tutti nello stato
\texttt{SYN\_RECV}.
\item La coda delle connessioni complete (\textit{complete connection queue}
handshake} non si è ancora concluso. Questi socket sono tutti nello stato
\texttt{SYN\_RECV}.
\item La coda delle connessioni complete (\textit{complete connection queue}
- che contiene un ingresso per ciascun socket per il quale il \textit{three
- way handshake} è stato completato ma ancora \func{accept} non è ritornata.
- Questi socket sono tutti nello stato \texttt{ESTABLISHED}.
+ che contiene un ingresso per ciascun socket per il quale il
+ \itindex{three~way~handshake} \textit{three way handshake} è stato
+ completato ma ancora \func{accept} non è ritornata. Questi socket sono
+ tutti nello stato \texttt{ESTABLISHED}.
delle connessioni incomplete, e poi risponde con il SYN$+$ACK. La voce resterà
nella coda delle connessioni incomplete fino al ricevimento dell'ACK dal
client o fino ad un timeout. Nel caso di completamento del
delle connessioni incomplete, e poi risponde con il SYN$+$ACK. La voce resterà
nella coda delle connessioni incomplete fino al ricevimento dell'ACK dal
client o fino ad un timeout. Nel caso di completamento del
spostata nella coda delle connessioni complete. Quando il processo chiama la
funzione \func{accept} (vedi sez.~\ref{sec:TCP_func_accept}) la prima voce
nella coda delle connessioni complete è passata al programma, o, se la coda è
spostata nella coda delle connessioni complete. Quando il processo chiama la
funzione \func{accept} (vedi sez.~\ref{sec:TCP_func_accept}) la prima voce
nella coda delle connessioni complete è passata al programma, o, se la coda è
server è occupato fra chiamate successive alla \func{accept} (per cui la coda
più occupata sarebbe quella delle connessioni completate), ma piuttosto quello
di gestire la presenza di un gran numero di SYN in attesa di concludere il
server è occupato fra chiamate successive alla \func{accept} (per cui la coda
più occupata sarebbe quella delle connessioni completate), ma piuttosto quello
di gestire la presenza di un gran numero di SYN in attesa di concludere il
Infine va messo in evidenza che, nel caso di socket TCP, quando un SYN arriva
con tutte le code piene, il pacchetto deve essere ignorato. Questo perché la
Infine va messo in evidenza che, nel caso di socket TCP, quando un SYN arriva
con tutte le code piene, il pacchetto deve essere ignorato. Questo perché la
\textit{three way handshake} la connessione è stabilita; la \func{connect}
ritornerà nel client\footnote{si noti che è sempre la \func{connect} del
client a ritornare per prima, in quanto questo avviene alla ricezione del
\textit{three way handshake} la connessione è stabilita; la \func{connect}
ritornerà nel client\footnote{si noti che è sempre la \func{connect} del
client a ritornare per prima, in quanto questo avviene alla ricezione del
- secondo segmento (l'ACK del server) del \textit{three way handshake}, la
- \func{accept} del server ritorna solo dopo un altro mezzo RTT quando il
- terzo segmento (l'ACK del client) viene ricevuto.} e la \func{accept} nel
-server, ed usando di nuovo \cmd{netstat} otterremmo che:
+ secondo segmento (l'ACK del server) del \itindex{three~way~handshake}
+ \textit{three way handshake}, la \func{accept} del server ritorna solo dopo
+ un altro mezzo RTT quando il terzo segmento (l'ACK del client) viene
+ ricevuto.} e la \func{accept} nel server, ed usando di nuovo \cmd{netstat}
+otterremmo che:
con dei server molto occupati. In tal caso, con una struttura del server
simile a quella del nostro esempio, in cui la gestione delle singole
connessioni è demandata a processi figli, può accadere che il \textit{three
con dei server molto occupati. In tal caso, con una struttura del server
simile a quella del nostro esempio, in cui la gestione delle singole
connessioni è demandata a processi figli, può accadere che il \textit{three
connessione abortita subito dopo, prima che il padre, per via del carico della
macchina, abbia fatto in tempo ad eseguire la chiamata ad \func{accept}. Di
nuovo si ha una situazione analoga a quella illustrata in
connessione abortita subito dopo, prima che il padre, per via del carico della
macchina, abbia fatto in tempo ad eseguire la chiamata ad \func{accept}. Di
nuovo si ha una situazione analoga a quella illustrata in
-client, e corrispondono ai tre pacchetti del
-\itindex{three~way~handshake}\textit{three way handshake}. L'output del
-comando riporta anche i numeri di sequenza iniziali, mentre la lettera
-\texttt{S} indica che per quel pacchetto si aveva il SYN flag attivo. Si noti
-come a partire dal secondo pacchetto sia sempre attivo il campo \texttt{ack},
-seguito dal numero di sequenza per il quale si da il ricevuto; quest'ultimo, a
-partire dal terzo pacchetto, viene espresso in forma relativa per maggiore
-compattezza. Il campo \texttt{win} in ogni riga indica la \textit{advertising
- window} di cui parlavamo in sez.~\ref{sec:TCP_TCP_opt}. Allora si può
-verificare dall'output del comando come venga appunto realizzata la sequenza
-di pacchetti descritta in sez.~\ref{sec:TCP_conn_cre}: prima viene inviato dal
-client un primo pacchetto con il SYN che inizia la connessione, a cui il
-server risponde dando il ricevuto con un secondo pacchetto, che a sua volta
-porta un SYN, cui il client risponde con un il terzo pacchetto di ricevuto.
+client, e corrispondono ai tre pacchetti del \itindex{three~way~handshake}
+\textit{three way handshake}. L'output del comando riporta anche i numeri di
+sequenza iniziali, mentre la lettera \texttt{S} indica che per quel pacchetto
+si aveva il SYN flag attivo. Si noti come a partire dal secondo pacchetto sia
+sempre attivo il campo \texttt{ack}, seguito dal numero di sequenza per il
+quale si da il ricevuto; quest'ultimo, a partire dal terzo pacchetto, viene
+espresso in forma relativa per maggiore compattezza. Il campo \texttt{win} in
+ogni riga indica la \textit{advertising window} di cui parlavamo in
+sez.~\ref{sec:TCP_TCP_opt}. Allora si può verificare dall'output del comando
+come venga appunto realizzata la sequenza di pacchetti descritta in
+sez.~\ref{sec:TCP_conn_cre}: prima viene inviato dal client un primo pacchetto
+con il SYN che inizia la connessione, a cui il server risponde dando il
+ricevuto con un secondo pacchetto, che a sua volta porta un SYN, cui il client
+risponde con un il terzo pacchetto di ricevuto.
fin tanto che non scriveremo una prima riga sul client; al momento in cui
facciamo questo si genera una sequenza di altri quattro pacchetti. Il primo,
dal client al server, contraddistinto da una lettera \texttt{P} che significa
fin tanto che non scriveremo una prima riga sul client; al momento in cui
facciamo questo si genera una sequenza di altri quattro pacchetti. Il primo,
dal client al server, contraddistinto da una lettera \texttt{P} che significa