Materiale sui socket.
[gapil.git] / sockctrl.tex
index 3a5303499bc90207910970929b0bc5b801036dbb..f5a4c43c9d7dfaf1e5df63d7e73366e5a8204e70 100644 (file)
@@ -3983,12 +3983,12 @@ 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.
 \item[\procrelfile{/proc/sys/net/core}{rmem\_max}] imposta la dimensione
@@ -4002,16 +4002,16 @@ socket.  Quelli descritti anche nella pagina di manuale, accessibile con
 \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 +4041,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 +4086,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
@@ -4135,12 +4135,12 @@ di manuale accessibile con \texttt{man 7 ip}, sono i seguenti:
 \item[\procrelfile{/proc/sys/net/ipv4}{ip\_no\_pmtu\_disc}] permette di
   disabilitare per i socket \const{SOCK\_STREAM} la ricerca automatica della
   \itindex{Maximum~Transfer~Unit} \textit{Path MTU} (vedi
-  sez.~\ref{sec:net_lim_dim} e sez.~\ref{sec:sock_ipv4_options}); prende un
+  sez.~\ref{sec:net_lim_dim} e sez.~\ref{sec:sock_ipv4_options}). Prende un
   valore logico, e di default è disabilitato (cioè la ricerca viene eseguita).
 
   In genere si abilita questo parametro quando per qualche motivo il
   procedimento del \itindex{Maximum~Transfer~Unit} \textit{Path MTU discovery}
-  fallisce; dato che questo può avveniera a causa di router\footnote{ad
+  fallisce; dato che questo può avvenire a causa di router\footnote{ad
     esempio se si scartano tutti i pacchetti ICMP, il problema è affrontato
     anche in sez.~1.4.4 di \cite{FwGL}.} o interfacce\footnote{ad esempio se i
     due capi di un collegamento \textit{point-to-point} non si accordano sulla
@@ -4150,67 +4150,74 @@ di manuale accessibile con \texttt{man 7 ip}, sono i seguenti:
 
 \item[\procrelfile{/proc/sys/net/ipv4}{ip\_always\_defrag}] fa si che tutti i
   pacchetti IP frammentati siano riassemblati, anche in caso in successivo
-  immediato inoltro;\footnote{introdotto con il kernel 2.2.13, nelle versioni
+  immediato inoltro.\footnote{introdotto con il kernel 2.2.13, nelle versioni
     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. 
+    \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
+  \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
   in coda; quando questo valore viene raggiunta la coda viene ripulita fino al
-  valore \texttt{ipfrag\_low\_thresh}.
+  valore \texttt{ipfrag\_low\_thresh}. Prende un valore intero.
 
 \item[\procrelfile{/proc/sys/net/ipv4}{ipfrag\_low\_thresh}] soglia bassa
-  (specificata in byte) cui viene riportata la coda dei pacchetti IP
-  frammentati quando si raggiunge il valore \texttt{ipfrag\_high\_thresh}.
+  (specificata in byte) a cui viene riportata la coda dei pacchetti IP
+  frammentati quando si raggiunge il valore massimo dato da 
+  \texttt{ipfrag\_high\_thresh}. Prende un valore intero.
+
+\item[\procrelfile{/proc/sys/net/ipv4}{ip\_nonlocal\_bind}] se abilitato rende
+  possibile ad una applicazione eseguire \func{bind} anche su un indirizzo che
+  non è presente su nessuna interfaccia locale. Prende un valore logico e di
+  default è disabilitato.
 
-\item[\procrelfile{/proc/sys/net/ipv4}{ip\_nonlocal\_bind}] se abilitato
-  (prende un intero come valore logico) è possibile che una applicazione possa
-  collegarsi (con \func{bind} su un indirizzo non locale. Questo può risultare
-  utile per applicazioni particolari (come gli \textit{sniffer}) che hanno la
-  necessità di ricevere pacchetti anche non diretti agli indirizzi presenti
-  sulla macchina, ad esempio per intercettare il traffico per uno specifico
-  indirizzo che si vuole tenere sotto controllo.
+  Questo può risultare utile per applicazioni particolari (come gli
+  \textit{sniffer}) che hanno la necessità di ricevere pacchetti anche non
+  diretti agli indirizzi presenti sulla macchina, ad esempio per intercettare
+  il traffico per uno specifico indirizzo che si vuole tenere sotto
+  controllo. Il suo uso però può creare problemi ad alcune applicazioni.
 
 % \item[\texttt{neigh/*}] La directory contiene i valori 
 % TODO trattare neigh/* nella parte su arp, da capire dove sarà.
+
 \end{basedescript}
 
 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}}
-
-\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_abort\_on\_overflow}] Un valore
-  logico (disabilitato di default) che indica di azzerare le connessioni
-  quando il programma che le riceve è troppo lento ed incapace di accettarle.
-  Questo consente di recuperare le connessioni se si è avuto un eccesso dovuto
-  ad un qualche picco di traffico, ma ovviamente va a discapito dei client che
-  interrogano il server. Pertanto è da abilitare soltanto quando si è sicuri
-  che non è possibile ottimizzare il server in modo che sia in grado di
-  accettare connessioni più rapidamente.
-
-\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_adv\_win\_scale}] questa variabile
-  intera indica al kernel quanto spazio all'interno del buffer associato ad un
-  socket (quello impostato con \texttt{tcp\_rmem}) deve essere utilizzato per
-  la finestra del protocollo TCP (quello che costituisce la
-  \itindex{advertised~window} \textit{advertised window} annunciata all'altro
-  capo del socket) e quello che viene usato come buffer applicativo per
-  isolare la rete dalle latenze dell'applicazione. Il valore viene calcolato
-  secondo la formula $\texttt{buffer}/2^\texttt{tcp\_adv\_win\_scale}$ se
-  positivo o con
+\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
+  lento ed incapace di accettarle. Prende un valore logico ed è disabilitato
+  di default.  Questo consente di recuperare le connessioni se si è avuto un
+  eccesso dovuto ad un qualche picco di traffico, ma ovviamente va a discapito
+  dei client che interrogano il server. Pertanto è da abilitare soltanto
+  quando si è sicuri che non è possibile ottimizzare il server in modo che sia
+  in grado di accettare connessioni più rapidamente.
+
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_adv\_win\_scale}] indica al kernel
+  quale frazione del buffer associato ad un socket\footnote{quello impostato
+    con \procrelfile{/proc/sys/net/ipv4}{tcp\_rmem}.} deve essere utilizzata
+  per la finestra del protocollo TCP\footnote{in sostanza il valore che
+    costituisce la \itindex{advertised~window} \textit{advertised window}
+    annunciata all'altro capo del socket.} e quale come buffer applicativo per
+  isolare la rete dalle latenze dell'applicazione.  Prende un valore intero
+  che determina la suddetta frazione secondo la formula
+  $\texttt{buffer}/2^\texttt{tcp\_adv\_win\_scale}$ se positivo o con
   $\texttt{buffer}-\texttt{buffer}/2^\texttt{tcp\_adv\_win\_scale}$ se
-  negativo. Il valore di default è 2 che significa che al buffer
-  dell'applicazione viene riservato un quarto del totale.
+  negativo.  Il default è 2 che significa che al buffer dell'applicazione
+  viene riservato un quarto del totale.
 
-\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_app\_win}] il valore indica quanti
-  byte della finestra TCP vengono riservati per la bufferizzazione, valore è
-  il massimo fra la \itindex{Maximum~Segment~Size} MSS e
-  $\texttt{window}/2^\texttt{tcp\_app\_win}$. Un valore nullo significa che
-  non viene riservato nessuno spazio; il default è 31.
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_app\_win}] indica la frazione
+  della finestra TCP che viene riservata per gestire l'overhaed dovuto alla
+  bufferizzazione. Prende un valore valore intero che consente di calcolare la
+  dimensione in byte come il massimo fra la \itindex{Maximum~Segment~Size}
+  MSS e $\texttt{window}/2^\texttt{tcp\_app\_win}$. Un valore nullo significa
+  che non viene riservato nessuno spazio; il valore di default è 31.
 
 % vecchi, presumibilmente usati quando gli algoritmi di congestione non erano
 % modularizzabili 
@@ -4218,155 +4225,173 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti:
 % \item[\texttt{tcp\_bic\_low\_window}] 
 % \item[\texttt{tcp\_bic\_fast\_convergence}] 
 
-\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_dsack}] Un valore logico che
-  abilita il supporto, definito
-  nell'\href{http://www.ietf.org/rfc/rfc2884.txt}{RFC~2884}, per il
-  \textit{Duplicate SACK}.\footnote{si indica con SACK (\textit{Selective
-      Acknowledgement}) un'opzione TCP, definita
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_dsack}] abilita il supporto,
+  definito nell'\href{http://www.ietf.org/rfc/rfc2884.txt}{RFC~2884}, per il
+  cosiddetto \textit{Duplicate SACK}.\footnote{si indica con SACK
+    (\textit{Selective Acknowledgement}) un'opzione TCP, definita
     nell'\href{http://www.ietf.org/rfc/rfc2018.txt}{RFC~2018}, usata per dare
     un \textit{acknowledgement} unico su blocchi di pacchetti non contigui,
-    che consente di diminuire il numero di pacchetti scambiati.} Di default è
-  abilitato. 
-
-\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_ecn}] Un valore logico che abilita
-  il meccanismo della \textit{Explicit Congestion Notification} (in breve ECN)
-  nelle connessioni TCP. Questo è un meccanismo (è descritto in dettaglio
-  nell'\href{http://www.ietf.org/rfc/rfc3168.txt}{RFC~3168} mentre gli effetti
-  sulle prestazioni del suo utilizzo sono documentate
-  nell'\href{http://www.ietf.org/rfc/rfc2884.txt}{RFC~2884} ) che consente di
-  notificare quando una rotta o una rete è congestionata da un eccesso di
-  traffico, si può così essere avvisati e cercare rotte alternative oppure
-  diminuire l'emissione di pacchetti (in modo da non aumentare la
-  congestione). Di default è disabilitato.
+    che consente di diminuire il numero di pacchetti scambiati.} Prende un
+  valore logico e di default è abilitato.
+% TODO documentare o descrivere che cos'è il Duplicate SACK o
+% mettere riferimento nelle appendici
+
+
+\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} \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}
+    mentre gli effetti sulle prestazioni del suo utilizzo sono documentate
+    nell'\href{http://www.ietf.org/rfc/rfc2884.txt}{RFC~2884}.} si può così
+  essere avvisati e cercare rotte alternative oppure diminuire l'emissione di
+  pacchetti (in modo da non aumentare la congestione).
 
   Si tenga presente che se si abilita questa opzione si possono avere dei
   malfunzionamenti apparentemente casuali dipendenti dalla destinazione,
   dovuti al fatto che alcuni vecchi router non supportano il meccanismo ed
-  alla sua attivazione e scartano i relativi pacchetti, bloccando
-  completamente il traffico.\\
+  alla sua attivazione scartano i relativi pacchetti, bloccando completamente
+  il traffico.
+% TODO documentare o descrivere che cos'è l'Explicit Congestion Notification o
+% mettere riferimento nelle appendici
+
 
-\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_fack}] è un valore logico che
-  abilita il supporto per il \textit{TCP Forward Acknowledgement}, un
-  algoritmo per il controllo della congestione del traffico. Di default è
-  abilitato.
-% TODO documentare o descrivere che cos'è il TCP Forward Acknowledgement
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_fack}] abilita il supporto per il
+  \textit{TCP Forward Acknowledgement}, un algoritmo per il controllo della
+  congestione del traffico. Prende un valore logico e di default è abilitato.
+
+% TODO documentare o descrivere che cos'è il TCP Forward Acknowledgement o
+% mettere riferimento nelle appendici
 
 \item[\procrelfile{/proc/sys/net/ipv4}{tcp\_fin\_timeout}] specifica il numero
-  di secondi (il default è 60\footnote{nei kernel della serie 2.2.x era invece
-    di 120 secondi.}) da passare in stato \texttt{FIN\_WAIT2} nell'attesa
-  delle ricezione del pacchetto FIN conclusivo, passati quali il socket viene
-  comunque chiuso forzatamente.  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}.
-
-\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_frto}] è un valore logico che
-  abilita il supporto per l'algoritmo F-RTO, un algoritmo usato per la
-  ritrasmissione dei timeout del protocollo TCP, che diventa molto utile per
-  le reti wireless dove la perdita di pacchetti è usualmente dovuta a delle
-  interferenze radio, piuttosto che alla congestione dei router. Di default è
+  di secondi da passare in stato \texttt{FIN\_WAIT2} nell'attesa delle
+  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
+  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}.
+
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_frto}] abilita il supporto per
+  l'algoritmo F-RTO, un algoritmo usato per la ritrasmissione dei timeout del
+  protocollo TCP, che diventa molto utile per le reti wireless dove la perdita
+  di pacchetti è usualmente dovuta a delle interferenze radio, piuttosto che
+  alla congestione dei router. Prende un valore logico e di default è
   disabilitato.
 
-\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_keepalive\_intvl}] il numero di
-  secondi che deve trascorrere fra l'emissione di due successivi pacchetti di
-  test quando è abilitata la funzionalità del \textit{keepalive} (vedi
-  sez.~\ref{sec:sock_options_main}). Il valore di default è 75.
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_keepalive\_intvl}] indica il
+  numero di secondi che deve trascorrere fra l'emissione di due successivi
+  pacchetti di test quando è abilitata la funzionalità del \textit{keepalive}
+  (vedi sez.~\ref{sec:sock_options_main}). Prende un valore intero che di
+  default è 75.
 
-\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_keepalive\_probes}] il massimo
-  numero pacchetti di \textit{keepalive} (vedi
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_keepalive\_probes}] indica il
+  massimo numero pacchetti di \textit{keepalive} (vedi
   sez.~\ref{sec:sock_options_main}) che devono essere inviati senza ricevere
   risposta prima che il kernel decida che la connessione è caduta e la
-  termini. Il valore di default è 9.
-
-\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_keepalive\_time}] il numero di
-  secondi che devono passare senza traffico sulla connessione prima che il
-  kernel, qualora si sia utilizzata l'opzione \const{SO\_KEEPALIVE} (vedi
-  sez.~\ref{sec:sock_options_main}), inizi ad inviare pacchetti di pacchetti
-  di \textit{keepalive}. Il default è 7200, pari a due ore.
-
-\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_low\_latency}] un valore logico
-  che indica allo stack TCP del kernel di ottimizzare il comportamento per
-  ottenere tempi di latenza più bassi a scapito di valori più alti per
-  l'utilizzo della banda. Di default è disabilitato in quanto un maggior
-  utilizzo della banda è preferito, ma esistono applicazioni particolari in
-  cui la riduzione della latenza è più importante (ad esempio i cluster di
-  calcolo parallelo) in cui lo si può abilitare.
-
-\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_max\_orphans}] il numero massimo
-  di socket TCP ``\textsl{orfani}'' (vale a dire non associati a nessun file
-  descriptor) consentito nel sistema.\footnote{trattasi in genere delle
-    connessioni relative a socket chiusi che non hanno completato il processo
-    di chiusura.}  Quando il limite viene ecceduto la connessione orfana viene
-  resettata e viene stampato un avvertimento. Questo limite viene usato per
-  contrastare alcuni elementari attacchi di \textit{denial of service}.
-  Diminuire il valore non è mai raccomandato, in certe condizioni di rete può
-  essere opportuno aumentarlo, ma si deve tenere conto del fatto che ciascuna
-  connessione orfana può consumare fino a 64K di memoria del kernel. 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
-
-\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_max\_syn\_backlog}] un numero
-  intero che indica la lunghezza della coda delle connessioni incomplete, cioè
-  delle connessioni per le quali si è ricevuto un SYN di richiesta ma non
-  l'ACK finale del \itindex{three~way~handshake} \textit{three way handshake}
-  (si riveda quanto illustrato in sez.~\ref{sec:TCP_func_listen}).
+  termini. Prende un valore intero che di default è 9.
+
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_keepalive\_time}] indica il numero
+  di secondi che devono passare senza traffico sulla connessione prima che il
+  kernel inizi ad inviare pacchetti di pacchetti di
+  \textit{keepalive}.\footnote{ha effetto solo per i socket per cui si è
+    impostata l'opzione \const{SO\_KEEPALIVE} (vedi
+    sez.~\ref{sec:sock_options_main}.}  Prende un valore intero che di default
+  è 7200, pari a due ore.
+
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_low\_latency}] indica allo stack
+  TCP del kernel di ottimizzare il comportamento per ottenere tempi di latenza
+  più bassi a scapito di valori più alti per l'utilizzo della banda. Prende un
+  valore logico che di default è disabilitato in quanto un maggior utilizzo
+  della banda è preferito, ma esistono applicazioni particolari in cui la
+  riduzione della latenza è più importante (ad esempio per i cluster di
+  calcolo parallelo) nelle quali lo si può abilitare.
+
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_max\_orphans}] indica il numero
+  massimo di socket TCP ``\textsl{orfani}'' (vale a dire non associati a
+  nessun file descriptor) consentito nel sistema.\footnote{trattasi in genere
+    delle connessioni relative a socket chiusi che non hanno completato il
+    processo di chiusura.}  Quando il limite viene ecceduto la connessione
+  orfana viene resettata e viene stampato un avvertimento. Questo limite viene
+  usato per contrastare alcuni elementari attacchi di \textit{denial of
+    service}.  Diminuire il valore non è mai raccomandato, in certe condizioni
+  di rete può essere opportuno aumentarlo, ma si deve tenere conto del fatto
+  che ciascuna connessione orfana può consumare fino a 64K di memoria del
+  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.
+
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_max\_syn\_backlog}] indica la
+  lunghezza della coda delle connessioni incomplete, cioè delle connessioni
+  per le quali si è ricevuto un SYN di richiesta ma non l'ACK finale del
+  \itindex{three~way~handshake} \textit{three way handshake} (si riveda quanto
+  illustrato in sez.~\ref{sec:TCP_func_listen}).
 
   Quando questo valore è superato il kernel scarterà immediatamente ogni
-  ulteriore richiesta di connessione. Il valore di default (che è 256) viene
-  automaticamente portato a 1024 qualora nel sistema ci sia sufficiente
-  memoria (se maggiore di 128Mb) e ridotto a 128 qualora la memoria sia poca
-  (inferiore a 32Mb).\footnote{si raccomanda, qualora si voglia aumentare il
-    valore oltre 1024, di seguire la procedura citata nella pagina di manuale
-    di TCP, e modificare il valore della costante \texttt{TCP\_SYNQ\_HSIZE}
-    nel file \texttt{include/net/tcp.h} dei sorgenti del kernel, in modo che
-    sia $\mathtt{tcp\_max\_syn\_backlog} \ge \mathtt{16*TCP\_SYNQ\_HSIZE}$,
-    per poi ricompilare il kernel.}
-
-\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_max\_tw\_buckets}] questo valore
-  indica il numero massimo di socket in stato \texttt{TIME\_WAIT} consentito
-  nel sistema; viene impostato per prevenire semplici attacchi di
-  \textit{denial of service} ed inizializzato di default ad un valore del
-  parametro \texttt{NR\_FILE}, per poi essere aggiustato a seconda della
-  memoria presente. Se il valore viene superato il socket viene chiuso con la
-  stampa di un avviso.
+  ulteriore richiesta di connessione. Prende un valore intero; il default, che
+  è 256, viene automaticamente portato a 1024 qualora nel sistema ci sia
+  sufficiente memoria (se maggiore di 128Mb) e ridotto a 128 qualora la
+  memoria sia poca (inferiore a 32Mb).\footnote{si raccomanda, qualora si
+    voglia aumentare il valore oltre 1024, di seguire la procedura citata
+    nella pagina di manuale di TCP, e modificare il valore della costante
+    \texttt{TCP\_SYNQ\_HSIZE} nel file \texttt{include/net/tcp.h} dei sorgenti
+    del kernel, in modo che sia $\mathtt{tcp\_max\_syn\_backlog} \ge
+    \mathtt{16*TCP\_SYNQ\_HSIZE}$, per poi ricompilare il kernel.}
+
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_max\_tw\_buckets}] indica il
+  numero massimo di socket in stato \texttt{TIME\_WAIT} consentito nel
+  sistema. Prende un valore intero di default è impostato al doppio del valore
+  del parametro \texttt{NR\_FILE}, ma che viene aggiustato automaticamente a
+  seconda della memoria presente. Se il valore viene superato il socket viene
+  chiuso con la stampa di un avviso; l'uso di questa funzionalità consente di
+  prevenire alcuni semplici attacchi di \textit{denial of service}.
   
 
-\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_mem}] una tripletta di valori
-  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 utlizzerà 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}] il numero
+\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
-  una connessione che è stata già chiusa dalla nostra parte. Il valore di
-  default è 8 volte.
+  una connessione che è stata già chiusa dalla nostra parte. Prende un valore
+  intero che di default è 8.
 
-\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_reordering}] il numero massimo di
-  volte che un pacchetto può essere riordinato nel flusso di dati, prima che
-  lo stack TCP assuma che è andato perso e si ponga nello stato di
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_reordering}] indica il numero
+  massimo di volte che un pacchetto può essere riordinato nel flusso di dati,
+  prima che lo stack TCP assuma che è andato perso e si ponga nello stato di
   \textit{slow start} (si veda sez.~\ref{sez:tcp_protocol_xxx}) viene usata
   questa metrica di riconoscimento dei riordinamenti per evitare inutili
-  ritrasmissioni provocate dal riordinamento. Non è opportuno modificare
-  questo valore dal default che è 3.
+  ritrasmissioni provocate dal riordinamento. Prende un valore intero che di
+  default che è 3, e che non è opportuno modificare.
 
 \item[\procrelfile{/proc/sys/net/ipv4}{tcp\_retrans\_collapse}] in caso di
   pacchetti persi durante una connessione, per ottimizzare l'uso della banda
   il kernel cerca di eseguire la ritrasmissione inviando pacchetti della
   massima dimensione possibile; in sostanza dati che in precedenza erano stati
   trasmessi su pacchetti diversi possono essere ritrasmessi riuniti su un solo
-  pacchetto (o su un numero minore di pacchetti di dimensione maggiore).
+  pacchetto (o su un numero minore di pacchetti di dimensione
+  maggiore). Prende un valore logico e di default è abilitato.
 
 \item[\procrelfile{/proc/sys/net/ipv4}{tcp\_retries1}] imposta il massimo
   numero di volte che protocollo tenterà la ritrasmissione si un pacchetto su
@@ -4374,70 +4399,124 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti:
   coinvolgano anche il livello di rete. Passato questo numero di
   ritrasmissioni verrà fatto eseguire al livello di rete un tentativo di
   aggiornamento della rotta verso la destinazione prima di eseguire ogni
-  successiva ritrasmissione.
+  successiva ritrasmissione. Prende un valore intero che di default è 3.
 
 \item[\procrelfile{/proc/sys/net/ipv4}{tcp\_retries2}] imposta il numero di
   tentativi di ritrasmissione di un pacchetto inviato su una connessione già
   stabilita per il quale non si sia ricevuto una risposta di ACK (si veda
-  anche quanto illustrato in sez.~\ref{sec:TCP_server_crash}). Il valore
-  default è 15, che significa un tempo variabile fra 13 e 30 minuti; questo
-  non corrisponde a quanto richiesto
+  anche quanto illustrato in sez.~\ref{sec:TCP_server_crash}). Prende un
+  valore intero che di default è 15, il che comporta un tempo variabile fra 13
+  e 30 minuti; questo non corrisponde a quanto richiesto
   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}] un valore logico che
-  indica allo stack TCP del kernel di abilitare il comportamento richiesto
-  nell'\href{http://www.ietf.org/rfc/rfc1337.txt}{RFC~1337}; di default è
-  disabilitato, il che significa che alla ricezione di un segmento RST in stao
-  \texttt{TIME\_WAIT} il socket viene chiuso immediatamente senza attendere la
-  conclusione del periodo di \texttt{TIME\_WAIT}.
-
-\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_rmem}] 
-
-
-\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. 
+\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
+  logico e di default è disabilitato, il che significa che alla ricezione di
+  un segmento RST in stato \texttt{TIME\_WAIT} il socket viene chiuso
+  immediatamente senza attendere la conclusione del periodo di
+  \texttt{TIME\_WAIT}.
+
+\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:
+
+  \begin{itemize*}
+  \item il primo valore, chiamato \textit{min} nelle pagine di manuale, indica
+    la dimensione minima 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\_mem}) le allocazioni al di sotto di
+    questo limite abbiamo comunque successo.  Questo valore non viene comunque
+    ad incidere sulla dimensione del buffer di lettura 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 lettura 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 aknowledment} 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à ritasmesso 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 quasta 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.
+  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}] 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\_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}] 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\_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.
 
-\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_tw\_reuse}] 
+\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}
+  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 conessione non viene effettuata.
 
 \item[\procrelfile{/proc/sys/net/ipv4}{tcp\_vegas\_cong\_avoid}] 
 
@@ -4447,6 +4526,10 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti:
 
 \end{basedescript}
 
+
+
+
+
 % LocalWords:  socket sez dotted decimal resolver Domain Name Service cap DNS
 % LocalWords:  client fig LDAP Lightweight Access Protocol NIS Information Sun
 % LocalWords:  like netgroup Switch Solaris glibc libc uclib NSS tab shadow uid