Correzioni ortografiche e materiale su sysctl del TCP
[gapil.git] / sockctrl.tex
index 66f480f7657b2211a634cafe58fcfd6592fb36c2..a1f5d8be3e2497085a63db0678e424691518f3b6 100644 (file)
@@ -2107,7 +2107,7 @@ tab.~\ref{tab:sock_opt_socklevel} sul significato delle varie opzioni:
   \func{setsockopt} darà un errore di \errcode{ENOPROTOOPT}. 
 
 \item[\const{SO\_SNDLOWAT}] questa opzione imposta il valore che indica il
-  numero minimo di byte che devono essere presenti nel buffer di scrittura
+  numero minimo di byte che devono essere presenti nel buffer di trasmissione
   perché il kernel li invii al protocollo successivo, consentendo ad una
   \func{write} di ritornare o segnalando ad una \func{select} (vedi
   sez.~\ref{sec:TCP_sock_select}) che è possibile eseguire una scrittura.
@@ -2240,17 +2240,17 @@ tab.~\ref{tab:sock_opt_socklevel} sul significato delle varie opzioni:
   tipo \const{SOCK\_STREAM}.
 
 \item[\const{SO\_SNDBUF}] questa opzione imposta la dimensione del buffer di
-  uscita del socket. Prende per \param{optval} un intero indicante il numero
-  di byte. Il valore di default ed il valore massimo che si possono
+  trasmissione del socket. Prende per \param{optval} un intero indicante il
+  numero di byte. Il valore di default ed il valore massimo che si possono
   specificare come argomento per questa opzione sono impostabili
   rispettivamente tramite gli opportuni valori di \func{sysctl} (vedi
   sez.~\ref{sec:sock_sysctl}).
 
 \item[\const{SO\_RCVBUF}] questa opzione imposta la dimensione del buffer di
-  ingresso del socket. Prende per \param{optval} un intero indicante il numero
-  di byte. Il valore di default ed il valore massimo che si può specificare
-  come argomento per questa opzione sono impostabili tramiti gli opportuni
-  valori di \func{sysctl} (vedi sez.~\ref{sec:sock_sysctl}).
+  ricezione del socket. Prende per \param{optval} un intero indicante il
+  numero di byte. Il valore di default ed il valore massimo che si può
+  specificare come argomento per questa opzione sono impostabili tramiti gli
+  opportuni valori di \func{sysctl} (vedi sez.~\ref{sec:sock_sysctl}).
 
   Si tenga presente che nel caso di socket TCP, per entrambe le opzioni
   \const{SO\_RCVBUF} e \const{SO\_SNDBUF}, il kernel alloca effettivamente una
@@ -2267,7 +2267,7 @@ tab.~\ref{tab:sock_opt_socklevel} sul significato delle varie opzioni:
     \procrelfile{/proc/sys/net/ipv4}{tcp\_rmem} in
     \texttt{/proc/sys/net/ipv4}, vedi sez.~\ref{sec:sock_sysctl}.} indica la
   memoria effettivamente impiegata.  Si tenga presente inoltre che le
-  modifiche alle dimensioni dei buffer di ingresso e di uscita, per poter
+  modifiche alle dimensioni dei buffer di ricezione e trasmissione, per poter
   essere effettive, devono essere impostate prima della chiamata alle funzioni
   \func{listen} o \func{connect}.
 
@@ -2304,7 +2304,7 @@ tab.~\ref{tab:sock_opt_socklevel} sul significato delle varie opzioni:
 
 \item[\const{SO\_ATTACH\_FILTER}] questa opzione permette di agganciare ad un
   socket un filtro di pacchetti che consente di selezionare quali pacchetti,
-  fra tutti quelli ricevuti, verranno letti. Viene usato pincipalmente con i
+  fra tutti quelli ricevuti, verranno letti. Viene usato principalmente con i
   socket di tipo \const{PF\_PACKET} con la libreria \texttt{libpcap} per
   implementare programmi di cattura dei pacchetti, torneremo su questo in
   sez.~\ref{sec:packet_socket}.
@@ -2407,7 +2407,7 @@ comunicare con il server via rete.
 \end{figure}
 
 Abilitandola dopo un certo tempo le connessioni effettivamente terminate
-verrano comunque chiuse per cui, utilizzando ad esempio una \func{select}, se
+verranno comunque chiuse per cui, utilizzando ad esempio una \func{select}, se
 be potrà rilevare la conclusione e ricevere il relativo errore. Si tenga
 presente però che non può avere la certezza assoluta che un errore di
 \errcode{ETIMEDOUT} ottenuto dopo aver abilitato questa opzione corrisponda
@@ -2762,7 +2762,7 @@ sono definite in \file{netinet/ip.h}, ed accessibili includendo detto file.
     \const{IP\_DROP\_MEMBERSHIP}&         &$\bullet$&   &\struct{ip\_mreqn}& 
       Si sgancia da un gruppo di \textit{multicast}.\\
     \const{IP\_MULTICAST\_IF}   &         &$\bullet$&   &\struct{ip\_mreqn}& 
-      Omposta l'interfaccia locale di un socket \itindex{multicast} 
+      Imposta l'interfaccia locale di un socket \itindex{multicast} 
       \textit{multicast}.\\ 
    \hline
   \end{tabular}
@@ -3121,9 +3121,10 @@ quantit
     quando un programma di terminale invia un segmento TCP per ogni tasto
     premuto, 40 byte di intestazione di protocollo con 1 byte di dati
     trasmessi; per evitare situazioni del genere è stato introdotto
-    l'\textsl{algoritmo di Nagle}.}  Questo meccanismo è controllato da un
-  apposito algoritmo (detto \textsl{algoritmo di Nagle}, vedi
-  sez.~\ref{sez:tcp_protocol_xxx}). Il comportamento normale del protocollo
+    \index{algoritmo~di~Nagle} l'\textsl{algoritmo di Nagle}.}  Questo
+  meccanismo è controllato da un apposito algoritmo (detto
+  \index{algoritmo~di~Nagle} \textsl{algoritmo di Nagle}, vedi
+  sez.~\ref{sez:tcp_protocol_xxx}).  Il comportamento normale del protocollo
   prevede che i dati siano accumulati fintanto che non si raggiunge una
   quantità considerata adeguata per eseguire la trasmissione di un singolo
   segmento.
@@ -3134,10 +3135,11 @@ quantit
     richiesta HTTP.} in tal caso l'attesa introdotta dall'algoritmo di
   bufferizzazione non soltanto è inutile, ma peggiora le prestazioni
   introducendo un ritardo.  Impostando questa opzione si disabilita l'uso
-  dell'\textsl{algoritmo di Nagle} ed i dati vengono inviati immediatamente in
-  singoli segmenti, qualunque sia la loro dimensione.  Ovviamente l'uso di
-  questa opzione è dedicato a chi ha esigenze particolari come quella
-  illustrata, che possono essere stabilite solo per la singola applicazione.
+  \index{algoritmo~di~Nagle} dell'\textsl{algoritmo di Nagle} ed i dati
+  vengono inviati immediatamente in singoli segmenti, qualunque sia la loro
+  dimensione.  Ovviamente l'uso di questa opzione è dedicato a chi ha esigenze
+  particolari come quella illustrata, che possono essere stabilite solo per la
+  singola applicazione.
 
   Si tenga conto che questa opzione viene sovrascritta dall'eventuale
   impostazione dell'opzione \const{TCP\_CORK} (il cui scopo è sostanzialmente
@@ -3160,15 +3162,15 @@ quantit
 \item[\const{TCP\_CORK}] questa opzione è il complemento naturale di
   \const{TCP\_NODELAY} e serve a gestire a livello applicativo la situazione
   opposta, cioè quella in cui si sa fin dal principio che si dovranno inviare
-  grosse quantità di dati. Anche in questo caso l'\textsl{algoritmo di Nagle}
-  tenderà a suddividerli in dimensioni da lui ritenute
-  opportune,\footnote{l'algoritmo cerca di tenere conto di queste situazioni,
-    ma essendo un algoritmo generico tenderà comunque ad introdurre delle
-    suddivisioni in segmenti diversi, anche quando potrebbero non essere
-    necessarie, con conseguente spreco di banda.}  ma sapendo fin dall'inizio
-  quale è la dimensione dei dati si potranno di nuovo ottenere delle migliori
-  prestazioni disabilitandolo, e gestendo direttamente l'invio del nostro
-  blocco di dati in soluzione unica.
+  grosse quantità di dati. Anche in questo caso \index{algoritmo~di~Nagle}
+  l'\textsl{algoritmo di Nagle} tenderà a suddividerli in dimensioni da lui
+  ritenute opportune,\footnote{l'algoritmo cerca di tenere conto di queste
+    situazioni, ma essendo un algoritmo generico tenderà comunque ad
+    introdurre delle suddivisioni in segmenti diversi, anche quando potrebbero
+    non essere necessarie, con conseguente spreco di banda.}  ma sapendo fin
+  dall'inizio quale è la dimensione dei dati si potranno di nuovo ottenere
+  delle migliori prestazioni disabilitandolo, e gestendo direttamente l'invio
+  del nostro blocco di dati in soluzione unica.
 
   Quando questa opzione viene abilitata non vengono inviati segmenti di dati
   fintanto che essa non venga disabilitata; a quel punto tutti i dati rimasti
@@ -3983,35 +3985,36 @@ corrispondono a nessun nodo di \func{sysctl}.
 \subsection{I valori di controllo per i socket generici}
 \label{sec:sock_gen_sysctl}
 
-Nella directory \texttt{/proc/sys/net/core} sono presenti i file
+Nella directory \texttt{/proc/sys/net/core/} sono presenti i file
 corrispondenti ai parametri generici di \textit{sysctl} validi per tutti i
 socket.  Quelli descritti anche nella pagina di manuale, accessibile con
 \texttt{man 7 socket} sono i seguenti:
 
-\begin{basedescript}{\desclabelwidth{2.5cm}\desclabelstyle{\nextlinelabel}}
+\begin{basedescript}{\desclabelwidth{2.2cm}\desclabelstyle{\nextlinelabel}}
 \item[\procrelfile{/proc/sys/net/core}{rmem\_default}] imposta la dimensione
-  di default del buffer di lettura (cioè per i dati in ingresso) dei socket.
+  di default del buffer di ricezione (cioè per i dati in ingresso) dei socket.
 \item[\procrelfile{/proc/sys/net/core}{rmem\_max}] imposta la dimensione
-  massima che si può assegnare al buffer di ingresso dei socket attraverso
+  massima che si può assegnare al buffer di ricezione dei socket attraverso
   l'uso dell'opzione \const{SO\_RCVBUF}.
 \item[\procrelfile{/proc/sys/net/core}{wmem\_default}] imposta la dimensione
-  di default del buffer di scrittura (cioè per i dati in uscita) dei socket.
+  di default del buffer di trasmissione (cioè per i dati in uscita) dei
+  socket.
 \item[\procrelfile{/proc/sys/net/core}{wmem\_max}] imposta la dimensione
-  massima che si può assegnare al buffer di uscita dei socket attraverso l'uso
-  dell'opzione \const{SO\_SNDBUF}.
+  massima che si può assegnare al buffer di trasmissione dei socket attraverso
+  l'uso dell'opzione \const{SO\_SNDBUF}.
 \item[\procrelfile{/proc/sys/net/core}{message\_cost},
   \procrelfile{/proc/sys/net/core}{message\_burst}] contengono le impostazioni
   del \itindex{bucket~filter} \textit{bucket filter} che controlla l'emissione
-  di messaggi di avviso da parte kernel per eventi relativi a problemi sulla
-  rete, imponendo un limite che consente di prevenire eventuali attacchi di
-  \itindex{Denial~of~Service~(DoS)} \textit{Denial of Service} usando i
+  di messaggi di avviso da parte del kernel per eventi relativi a problemi
+  sulla rete, imponendo un limite che consente di prevenire eventuali attacchi
+  di \itindex{Denial~of~Service~(DoS)} \textit{Denial of Service} usando i
   log.\footnote{senza questo limite un attaccante potrebbe inviare ad arte un
     traffico che generi intenzionalmente messaggi di errore, per saturare il
     sistema dei log.}
 
   Il \itindex{bucket~filter} \textit{bucket filter} è un algoritmo generico
   che permette di impostare dei limiti di flusso su una quantità\footnote{uno
-    analogo viene usato nel \index{netfilter} \textit{netfilter} per imporre
+    analogo viene usato nel \itindex{netfilter} \textit{netfilter} per imporre
     dei limiti sul flusso dei pacchetti.}  senza dovere eseguire medie
   temporali, che verrebbero a dipendere in misura non controllabile dalla
   dimensione dell'intervallo su cui si media e dalla distribuzione degli
@@ -4041,7 +4044,7 @@ Oltre a questi nella directory \texttt{/proc/sys/net/core} si trovano altri
 file, la cui documentazione dovrebbe essere mantenuta nei sorgenti del kernel,
 nel file \texttt{Documentation/networking/ip-sysctl.txt}; la maggior parte di
 questi però non è documentato:
-\begin{basedescript}{\desclabelwidth{3.0cm}\desclabelstyle{\nextlinelabel}}
+\begin{basedescript}{\desclabelwidth{2.2cm}\desclabelstyle{\nextlinelabel}}
 \item[\procrelfile{/proc/sys/net/core}{dev\_weight}] blocco di lavoro
   (\textit{work quantum}) dello scheduler di processo dei pacchetti.
 
@@ -4086,7 +4089,7 @@ dello stesso (come ARP).
 I file che consentono di controllare le caratteristiche specifiche del
 protocollo IP in quanto tale, che sono descritti anche nella relativa pagina
 di manuale accessibile con \texttt{man 7 ip}, sono i seguenti:
-\begin{basedescript}{\desclabelwidth{3.5cm}\desclabelstyle{\nextlinelabel}}
+\begin{basedescript}{\desclabelwidth{2.2cm}\desclabelstyle{\nextlinelabel}}
 
 \item[\procrelfile{/proc/sys/net/ipv4}{ip\_default\_ttl}] imposta il valore di
   default per il campo TTL (vedi sez.~\ref{sec:IP_header}) di tutti i
@@ -4097,7 +4100,7 @@ di manuale accessibile con \texttt{man 7 ip}, sono i seguenti:
   valore di default è 64, e normalmente non c'è nessuna necessità di
   modificarlo.\footnote{l'unico motivo sarebbe per raggiungere macchine
     estremamente ``{lontane}'' in termini di \textit{hop}, ma è praticamente
-    impossible trovarne.} Aumentare il valore è una pratica poco gentile, in
+    impossibile trovarne.} Aumentare il valore è una pratica poco gentile, in
   quanto in caso di problemi di routing si allunga inutilmente il numero di
   ritrasmissioni.
 
@@ -4154,9 +4157,10 @@ di manuale accessibile con \texttt{man 7 ip}, sono i seguenti:
     precedenti questo comportamento poteva essere solo stabilito un volta per
     tutte in fase di compilazione del kernel con l'opzione
     \texttt{CONFIG\_IP\_ALWAYS\_DEFRAG}.} Prende un valore logico e di default
-  è disabilitato. Con i kernel dalla serie 2.4 in poi la deframmentazione viene
-  attivata automaticamente quando si utilizza il sistema del netfilter, e
-  questo parametro non è più presente. 
+  è disabilitato. Con i kernel dalla serie 2.4 in poi la deframmentazione
+  viene attivata automaticamente quando si utilizza il sistema del
+  \itindex{netfilter} \textit{netfilter}, e questo parametro non è più
+  presente.
 
 \item[\procrelfile{/proc/sys/net/ipv4}{ipfrag\_high\_thresh}] indica il limite
   massimo (espresso in numero di byte) sui pacchetti IP frammentati presenti
@@ -4187,7 +4191,7 @@ di manuale accessibile con \texttt{man 7 ip}, sono i seguenti:
 I file di \texttt{/proc/sys/net/ipv4} che invece fanno riferimento alle
 caratteristiche specifiche del protocollo TCP, elencati anche nella rispettiva
 pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti:
-\begin{basedescript}{\desclabelwidth{3.9cm}\desclabelstyle{\nextlinelabel}}
+\begin{basedescript}{\desclabelwidth{2.2cm}\desclabelstyle{\nextlinelabel}}
 
 \item[\procrelfile{/proc/sys/net/ipv4}{tcp\_abort\_on\_overflow}] indica al
   kernel di azzerare le connessioni quando il programma che le riceve è troppo
@@ -4239,7 +4243,7 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti:
 \item[\procrelfile{/proc/sys/net/ipv4}{tcp\_ecn}] abilita il meccanismo della
   \textit{Explicit Congestion Notification} (in breve ECN) nelle connessioni
   TCP. Prende valore logico che di default è disabilitato. La \textit{Explicit
-    Congestion Notification} \index{Explicit~Congestion~Notification} è un
+    Congestion Notification} \itindex{Explicit~Congestion~Notification} è un
   meccanismo che consente di notificare quando una rotta o una rete è
   congestionata da un eccesso di traffico,\footnote{il meccanismo è descritto
     in dettaglio nell'\href{http://www.ietf.org/rfc/rfc3168.txt}{RFC~3168}
@@ -4269,7 +4273,7 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti:
   ricezione del pacchetto FIN conclusivo, passati quali il socket viene
   comunque chiuso forzatamente.  Prende un valore intero che indica i secondi
   e di default è 60.\footnote{nei kernel della serie 2.2.x era il valore
-    utilizzato era invece di 120 secondi.} L'uso di questa opzione realizza
+    utilizzato era invece di 120 secondi.} L'uso di questa opzione realizza
   quella che in sostanza è una violazione delle specifiche del protocollo TCP,
   ma è utile per fronteggiare alcuni attacchi di
   \itindex{Denial~of~Service~(DoS)} \textit{Denial of Service}.
@@ -4322,7 +4326,8 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti:
   kernel. Prende un valore intero, il valore di default viene impostato
   inizialmente al valore del parametro del kernel \texttt{NR\_FILE}, e viene
   aggiustato a seconda della memoria disponibile.
-% TODO verificare la spiegazione di connessione orfana
+
+% TODO verificare la spiegazione di connessione orfana.
 
 \item[\procrelfile{/proc/sys/net/ipv4}{tcp\_max\_syn\_backlog}] indica la
   lunghezza della coda delle connessioni incomplete, cioè delle connessioni
@@ -4350,21 +4355,25 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti:
   prevenire alcuni semplici attacchi di \textit{denial of service}.
   
 
-\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_mem}] prende una tripletta di
-  valori interi usati dallo stack TCP per controllare il proprio uso della
-  memoria.  Il primo valore, chiamato \textit{low} nelle pagine di manuale,
-  indica il numero di pagine allocate sotto il quale non viene usato nessun
-  meccanismo di regolazione dell'uso della memoria.
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_mem}] viene usato dallo stack TCP
+  per gestire le modalità con cui esso utilizzerà la memoria. Prende una
+  tripletta di valori interi, che indicano un numero di pagine:
 
-  Il secondo valore, chiamato \textit{pressure} indica il numero di pagine
-  allocate passato il quale lo stack TCP inizia a moderare il suo consumo di
-  memoria. Si esce da questo stato di \textsl{pressione} sulla memoria quando
-  il numero di pagine scende sotto il precedente valore \textit{low}.
+  \begin{itemize*}
+  \item il primo valore, chiamato \textit{low} nelle pagine di manuale, indica
+    il numero di pagine allocate sotto il quale non viene usato nessun
+    meccanismo di regolazione dell'uso della memoria.
 
-  Il terzo valore, chiamato \textit{high} indica il numero massimo di pagine
-  che possono essere utilizzate dallo stack TCP/IP, e soprassiede ogni altro
-  valore specificato dagli altri limiti del kernel.
+  \item il secondo valore, chiamato \textit{pressure} indica il numero di
+    pagine allocate passato il quale lo stack TCP inizia a moderare il suo
+    consumo di memoria; si esce da questo stato di \textsl{pressione} sulla
+    memoria quando il numero di pagine scende sotto il precedente valore
+    \textit{low}.
 
+  \item il terzo valore, chiamato \textit{high} indica il numero massimo di
+    pagine che possono essere utilizzate dallo stack TCP/IP, e soprassiede
+    ogni altro valore specificato dagli altri limiti del kernel.
+  \end{itemize*}
 
 \item[\procrelfile{/proc/sys/net/ipv4}{tcp\_orphan\_retries}] indica il numero
   massimo di volte che si esegue un tentativo di controllo sull'altro capo di
@@ -4404,7 +4413,6 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti:
   nell'\href{http://www.ietf.org/rfc/rfc1122.txt}{RFC~1122} dove è indicato un
   massimo di 100 secondi, che però è un valore considerato troppo basso.
 
-
 \item[\procrelfile{/proc/sys/net/ipv4}{tcp\_rfc1337}] indica allo stack TCP
   del kernel di abilitare il comportamento richiesto
   nell'\href{http://www.ietf.org/rfc/rfc1337.txt}{RFC~1337}. Prende un valore
@@ -4416,77 +4424,153 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti:
 \item[\procrelfile{/proc/sys/net/ipv4}{tcp\_rmem}] viene usato dallo stack TCP
   per controllare dinamicamente le dimensioni dei propri buffer di ricezione,
   anche in rapporto alla memoria disponibile.  Prende una tripletta di valori
-  interi separati da spazi che indicano delle dimensioni in byte.
-
-  Il primo valore, chiamato \textit{min} nelle pagine di manuale, indica la
-  dimensione minima del buffer di ricezione; e di default vale 4Kb, ma in
-  sistemi con poca memoria viene automaticamente ridotto a \const{PAGE\_SIZE}.
-  Questo valore viene usato per assicurare che anche in situazioni di
-  pressione sulla memoria (vedi quanto detto per
-  \procrelfile{/proc/sys/net/ipv4}{tcp\_mem}) le allocazioni al di sotto di
-  questo limite abbiamo comunque successo.\footnote{e non ha a che fare con la
-    dimensione del buffer di lettura di un socket dichiarata con l'opzione
-    \const{SO\_RCVBUF}.}
-
-  Il secondo valore, denominato \textit{default} nelle pagine di manuale,
-  indica la dimensione di default del buffer di ricezione di un socket TCP.
-  Questo valore sovrascrive il default iniziale impostato con
-  \procfile{/proc/sys/net/core/mem\_default} che vale per qualunque
-  protocollo.
-
-  Il terzo valore, denominato \textit{max} nelle pagine di manuale
-
-
-\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_sack}] un valore logico che indica
-  al kernel di utilizzare il meccanismo del \textit{TCP selective
-    aknowledment} definito
-  nell'\href{http://www.ietf.org/rfc/rfc2018.txt}{RFC~2018}; di default è
-  abilitato.
-
-\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_stdurg}] 
-
-\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_synack\_retries}] un valore intero
-  che indica il numero massimo di volte che verrà ritasmesso il segmento
-  SYN/ACK nella creazione di una connessione (vedi
-  sez.~\ref{sec:TCP_conn_cre}). Il valore di default è 5, e non si deve
-  superare il valore massimo di 255.
-
-\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_syncookies}] un valore logico
-  che abilita i \textit{TCP syncookies},\footnote{per poter usare quasta
-    funzionalità è necessario avere abilitato l'opzione
-    \texttt{CONFIG\_SYN\_COOKIES} nella compilazione del kernel.} di default è
-  disabilitato. 
+  interi separati da spazi che indicano delle dimensioni in byte:
+
+  \begin{itemize*}
+  \item il primo valore, chiamato \textit{min} nelle pagine di manuale, indica
+    la dimensione minima in byte del buffer di ricezione; il default è 4Kb, ma
+    in sistemi con poca memoria viene automaticamente ridotto a
+    \const{PAGE\_SIZE}.  Questo valore viene usato per assicurare che anche in
+    situazioni di pressione sulla memoria (vedi quanto detto per
+    \procrelfile{/proc/sys/net/ipv4}{tcp\_rmem}) le allocazioni al di sotto di
+    questo limite abbiamo comunque successo.  Questo valore non viene comunque
+    ad incidere sulla dimensione del buffer di ricezione di un singolo socket
+    dichiarata con l'opzione \const{SO\_RCVBUF}.
+
+  \item il secondo valore, denominato \textit{default} nelle pagine di
+    manuale, indica la dimensione di default, in byte, del buffer di ricezione
+    di un socket TCP.  Questo valore sovrascrive il default iniziale impostato
+    per tutti i socket con \procfile{/proc/sys/net/core/mem\_default} che vale
+    per qualunque protocollo. Il default è 87380 byte, ridotto a 43689 per
+    sistemi con poca memoria. Se si desiderano dimensioni più ampie per tutti
+    i socket si può aumentare questo valore, ma se si vuole che in
+    corrispondenza aumentino anche le dimensioni usate per la finestra TCP si
+    deve abilitare il \itindex{TCP~window~scaling} \textit{TCP window scaling}
+    (di default è abilitato, vedi più avanti
+    \procrelfile{/proc/sys/net/ipv4}{tcp\_window\_scaling}).
+
+  \item il terzo valore, denominato \textit{max} nelle pagine di manuale,
+    indica la dimensione massima in byte del buffer di ricezione di un socket
+    TCP; il default è 174760 byte, che viene ridotto automaticamente a 87380
+    per sistemi con poca memoria. Il valore non può comunque eccedere il
+    limite generale per tutti i socket posto con
+    \procfile{/proc/sys/net/core/rmem\_max}. Questo valore non viene ad
+    incidere sulla dimensione del buffer di ricezione di un singolo socket
+    dichiarata con l'opzione \const{SO\_RCVBUF}.
+  \end{itemize*}
+
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_sack}] indica al kernel di
+  utilizzare il meccanismo del \textit{TCP selective acknowledgement} definito
+  nell'\href{http://www.ietf.org/rfc/rfc2018.txt}{RFC~2018}. Prende un valore
+  logico e di default è abilitato.
+
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_stdurg}] indica al kernel di
+  utilizzare l'interpretazione che viene data
+  dall'\href{http://www.ietf.org/rfc/rfc1122.txt}{RFC~1122} del puntatore dei
+  \textit{dati urgenti} (vedi sez.~\ref{sec:TCP_urgent_data}) in cui questo
+  punta all'ultimo byte degli stessi; se disabilitato viene usata
+  l'interpretazione usata da BSD per cui esso punta al primo byte successivo.
+  Prende un valore logico e di default è disabilitato, perché abilitarlo può
+  dar luogo a problemi di interoperabilità.
+
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_synack\_retries}] indica il numero
+  massimo di volte che verrà ritrasmesso il segmento SYN/ACK nella creazione di
+  una connessione (vedi sez.~\ref{sec:TCP_conn_cre}). Prende un valore intero
+  ed il valore di default è 5; non si deve superare il valore massimo di 255.
+
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_syncookies}] abilita i \textit{TCP
+    syncookies}.\footnote{per poter usare questa funzionalità è necessario
+    avere abilitato l'opzione \texttt{CONFIG\_SYN\_COOKIES} nella compilazione
+    del kernel.} Prende un valore logico, e di default è disabilitato. Questa
+  funzionalità serve a fornire una protezione in caso di un attacco di tipo
+  \index{SYN~flood} \textit{SYN flood}, e deve essere utilizzato come ultima
+  risorsa dato che costituisce una violazione del protocollo TCP e confligge
+  con altre funzionalità come le estensioni e può causare problemi per i
+  client ed il reinoltro dei pacchetti.
 
 \item[\procrelfile{/proc/sys/net/ipv4}{tcp\_syn\_retries}] imposta il numero
-  di tentativi (il default è 5) di ritrasmissione dei pacchetti SYN di inizio
-  connessione del \itindex{three~way~handshake} \textit{three way handshake}
-  (si ricordi quanto illustrato in sez.~\ref{sec:TCP_func_connect}). Il valore
-  non deve superare 255.
-
-\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_timestamps}] un valore logico che
-  attiva l'uso dei \textit{TCP timestamps}, definiti
-  nell'\href{http://www.ietf.org/rfc/rfc1323.txt}{RFC~1323}. Di default è
-  abilitato. 
-
-\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_tw\_recycle}] un valore logico,
-  disattivo di default, che abilita un rapido riutilizzo dei socket in stato
-  \texttt{TIME\_WAIT}. Non è opportuno abilitare questa opzione che può
-  causare problemi con il NAT.
-
-\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_tw\_reuse}] 
+  di tentativi di ritrasmissione dei pacchetti SYN di inizio connessione del
+  \itindex{three~way~handshake} \textit{three way handshake} (si ricordi
+  quanto illustrato in sez.~\ref{sec:TCP_func_connect}). Prende un valore
+  intero che di default è 5; non si deve superare il valore massimo di 255.
+
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_timestamps}] abilita l'uso dei
+  \textit{TCP timestamps}, come definiti
+  nell'\href{http://www.ietf.org/rfc/rfc1323.txt}{RFC~1323}. Prende un valore
+  logico e di default è abilitato.
+
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_tw\_recycle}] abilita il
+  riutilizzo rapido dei socket in stato \texttt{TIME\_WAIT}. Prende un valore
+  logico e di default è disabilitato. Non è opportuno abilitare questa opzione
+  che può causare problemi con il NAT.\footnote{il \textit{Network Address
+      Translation} è una tecnica, impiegata nei firewall e nei router, che
+    consente di modificare al volo gli indirizzi dei pacchetti che transitano
+    per una macchina, Linux la supporta con il \itindex{netfilter}
+    \textit{netfilter}, per maggiori dettagli si consulti il cap.~2 di
+    \cite{FwGL}.}
+
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_tw\_reuse}] abilita il riutilizzo
+  dello stato \texttt{TIME\_WAIT} quando questo è sicuro dal punto di vista
+  del protocollo. Prende un valore logico e di default è disabilitato. 
 
 \item[\procrelfile{/proc/sys/net/ipv4}{tcp\_window\_scaling}] un valore
-  logico, attivo di default, che abilita la funzionalità del \textit{TCP
-    window scaling} definita
-  dall'\href{http://www.ietf.org/rfc/rfc1323.txt}{RFC~1323}
-
-\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_vegas\_cong\_avoid}] 
+  logico, attivo di default, che abilita la funzionalità del
+  \itindex{TCP~window~scaling} \textit{TCP window scaling} definita
+  dall'\href{http://www.ietf.org/rfc/rfc1323.txt}{RFC~1323}. Prende un valore
+  logico e di default è abilitato. Come accennato in
+  sez.~\ref{sec:TCP_TCP_opt} i 16 bit della finestra TCP comportano un limite
+  massimo di dimensione di 64Kb, ma esiste una opportuna opzione del
+  protocollo che permette di applicare un fattore di scale che consente di
+  aumentarne le dimensioni. Questa è pienamente supportata dallo stack TCP di
+  Linux, ma se lo si disabilita la negoziazione del
+  \itindex{TCP~window~scaling} \textit{TCP window scaling} con l'altro capo
+  della connessione non viene effettuata.
+
+%\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_vegas\_cong\_avoid}] 
+% TODO: controllare su internet
+
+%\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_westwood}] 
+% TODO: controllare su internet
+
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_wmem}] viene usato dallo stack TCP
+  per controllare dinamicamente le dimensioni dei propri buffer di spedizione,
+  adeguandole in rapporto alla memoria disponibile.  Prende una tripletta di
+  valori interi separati da spazi che indicano delle dimensioni in byte:
+
+  \begin{itemize*}
+  \item il primo valore, chiamato \textit{min}, indica la dimensione minima in
+    byte del buffer di spedizione; il default è 4Kb. Come per l'analogo di
+    \procrelfile{/proc/sys/net/ipv4}{tcp\_rmem}) viene usato per assicurare
+    che anche in situazioni di pressione sulla memoria (vedi
+    \procrelfile{/proc/sys/net/ipv4}{tcp\_mem}) le allocazioni al di sotto di
+    questo limite abbiamo comunque successo.  Di nuovo questo valore non viene
+    ad incidere sulla dimensione del buffer di trasmissione di un singolo
+    socket dichiarata con l'opzione \const{SO\_SNDBUF}.
+
+  \item il secondo valore, denominato \textit{default}, indica la dimensione
+    di default in byte del buffer di spedizione di un socket TCP.  Questo
+    valore sovrascrive il default iniziale impostato per tutti i tipi di
+    socket con \procfile{/proc/sys/net/core/wmem\_default}. Il default è 87380
+    byte, ridotto a 43689 per sistemi con poca memoria. Si può aumentare
+    questo valore quando si desiderano dimensioni più ampie del buffer di
+    trasmissione per i socket TCP, ma come per il precedente
+    \procrelfile{/proc/sys/net/ipv4}{tcp\_rmem}) se si vuole che in
+    corrispondenza aumentino anche le dimensioni usate per la finestra TCP si
+    deve abilitare il \itindex{TCP~window~scaling} \textit{TCP window scaling}
+    con \procrelfile{/proc/sys/net/ipv4}{tcp\_window\_scaling}.
+
+  \item il terzo valore, denominato \textit{max}, indica la dimensione massima
+    in byte del buffer di spedizione di un socket TCP; il default è 128Kb, che
+    viene ridotto automaticamente a 64Kb per sistemi con poca memoria. Il
+    valore non può comunque eccedere il limite generale per tutti i socket
+    posto con \procfile{/proc/sys/net/core/wmem\_max}. Questo valore non viene
+    ad incidere sulla dimensione del buffer di trasmissione di un singolo
+    socket dichiarata con l'opzione \const{SO\_SNDBUF}.
+  \end{itemize*}
 
-\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_westwood}] 
+\end{basedescript}
 
-\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_wmem}] 
 
-\end{basedescript}
 
 % LocalWords:  socket sez dotted decimal resolver Domain Name Service cap DNS
 % LocalWords:  client fig LDAP Lightweight Access Protocol NIS Information Sun
@@ -4562,9 +4646,11 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti:
 % LocalWords:  metric EOPNOTSUPP mtu hwaddr ARPHRD interrupt DMA map qlen silly
 % LocalWords:  rename ifconf syndrome dell'ACK FTP ACCEPTFILTER advanced reno
 % LocalWords:  congestion control Networking cubic CUBIC highspeed HSTCP htcp
-% LocalWords:  HTCP hybla HYBLA scalable SCALABLE ifc req iflist access ntoa
-% LocalWords:  hop Selective Acknowledgement acknowledgement Explicit RTO stack
-% LocalWords:  Notification wireless denial pressure
+% LocalWords:  HTCP hybla HYBLA scalable SCALABLE ifc req iflist access ntoa Kb
+% LocalWords:  hop Selective acknowledgement Explicit RTO stack firewall
+% LocalWords:  Notification wireless denial pressure ATTACH DETACH
+% LocalWords:  libpcap discovery point l'overhaed min PAGE flood
+% LocalWords:  selective COOKIES NAT
 
 %%% Local Variables: 
 %%% mode: latex