Correzioni varie alle note (uniformate in stile) e trattazione di
[gapil.git] / sockctrl.tex
index 813e21aaf663a13ecd379b917264351896b008f3..7bce251253307e488a21803192642346e343a13c 100644 (file)
@@ -2301,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.
   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
 
 % 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}
 
 
 \subsection{L'uso delle principali opzioni dei socket}
@@ -2591,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
 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
   \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
@@ -2924,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
   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
 
 \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
@@ -4077,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
   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
 
 \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
   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
 
 \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}{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
 \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
@@ -4200,7 +4235,7 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti:
   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
   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 è abilitato.
+  congestione). Di default è disabilitato.
 
   Si tenga presente che se si abilita questa opzione si possono avere dei
   malfunzionamenti apparentemente casuali dipendenti dalla destinazione,
 
   Si tenga presente che se si abilita questa opzione si possono avere dei
   malfunzionamenti apparentemente casuali dipendenti dalla destinazione,
@@ -4365,12 +4400,19 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti:
   nell'\href{http://www.ietf.org/rfc/rfc2018.txt}{RFC~2018}; di default è
   abilitato.
 
   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\_stdurg}] 
 
-\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_synack\_retries}]  
+\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}] 
+\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
 
 \item[\procrelfile{/proc/sys/net/ipv4}{tcp\_syn\_retries}] imposta il numero
   di tentativi (il default è 5) di ritrasmissione dei pacchetti SYN di inizio
@@ -4378,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.
 
   (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\_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\_vegas\_cong\_avoid}] 
+
 \item[\procrelfile{/proc/sys/net/ipv4}{tcp\_westwood}] 
 \item[\procrelfile{/proc/sys/net/ipv4}{tcp\_westwood}] 
+
 \item[\procrelfile{/proc/sys/net/ipv4}{tcp\_wmem}] 
 \item[\procrelfile{/proc/sys/net/ipv4}{tcp\_wmem}] 
+
 \end{basedescript}
 
 % LocalWords:  socket sez dotted decimal resolver Domain Name Service cap DNS
 \end{basedescript}
 
 % LocalWords:  socket sez dotted decimal resolver Domain Name Service cap DNS