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}
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
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
% 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}
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
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
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 (o con qualunque altro valore diverso dai precedenti) la
- si abilità in modalità \textsl{prolissa}; di default la funzionalità è
- disabilitata.
+ 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 dal kernel all'avvio
- attraverso DHCP, BOOTP o RARP; è un valore logico (0 falso, 1 vero)
- accessibile in lettura, è inutilizzato nei kernel recenti ed eliminato a
- partire dal 2.6.18.
+ 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
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\_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
(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