Esempio di copia con {{{splice}}} e fine della trattazione della stessa.
[gapil.git] / sockctrl.tex
index c5bfafc116399574e9ff88cf5e9d0a7be4721558..fc4a614d999ef24884a7e91837d871705f2f79b5 100644 (file)
@@ -85,19 +85,19 @@ funzioni di librerie utilizzate dai programmi, vale la pena fare una
 panoramica generale.  Originariamente la configurazione del \textit{resolver}
 riguardava esclusivamente le questioni relative alla gestione dei nomi a
 dominio, e prevedeva solo l'utilizzo del DNS e del file statico
-\file{/etc/hosts}.
+\conffile{/etc/hosts}.
 
 Per questo aspetto il file di configurazione principale del sistema è
-\file{/etc/resolv.conf} che contiene in sostanza l'elenco degli indirizzi IP
-dei server DNS da contattare; a questo si affianca il file
-\file{/etc/host.conf} il cui scopo principale è indicare l'ordine in cui
-eseguire la risoluzione dei nomi (se usare prima i valori di \file{/etc/hosts}
-o quelli del DNS). Tralasciamo i dettagli relativi alle varie direttive che
-possono essere usate in questi file, che si trovano nelle rispettive pagine di
-manuale.
+\conffile{/etc/resolv.conf} che contiene in sostanza l'elenco degli indirizzi
+IP dei server DNS da contattare; a questo si affianca il file
+\conffile{/etc/host.conf} il cui scopo principale è indicare l'ordine in cui
+eseguire la risoluzione dei nomi (se usare prima i valori di
+\conffile{/etc/hosts} o quelli del DNS). Tralasciamo i dettagli relativi alle
+varie direttive che possono essere usate in questi file, che si trovano nelle
+rispettive pagine di manuale.
 
 Con il tempo però è divenuto possibile fornire diversi sostituti per
-l'utilizzo delle associazione statiche in \file{/etc/hosts}, inoltre oltre
+l'utilizzo delle associazione statiche in \conffile{/etc/hosts}, inoltre oltre
 alla risoluzione dei nomi a dominio ci sono anche altri nomi da risolvere,
 come quelli che possono essere associati ad una rete (invece che ad una
 singola macchina) o ai gruppi di macchine definiti dal servizio
@@ -107,16 +107,17 @@ NIS,\footnote{il \textit{Network Information Service} 
   \textit{netgroup}) varie macchine, centralizzando i servizi di definizione
   di utenti e gruppi e di autenticazione, oggi è sempre più spesso sostituito
   da LDAP.} o come quelli dei protocolli e dei servizi che sono mantenuti nei
-file statici \file{/etc/protocols} e \file{/etc/services}.  Molte di queste
-informazioni non si trovano su un DNS, ma in una rete locale può essere molto
-utile centralizzare il mantenimento di alcune di esse su opportuni server.
-Inoltre l'uso di diversi supporti possibili per le stesse informazioni (ad
-esempio il nome delle macchine può essere mantenuto sia tramite
-\file{/etc/hosts}, che con il DNS, che con NIS) comporta il problema
-dell'ordine in cui questi vengono interrogati.\footnote{con le implementazioni
-  classiche i vari supporti erano introdotti modificando direttamente le
-  funzioni di libreria, prevedendo un ordine di interrogazione predefinito e
-  non modificabile (a meno di una ricompilazione delle librerie stesse).}
+file statici \conffile{/etc/protocols} e \conffile{/etc/services}.  Molte di
+queste informazioni non si trovano su un DNS, ma in una rete locale può essere
+molto utile centralizzare il mantenimento di alcune di esse su opportuni
+server.  Inoltre l'uso di diversi supporti possibili per le stesse
+informazioni (ad esempio il nome delle macchine può essere mantenuto sia
+tramite \conffile{/etc/hosts}, che con il DNS, che con NIS) comporta il
+problema dell'ordine in cui questi vengono interrogati.\footnote{con le
+  implementazioni classiche i vari supporti erano introdotti modificando
+  direttamente le funzioni di libreria, prevedendo un ordine di interrogazione
+  predefinito e non modificabile (a meno di una ricompilazione delle librerie
+  stesse).}
 
 \itindbeg{Name~Service~Switch}
 Per risolvere questa serie di problemi la risoluzione dei nomi a dominio
@@ -169,21 +170,21 @@ tab.~\ref{tab:sys_NSS_classes}.
   \label{tab:sys_NSS_classes}
 \end{table}
 
-Il sistema  del \textit{Name Service Switch} è controllato dal  contenuto del
-file \file{/etc/nsswitch.conf}; questo contiene una riga\footnote{seguendo una
-  convezione  comune per  i  file  di configurazione  le  righe vuote  vengono
-  ignorate  e  tutto  quello  che  segue un  carattere  ``\texttt{\#}''  viene
-  considerato un  commento.} di configurazione per ciascuna  di queste classi,
-che  viene inizia  col nome  di tab.~\ref{tab:sys_NSS_classes}  seguito  da un
-carattere ``\texttt{:}'' e  prosegue con la lista dei  \textsl{servizi} su cui
-le  relative informazioni sono  raggiungibili, scritti  nell'ordine in  cui si
+Il sistema del \textit{Name Service Switch} è controllato dal contenuto del
+file \conffile{/etc/nsswitch.conf}; questo contiene una riga\footnote{seguendo
+  una convezione comune per i file di configurazione le righe vuote vengono
+  ignorate e tutto quello che segue un carattere ``\texttt{\#}'' viene
+  considerato un commento.} di configurazione per ciascuna di queste classi,
+che viene inizia col nome di tab.~\ref{tab:sys_NSS_classes} seguito da un
+carattere ``\texttt{:}'' e prosegue con la lista dei \textsl{servizi} su cui
+le relative informazioni sono raggiungibili, scritti nell'ordine in cui si
 vuole siano interrogati.
 
-Ogni  servizio è  specificato  a sua  volta  da un  nome, come  \texttt{file},
-\texttt{dns},  \texttt{db},  ecc.  che  identifica la  libreria  dinamica  che
-realizza l'interfaccia  con esso. Per  ciascun servizio se \texttt{NAME}  è il
-nome  utilizzato  dentro   \file{/etc/nsswitch.conf},  dovrà  essere  presente
-(usualmente  in   \file{/lib})  una  libreria   \texttt{libnss\_NAME}  che  ne
+Ogni servizio è specificato a sua volta da un nome, come \texttt{file},
+\texttt{dns}, \texttt{db}, ecc.  che identifica la libreria dinamica che
+realizza l'interfaccia con esso. Per ciascun servizio se \texttt{NAME} è il
+nome utilizzato dentro \conffile{/etc/nsswitch.conf}, dovrà essere presente
+(usualmente in \file{/lib}) una libreria \texttt{libnss\_NAME} che ne
 implementa le funzioni.
 
 In ogni caso, qualunque sia la modalità con cui ricevono i dati o il supporto
@@ -1031,14 +1032,14 @@ colonna.
     \multicolumn{2}{|c|}{\textbf{Funzioni}}\\
     \hline
     \hline
-    indirizzo&\file{/etc/hosts}&\struct{hostent}&\func{gethostbyname}&
-             \func{gethostbyaddr}\\ 
-    servizio &\file{/etc/services}&\struct{servent}&\func{getservbyname}&
-             \func{getservbyaddr}\\ 
-    rete     &\file{/etc/networks}&\struct{netent}&\func{getnetbyname}&
-             \func{getnetbyaddr}\\ 
-    protocollo&\file{/etc/protocols}&\struct{protoent}&\func{getprotobyname}&
-              \func{getprotobyaddr}\\ 
+    indirizzo &\conffile{/etc/hosts}&\struct{hostent}&\func{gethostbyname}&
+               \func{gethostbyaddr}\\ 
+    servizio  &\conffile{/etc/services}&\struct{servent}&\func{getservbyname}&
+               \func{getservbyaddr}\\ 
+    rete      &\conffile{/etc/networks}&\struct{netent}&\func{getnetbyname}&
+               \func{getnetbyaddr}\\ 
+    protocollo&\conffile{/etc/protocols}&\struct{protoent}&
+               \func{getprotobyname}&\func{getprotobyaddr}\\ 
     \hline
   \end{tabular}
   \caption{Funzioni di risoluzione dei nomi per i vari servizi del
@@ -1071,12 +1072,12 @@ viceversa; i loro prototipi sono:
 
 Entrambe le funzioni prendono come ultimo argomento una stringa \param{proto}
 che indica il protocollo per il quale si intende effettuare la
-ricerca,\footnote{le informazioni mantenute in \file{/etc/services} infatti
-  sono relative sia alle porte usate su UDP che su TCP, occorre quindi
+ricerca,\footnote{le informazioni mantenute in \conffile{/etc/services}
+  infatti sono relative sia alle porte usate su UDP che su TCP, occorre quindi
   specificare a quale dei due protocolli si fa riferimento.} che nel caso si
 IP può avere come valori possibili solo \texttt{udp} o
 \texttt{tcp};\footnote{in teoria si potrebbe avere un qualunque protocollo fra
-  quelli citati in \file{/etc/protocols}, posto che lo stesso supporti il
+  quelli citati in \conffile{/etc/protocols}, posto che lo stesso supporti il
   concetto di \textsl{porta}, in pratica questi due sono gli unici presenti.}
 se si specifica un puntatore nullo la ricerca sarà eseguita su un protocollo
 qualsiasi.
@@ -1084,14 +1085,14 @@ qualsiasi.
 Il primo argomento è il nome del servizio per \func{getservbyname},
 specificato tramite la stringa \param{name}, mentre \func{getservbyport}
 richiede il numero di porta in \param{port}. Entrambe le funzioni eseguono una
-ricerca sul file \file{/etc/services}\footnote{il \textit{Name Service Switch}
-  astrae il concetto a qualunque supporto su cui si possano mantenere i
-  suddetti dati. } ed estraggono i dati dalla prima riga che corrisponde agli
-argomenti specificati; se la risoluzione ha successo viene restituito un
-puntatore ad una apposita struttura \struct{servent} contenente tutti i
-risultati), altrimenti viene restituito un puntatore nullo.  Si tenga presente
-che anche in questo caso i dati vengono mantenuti in una area di memoria
-statica e che quindi la funzione non è rientrante.
+ricerca sul file \conffile{/etc/services}\footnote{il \textit{Name Service
+    Switch} astrae il concetto a qualunque supporto su cui si possano
+  mantenere i suddetti dati. } ed estraggono i dati dalla prima riga che
+corrisponde agli argomenti specificati; se la risoluzione ha successo viene
+restituito un puntatore ad una apposita struttura \struct{servent} contenente
+tutti i risultati), altrimenti viene restituito un puntatore nullo.  Si tenga
+presente che anche in questo caso i dati vengono mantenuti in una area di
+memoria statica e che quindi la funzione non è rientrante.
 
 \begin{figure}[!htb]
   \footnotesize \centering
@@ -1128,13 +1129,13 @@ prototipi sono:
 \begin{functions}
   \headdecl{netdb.h} 
   \funcdecl{void setservent(int stayopen)} 
-  Apre il file \file{/etc/services} e si posiziona al suo inizio.
+  Apre il file \conffile{/etc/services} e si posiziona al suo inizio.
 
   \funcdecl{struct servent *getservent(void)}
-  Legge la voce successiva nel file \file{/etc/services}.      
+  Legge la voce successiva nel file \conffile{/etc/services}.      
 
   \funcdecl{void endservent(void)} 
-  Chiude il file \file{/etc/services}.
+  Chiude il file \conffile{/etc/services}.
 
   \bodydesc{Le due funzioni \func{setservent} e \func{endservent} non
     restituiscono nulla, \func{getservent} restituisce il puntatore ad una
@@ -1143,11 +1144,11 @@ prototipi sono:
 \end{functions}
 
 La prima funzione, \func{getservent}, legge una singola voce a partire dalla
-posizione corrente in \file{/etc/services}, pertanto si può eseguire una
+posizione corrente in \conffile{/etc/services}, pertanto si può eseguire una
 lettura sequenziale dello stesso invocandola più volte. Se il file non è
 aperto provvede automaticamente ad aprirlo, nel qual caso leggerà la prima
 voce. La seconda funzione, \func{setservent}, permette di aprire il file
-\file{/etc/services} per una successiva lettura, ma se il file è già stato
+\conffile{/etc/services} per una successiva lettura, ma se il file è già stato
 aperto riporta la posizione di lettura alla prima voce del file, in questo
 modo si può far ricominciare da capo una lettura sequenziale. L'argomento
 \param{stayopen}, se diverso da zero, fa sì che il file resti aperto anche fra
@@ -1317,7 +1318,7 @@ valore nullo.
 Il campo \var{ai\_protocol} permette invece di effettuare la selezione dei
 risultati per il nome del servizio usando il numero identificativo del
 rispettivo protocollo di trasporto (i cui valori possibili sono riportati in
-\file{/etc/protocols}); di nuovo i due soli valori utilizzabili sono quelli
+\conffile{/etc/protocols}); di nuovo i due soli valori utilizzabili sono quelli
 relativi a UDP e TCP, o il valore nullo che indica di ignorare questo campo
 nella selezione.
 
@@ -1694,7 +1695,7 @@ l'uso dei socket.
 La funzione prende quattro argomenti, i primi due sono le stringhe che
 indicano il nome della macchina a cui collegarsi ed il relativo servizio su
 cui sarà effettuata la risoluzione; seguono il protocollo da usare (da
-specificare con il valore numerico di \file{/etc/protocols}) ed il tipo di
+specificare con il valore numerico di \conffile{/etc/protocols}) ed il tipo di
 socket (al solito specificato con i valori illustrati in
 sez.~\ref{sec:sock_type}).  La funzione ritorna il valore del file descriptor
 associato al socket (un numero positivo) in caso di successo, o -1 in caso di
@@ -1897,7 +1898,7 @@ qualunque tipo di socket.
 
 I valori usati per \param{level}, corrispondenti ad un dato protocollo usato
 da un socket, sono quelli corrispondenti al valore numerico che identifica il
-suddetto protocollo in \file{/etc/protocols}; dato che la leggibilità di un
+suddetto protocollo in \conffile{/etc/protocols}; dato che la leggibilità di un
 programma non trarrebbe certo beneficio dall'uso diretto dei valori numerici,
 più comunemente si indica il protocollo tramite le apposite costanti
 \texttt{SOL\_*} riportate in tab.~\ref{tab:sock_option_levels}, dove si sono
@@ -1906,7 +1907,7 @@ riassunti i valori che possono essere usati per l'argomento
   confusa: infatti in Linux il valore si può impostare sia usando le costanti
   \texttt{SOL\_*}, che le analoghe \texttt{IPPROTO\_*} (citate anche da
   Stevens in \cite{UNP1}); entrambe hanno gli stessi valori che sono
-  equivalenti ai numeri di protocollo di \file{/etc/protocols}, con una
+  equivalenti ai numeri di protocollo di \conffile{/etc/protocols}, con una
   eccezione specifica, che è quella del protocollo ICMP, per la quale non
   esista una costante, il che è comprensibile dato che il suo valore, 1, è
   quello che viene assegnato a \const{SOL\_SOCKET}.}
@@ -2300,9 +2301,23 @@ tab.~\ref{tab:sock_opt_socklevel} sul significato delle varie opzioni:
   usualmente utilizzata per ricevere il codice di errore, come accennato in
   sez.~\ref{sec:TCP_sock_select}, quando si sta osservando il socket con una
   \func{select} che ritorna a causa dello stesso.
-\end{basedescript}
+
+\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
+  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}.
+
+\item[\const{SO\_DETACH\_FILTER}] consente di distaccare un filtro
+  precedentemente aggiunto ad un socket.
 
 % TODO documentare SO_ATTACH_FILTER e SO_DETACH_FILTER
+% riferimenti http://www.rcpt.to/lsfcc/lsf.html
+% Documentation/networking/filter.txt
+
+
+\end{basedescript}
 
 
 \subsection{L'uso delle principali opzioni dei socket}
@@ -2590,7 +2605,7 @@ esiste, ma il comportamento di \const{SO\_REUSEADDR} 
 possibile effettuare un \textit{completely duplicate binding} ed ottenere il
 successo di \func{bind} su un socket legato allo stesso indirizzo e porta solo
 se il programma che ha eseguito per primo \func{bind} su di essi ha impostato
-questa opzione.\footnote{Questa restrizione permette di evitare il cosiddetto
+questa opzione.\footnote{questa restrizione permette di evitare il cosiddetto
   \textit{port stealing}, in cui un programma, usando \const{SO\_REUSEADDR},
   può collegarsi ad una porta già in uso e ricevere i pacchetti destinati ad
   un altro programma; con questa caratteristica ciò è possibile soltanto se il
@@ -2923,11 +2938,12 @@ sez.~\ref{sec:net_sendmsg}).
   ricerca è disabilitata ed è responsabilità del programma creare pacchetti di
   dimensioni appropriate e ritrasmettere eventuali pacchetti persi. Se
   l'opzione viene abilitata, il kernel si incaricherà di tenere traccia
-  automaticamente della \textit{Path MTU} verso ciascuna destinazione, e
-  rifiuterà immediatamente la trasmissione di pacchetti di dimensioni maggiori
-  della MTU con un errore di \errval{EMSGSIZE}.\footnote{in caso contrario la
-    trasmissione del pacchetto sarebbe effettuata, ottenendo o un fallimento
-    successivo della trasmissione, o la frammentazione dello stesso.} 
+  automaticamente della \itindex{Maximum~Transfer~Unit} \textit{Path MTU}
+  verso ciascuna destinazione, e rifiuterà immediatamente la trasmissione di
+  pacchetti di dimensioni maggiori della MTU con un errore di
+  \errval{EMSGSIZE}.\footnote{in caso contrario la trasmissione del pacchetto
+    sarebbe effettuata, ottenendo o un fallimento successivo della
+    trasmissione, o la frammentazione dello stesso.}
 
 \item[\const{IP\_MTU}] Permette di leggere il valore della \textit{Path MTU}
   di percorso del socket.  L'opzione richiede per \param{optval} un intero che
@@ -4049,9 +4065,9 @@ questi per
   %   ottimizzazione per l'uso come router.
 
 \item[\procrelfile{/proc/sys/net/core}{somaxconn}] imposta la dimensione
-  massima del \textit{backlog} della funzione \func{listen} (vedi
-  sez.~\ref{sec:TCP_func_listen}), e corrisponde al valore della costante
-  \const{SOMAXCONN}; il suo valore di default è 128.
+  massima utilizzabile per il \textit{backlog} della funzione \func{listen}
+  (vedi sez.~\ref{sec:TCP_func_listen}), e corrisponde al valore della
+  costante \const{SOMAXCONN}; il suo valore di default è 128.
 
 \end{basedescript}
 
@@ -4066,8 +4082,8 @@ vengono usati all'interno di quest'ultimo (come ICMP, TCP e UDP) o a fianco
 dello stesso (come ARP).
 
 I file che consentono di controllare le caratteristiche specifiche del
-protocollo IP in quanto tale, descritti anche nella pagina di manuale
-accessibile con \texttt{man 7 ip}, sono i seguenti:
+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}}
 
 \item[\procrelfile{/proc/sys/net/ipv4}{ip\_default\_ttl}] imposta il valore di
@@ -4076,59 +4092,79 @@ accessibile con \texttt{man 7 ip}, sono i seguenti:
   pacchetti possono attraversare. Il valore può essere modificato anche per il
   singolo socket con l'opzione \const{IP\_TTL}.  Prende un valore intero, ma
   dato che il campo citato è di 8 bit hanno senso solo valori fra 0 e 255. Il
-  valore di default è 64, e non ci normalmente non c'è nessuna necessità di
-  modificarlo,\footnote{l'unico motivo sarebbe per raggiungere macchine
-    estremamente ``{lontane}'' in termini di \textit{hop}, ma è praticamente }
-  aumentare il valore è una pratica poco gentile, in quanto in caso di
-  problemi di routing si allunga inutilmente il numero di ritrasmissioni.
-  
+  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
+  quanto in caso di problemi di routing si allunga inutilmente il numero di
+  ritrasmissioni.
 
 \item[\procrelfile{/proc/sys/net/ipv4}{ip\_forward}] abilita l'inoltro dei
   pacchetti da una interfaccia ad un altra, e può essere impostato anche per
   la singola interfaccia. Prende un valore logico (0 disabilita, diverso da
-  zero abilita).
+  zero abilita), di default è disabilitato.
 
-\item[\procrelfile{/proc/sys/net/ipv4}{ip\_dynaddr}] Abilita la riscrittura
+\item[\procrelfile{/proc/sys/net/ipv4}{ip\_dynaddr}] abilita la riscrittura
   automatica degli indirizzi associati ad un socket quando una interfaccia
   cambia indirizzo. Viene usato per le interfacce usate nei collegamenti in
   dial-up, il cui indirizzo IP viene assegnato dinamicamente dal provider, e
-  può essere modificato. Un valore nullo disabilita la funzionalità, con 1 la
-  si abilita, con 2 la si abilità in modalità \textsl{prolissa}.
+  può essere modificato. Prende un valore intero, con 0 si disabilita la
+  funzionalità, con 1 la si abilita, con 2 (o con qualunque altro valore
+  diverso dai precedenti) la si abilità in modalità \textsl{prolissa}; di
+  default la funzionalità è disabilitata.
 
-\item[\procrelfile{/proc/sys/net/ipv4}{ip\_autoconfig}] Specifica se
-  l'indirizzo IP è stato configurato automaticamente via DHCP, BOOTP o RARP.
+\item[\procrelfile{/proc/sys/net/ipv4}{ip\_autoconfig}] specifica se
+  l'indirizzo IP è stato configurato automaticamente dal kernel all'avvio
+  attraverso DHCP, BOOTP o RARP. Riporta un valore logico (0 falso, 1 vero)
+  accessibile solo in lettura, è inutilizzato nei kernel recenti ed eliminato
+  a partire dal kernel 2.6.18.
 
 \item[\procrelfile{/proc/sys/net/ipv4}{ip\_local\_port\_range}] imposta
   l'intervallo dei valori usati per l'assegnazione delle porte effimere,
   permette cioè di modificare i valori illustrati in
-  fig.~\ref{fig:TCP_port_alloc}; prende due valori numerici, che indicano gli
-  estremi dell'intervallo. Si abbia cura di non definire un intervallo che si
-  sovrappone a quello delle porte usate per il \itindex{masquerading}
-  \textit{masquerading}, il kernel può gestire la sovrapposizione, ma si avrà
-  una perdita di prestazioni. Si imposti sempre un valore iniziale maggiore di
-  1024 (o meglio ancora di 4096) per evitare conflitti con le porte usate dai
-  servizi noti.
-
-\item[\procrelfile{/proc/sys/net/ipv4}{ip\_no\_pmtu\_disc}] imposta la
-  disciplina di ricerca della \itindex{Maximum~Transfer~Unit} \textit{Path
-    MTU} (vedi sez.~\ref{sec:net_lim_dim} e sez.~\ref{sec:sock_ipv4_options}).
-
-\item[\procrelfile{/proc/sys/net/ipv4}{ipfrag\_high\_thresh}] 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}.
+  fig.~\ref{fig:TCP_port_alloc}; prende due valori interi separati da spazi,
+  che indicano gli estremi dell'intervallo. Si abbia cura di non definire un
+  intervallo che si sovrappone a quello delle porte usate per il
+  \itindex{masquerading} \textit{masquerading}, il kernel può gestire la
+  sovrapposizione, ma si avrà una perdita di prestazioni. Si imposti sempre un
+  valore iniziale maggiore di 1024 (o meglio ancora di 4096) per evitare
+  conflitti con le porte usate dai servizi noti.
+
+\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
+  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
+    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
+    stessa MTU.}  mal configurate è opportuno correggere le configurazioni,
+  perché disabilitare globalmente il procedimento con questo parametro ha
+  pesanti ripercussioni in termini di prestazioni di rete.
+
+\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
+    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. 
+
+\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}.
 
 \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}.
 
-\item[\procrelfile{/proc/sys/net/ipv4}{ip\_always\_defrag}] se abilitato
-  (prende un intero come valore logico) tutti i pacchetti IP frammentati
-  saranno riassemblati, anche in caso in successivo immediato
-  inoltro.\footnote{introdotto con il kernel 2.2.13, nelle versioni precedenti
-    questo comportamento poteva essere solo in fase di compilazione del kernel
-    con l'opzione \texttt{CONFIG\_IP\_ALWAYS\_DEFRAG}.}
-
 \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
@@ -4146,7 +4182,7 @@ 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
+\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
@@ -4180,24 +4216,37 @@ 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}] Abilita il supporto
-  definito nell'\href{http://www.ietf.org/rfc/rfc2884.txt}{RFC~2884} per il
+\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
     nell'\href{http://www.ietf.org/rfc/rfc2018.txt}{RFC~2018}, usata per dare
-    un \textit{acknowledgement} unico su blocchi di pacchetti non contigui.}
-
-\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_ecn}] Abilita il meccanismo della
-  \textit{Explicit Congestion Notification} (o ECN) definito
-  nell'\href{http://www.ietf.org/rfc/rfc2884.txt}{RFC~2884}. 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
-  scartano i relativi pacchetti.\\
+    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.
+
+  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.\\
 
 \item[\procrelfile{/proc/sys/net/ipv4}{tcp\_fack}] è un valore logico che
-  abilita il supporto per il \textit{TCP Forward Acknowledgement}. Di default
-  è abilitato.
+  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\_fin\_timeout}] specifica il numero
@@ -4216,7 +4265,6 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti:
   interferenze radio, piuttosto che alla congestione dei router. 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
@@ -4251,8 +4299,8 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti:
   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 di
-  default viene impostato inizialmente al valore del parametro del kernel
+  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
 
@@ -4311,7 +4359,12 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti:
   ritrasmissioni provocate dal riordinamento. Non è opportuno modificare
   questo valore dal default che è 3.
 
-\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_retrans\_collapse}]
+\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).
 
 \item[\procrelfile{/proc/sys/net/ipv4}{tcp\_retries1}] imposta il massimo
   numero di volte che protocollo tenterà la ritrasmissione si un pacchetto su
@@ -4331,15 +4384,35 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti:
   massimo di 100 secondi, che però è un valore considerato troppo basso.
 
 
-\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_rfc1337}] 
+\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}] 
+\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}] 
-\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_syncookies}] 
+
+\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\_syn\_retries}] imposta il numero
   di tentativi (il default è 5) di ritrasmissione dei pacchetti SYN di inizio
@@ -4347,15 +4420,29 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti:
   (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}] 
-\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_tw\_recycle}] 
+\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}] 
-\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_window\_scaling}] 
 
+\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}] 
+
 \item[\procrelfile{/proc/sys/net/ipv4}{tcp\_westwood}] 
+
 \item[\procrelfile{/proc/sys/net/ipv4}{tcp\_wmem}] 
+
 \end{basedescript}
 
 % LocalWords:  socket sez dotted decimal resolver Domain Name Service cap DNS