\itindbeg{three~way~handshake}
Il processo che porta a creare una connessione TCP è chiamato \textit{three
way handshake}; la successione tipica degli eventi (e dei
-\textsl{segmenti}\footnote{Si ricordi che il segmento è l'unità elementare di
+\textsl{segmenti}\footnote{si ricordi che il segmento è l'unità elementare di
dati trasmessa dal protocollo TCP al livello successivo; tutti i segmenti
hanno un header che contiene le informazioni che servono allo \textit{stack
TCP} (così viene di solito chiamata la parte del kernel che implementa il
sez.~\ref{sec:tcp_protocol_xxx}) con la quale ciascun capo della
comunicazione dichiara quanto spazio disponibile ha in memoria per i dati.
Questo è un numero a 16 bit dell'header, che così può indicare un massimo di
- 65535 byte;\footnote{Linux usa come massimo 32767 per evitare problemi con
+ 65535 byte;\footnote{in Linux il massimo è 32767 per evitare problemi con
alcune implementazioni che usano l'aritmetica con segno per implementare
lo stack TCP.} ma alcuni tipi di connessione come quelle ad alta velocità
(sopra i 45Mbit/sec) e quelle che hanno grandi ritardi nel cammino dei
spostare a sinistra il valore della finestra annunciata inserito nel
pacchetto). Con Linux è possibile indicare al kernel di far negoziare il
fattore di scala in fase di creazione di una connessione tramite la
- \textit{sysctl} \texttt{tcp\_window\_scaling} (vedi
- sez.~\ref{sec:sock_ipv4_sysctl}).\footnote{per poter usare questa
+ \textit{sysctl} \itindex{TCP~window~scaling} \texttt{tcp\_window\_scaling}
+ (vedi sez.~\ref{sec:sock_ipv4_sysctl}).\footnote{per poter usare questa
funzionalità è comunque necessario ampliare le dimensioni dei buffer di
ricezione e spedizione, cosa che può essere fatta sia a livello di sistema
- con le opportune \textit{sysctl} (vedi sez.~\ref{sec:sock_ipv4_sysctl}) che
- a livello di singoli socket con le relative opzioni (vedi
+ con le opportune \textit{sysctl} (vedi sez.~\ref{sec:sock_ipv4_sysctl})
+ che a livello di singoli socket con le relative opzioni (vedi
sez.~\ref{sec:sock_tcp_udp_options}).}
\item \textit{timestamp option}, è anche questa una nuova opzione necessaria
che viene dato alle connessioni caratterizzate da alta velocità o da ritardi
elevati. In ogni caso Linux supporta pienamente entrambe le opzioni.
+
\subsection{La terminazione della connessione}
\label{sec:TCP_conn_term}
\item[\errcode{ENOTSOCK}] il file descriptor non è associato ad un socket.
\item[\errcode{EACCES}] si è cercato di usare una porta riservata senza
sufficienti privilegi.
- \item[\errcode{EADDRNOTAVAIL}] Il tipo di indirizzo specificato non è
+ \item[\errcode{EADDRNOTAVAIL}] il tipo di indirizzo specificato non è
disponibile.
\item[\errcode{EADDRINUSE}] qualche altro socket sta già usando l'indirizzo.
\end{errlist}
implementazioni.
In Linux il significato di questo valore è cambiato a partire dal kernel 2.2
-per prevenire l'attacco chiamato \textit{syn flood}. Questo si basa
-sull'emissione da parte dell'attaccante di un grande numero di pacchetti SYN
-indirizzati verso una porta, forgiati con indirizzo IP fasullo\footnote{con la
- tecnica che viene detta \textit{ip spoofing}.} così che i SYN$+$ACK vanno
-perduti e la coda delle connessioni incomplete viene saturata, impedendo di
-fatto ulteriori connessioni.
+per prevenire l'attacco chiamato \index{SYN~flood} \textit{SYN flood}. Questo
+si basa sull'emissione da parte dell'attaccante di un grande numero di
+pacchetti SYN indirizzati verso una porta, forgiati con indirizzo IP
+fasullo\footnote{con la tecnica che viene detta \textit{ip spoofing}.} così
+che i SYN$+$ACK vanno perduti e la coda delle connessioni incomplete viene
+saturata, impedendo di fatto ulteriori connessioni.
Per ovviare a questo il significato del \param{backlog} è stato cambiato a
indicare la lunghezza della coda delle connessioni complete. La lunghezza
\item[\errcode{EAGAIN} o \errcode{EWOULDBLOCK}] il socket è stato impostato
come non bloccante (vedi sez.~\ref{sec:file_noblocking}), e non ci sono
connessioni in attesa di essere accettate.
- \item[\errcode{EPERM}] Le regole del firewall non consentono la connessione.
+ \item[\errcode{EPERM}] le regole del firewall non consentono la connessione.
\item[\errcode{ENOBUFS}, \errcode{ENOMEM}] questo spesso significa che
l'allocazione della memoria è limitata dai limiti sui buffer dei socket,
non dalla memoria di sistema.
- \item[\errcode{EINTR}] La funzione è stata interrotta da un segnale.
+ \item[\errcode{EINTR}] la funzione è stata interrotta da un segnale.
\end{errlist}
Inoltre possono essere restituiti gli errori di rete relativi al nuovo
socket, diversi a secondo del protocollo, come: \errval{EMFILE},
\func{fgets} ritornerà ed il client scriverà quanto immesso sul socket, per
poi passare a rileggere quanto gli viene inviato all'indietro dal server, che
a sua volta sarà inviato sullo standard output, che nel caso ne provoca
-l'immediatamente stampa a video.
+l'immediata stampa a video.
\subsection{La conclusione normale}