\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
\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
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.
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
precedenti questo comportamento poteva essere solo stabilito un volta per
tutte in fase di compilazione del kernel con l'opzione
\texttt{CONFIG\_IP\_ALWAYS\_DEFRAG}.} Prende un valore logico e di default
- è disabilitato. Con i kernel dalla serie 2.4 in poi la deframmentazione viene
- attivata automaticamente quando si utilizza il sistema del netfilter, e
- questo parametro non è più presente.
+ è disabilitato. Con i kernel dalla serie 2.4 in poi la deframmentazione
+ viene attivata automaticamente quando si utilizza il sistema del
+ \itindex{netfilter} \textit{netfilter}, e questo parametro non è più
+ presente.
\item[\procrelfile{/proc/sys/net/ipv4}{ipfrag\_high\_thresh}] indica il limite
massimo (espresso in numero di byte) sui pacchetti IP frammentati presenti
I file di \texttt{/proc/sys/net/ipv4} che invece fanno riferimento alle
caratteristiche specifiche del protocollo TCP, elencati anche nella rispettiva
pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti:
-\begin{basedescript}{\desclabelwidth{3.9cm}\desclabelstyle{\nextlinelabel}}
+\begin{basedescript}{\desclabelwidth{2.2cm}\desclabelstyle{\nextlinelabel}}
\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_abort\_on\_overflow}] indica al
kernel di azzerare le connessioni quando il programma che le riceve è troppo
\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_ecn}] abilita il meccanismo della
\textit{Explicit Congestion Notification} (in breve ECN) nelle connessioni
TCP. Prende valore logico che di default è disabilitato. La \textit{Explicit
- Congestion Notification} \index{Explicit~Congestion~Notification} è un
+ Congestion Notification} \itindex{Explicit~Congestion~Notification} è un
meccanismo che consente di notificare quando una rotta o una rete è
congestionata da un eccesso di traffico,\footnote{il meccanismo è descritto
in dettaglio nell'\href{http://www.ietf.org/rfc/rfc3168.txt}{RFC~3168}
ricezione del pacchetto FIN conclusivo, passati quali il socket viene
comunque chiuso forzatamente. Prende un valore intero che indica i secondi
e di default è 60.\footnote{nei kernel della serie 2.2.x era il valore
- utilizzato era invece di 120 secondi.}) L'uso di questa opzione realizza
+ utilizzato era invece di 120 secondi.} L'uso di questa opzione realizza
quella che in sostanza è una violazione delle specifiche del protocollo TCP,
ma è utile per fronteggiare alcuni attacchi di
\itindex{Denial~of~Service~(DoS)} \textit{Denial of Service}.
kernel. Prende un valore intero, il valore di default viene impostato
inizialmente al valore del parametro del kernel \texttt{NR\_FILE}, e viene
aggiustato a seconda della memoria disponibile.
-% TODO verificare la spiegazione di connessione orfana
+
+% TODO verificare la spiegazione di connessione orfana.
\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_max\_syn\_backlog}] indica la
lunghezza della coda delle connessioni incomplete, cioè delle connessioni
prevenire alcuni semplici attacchi di \textit{denial of service}.
-\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_mem}] prende una tripletta di
- valori interi usati dallo stack TCP per controllare il proprio uso della
- memoria. Il primo valore, chiamato \textit{low} nelle pagine di manuale,
- indica il numero di pagine allocate sotto il quale non viene usato nessun
- meccanismo di regolazione dell'uso della memoria.
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_mem}] viene usato dallo stack TCP
+ per gestire le modalità con cui esso 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}] indica il numero
massimo di volte che si esegue un tentativo di controllo sull'altro capo di
nell'\href{http://www.ietf.org/rfc/rfc1122.txt}{RFC~1122} dove è indicato un
massimo di 100 secondi, che però è un valore considerato troppo basso.
-
\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_rfc1337}] indica allo stack TCP
del kernel di abilitare il comportamento richiesto
nell'\href{http://www.ietf.org/rfc/rfc1337.txt}{RFC~1337}. Prende un valore
\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_rmem}] viene usato dallo stack TCP
per controllare dinamicamente le dimensioni dei propri buffer di ricezione,
anche in rapporto alla memoria disponibile. Prende una tripletta di valori
- interi separati da spazi che indicano delle dimensioni in byte.
-
- Il primo valore, chiamato \textit{min} nelle pagine di manuale, indica la
- dimensione minima del buffer di ricezione; e di default vale 4Kb, ma in
- sistemi con poca memoria viene automaticamente ridotto a \const{PAGE\_SIZE}.
- Questo valore viene usato per assicurare che anche in situazioni di
- pressione sulla memoria (vedi quanto detto per
- \procrelfile{/proc/sys/net/ipv4}{tcp\_mem}) le allocazioni al di sotto di
- questo limite abbiamo comunque successo.\footnote{e non ha a che fare con la
- dimensione del buffer di lettura di un socket dichiarata con l'opzione
- \const{SO\_RCVBUF}.}
-
- Il secondo valore, denominato \textit{default} nelle pagine di manuale,
- indica la dimensione di default del buffer di ricezione di un socket TCP.
- Questo valore sovrascrive il default iniziale impostato con
- \procfile{/proc/sys/net/core/mem\_default} che vale per qualunque
- protocollo.
-
- Il terzo valore, denominato \textit{max} nelle pagine di manuale
-
-
-\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_sack}] un valore logico che indica
- al kernel di utilizzare il meccanismo del \textit{TCP selective
- aknowledment} definito
- nell'\href{http://www.ietf.org/rfc/rfc2018.txt}{RFC~2018}; di default è
- abilitato.
-
-\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_stdurg}]
-
-\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_synack\_retries}] un valore intero
- che indica il numero massimo di volte che verrà ritasmesso il segmento
- SYN/ACK nella creazione di una connessione (vedi
- sez.~\ref{sec:TCP_conn_cre}). Il valore di default è 5, e non si deve
- superare il valore massimo di 255.
-
-\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_syncookies}] un valore logico
- che abilita i \textit{TCP syncookies},\footnote{per poter usare quasta
- funzionalità è necessario avere abilitato l'opzione
- \texttt{CONFIG\_SYN\_COOKIES} nella compilazione del kernel.} di default è
- disabilitato.
+ interi separati da spazi che indicano delle dimensioni in byte:
+
+ \begin{itemize*}
+ \item il primo valore, chiamato \textit{min} nelle pagine di manuale, indica
+ la dimensione minima 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}]
\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