From: Simone Piccardi Date: Wed, 29 Aug 2007 07:44:52 +0000 (+0000) Subject: Correzioni varie e qualche dettagli in piu` sulle sysctl per il TCP. X-Git-Url: https://gapil.gnulinux.it/gitweb/?a=commitdiff_plain;h=3baefd41c790c995a2ca8e25bf5b56ad4eec6c83;p=gapil.git Correzioni varie e qualche dettagli in piu` sulle sysctl per il TCP. --- diff --git a/compatib.tex b/compatib.tex deleted file mode 100644 index 1d4c7b2..0000000 --- a/compatib.tex +++ /dev/null @@ -1,51 +0,0 @@ -%% compatib.tex -%% -%% Copyright (C) 2002 Simone Piccardi. Permission is granted to -%% copy, distribute and/or modify this document under the terms of the GNU Free -%% Documentation License, Version 1.1 or any later version published by the -%% Free Software Foundation; with the Invariant Sections being "Un preambolo", -%% with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the -%% license is included in the section entitled "GNU Free Documentation -%% License". -%% -% -% Pacchetto di contabilità per evitare casini con latex2html -% -% Simone Piccardi, Aug. 2002 -% -\newenvironment{description*} { -\begin{description} -} -{ -\end{description} -} -\newenvironment{itemize*} -{ -\begin{itemize} -} -{ -\end{itemize} -} -\newenvironment{enumerate*} -{ -\begin{enumerate} -} -{ -\end{enumerate} -} -\newenvironment{basedescript} -{ -\begin{description} -} -{ -\end{description} -} -\newcommand{\desclabelwidth}[1]{} -\newcommand{\desclabelstyle}[1]{} -\newenvironment{boxedminipage} -{ -\begin{minipage} -} -{ -\end{minipage} -} diff --git a/fileadv.tex b/fileadv.tex index 346fc45..4b60313 100644 --- a/fileadv.tex +++ b/fileadv.tex @@ -3532,16 +3532,15 @@ macro \macro{\_XOPEN\_SOURCE} ad almeno 600, valido o non è aperto in scrittura. \item[\errcode{EINVAL}] o \param{offset} o \param{len} sono minori di zero. - \item[\errcode{EFBIG}] il valore di \param{offset} + \param{len} eccede la - dimensione massima di un file. + \item[\errcode{EFBIG}] il valore di (\param{offset} + \param{len}) eccede + la dimensione massima consentita per un file. \item[\errcode{ENODEV}] l'argomento \param{fd} non fa riferimento ad un file regolare. \item[\errcode{ENOSPC}] non c'è sufficiente spazio disco per eseguire l'operazione. \item[\errcode{ESPIPE}] l'argomento \param{fd} è una pipe. - - } \end{errlist} + } \end{functions} La funzione si assicura che venga allocato sufficiente spazio disco perché sia diff --git a/filedir.tex b/filedir.tex index 0037e29..0df466c 100644 --- a/filedir.tex +++ b/filedir.tex @@ -2558,11 +2558,11 @@ classici mantenuti negli inode. Per risolvere questo problema alcuni sistemi unix-like (e fra questi anche Linux) hanno introdotto un meccanismo generico che consenta di associare delle informazioni ai singoli file,\footnote{l'uso più comune è quello della ACL, - che tratteremo a breve, ma si possono inserire anche altre informazioni.} -detto \textit{Extended Attributes}. Gli \textsl{attributi estesi} non sono -altro che delle coppie nome/valore che sono associate permanentemente ad un -oggetto sul filesystem, analoghi di quello che sono le variabili di ambiente -(vedi sez.~\ref{sec:proc_environ}) per un processo. + che tratteremo nella prossimaa sezione, ma si possono inserire anche altre + informazioni.} detto \textit{Extended Attributes}. Gli \textsl{attributi + estesi} non sono altro che delle coppie nome/valore che sono associate +permanentemente ad un oggetto sul filesystem, analoghi di quello che sono le +variabili di ambiente (vedi sez.~\ref{sec:proc_environ}) per un processo. Altri sistemi (come Solaris, MacOS e Windows) hanno adottato un meccanismo diverso in cui ad un file sono associati diversi flussi di dati, su cui @@ -2661,8 +2661,8 @@ cambiando la directory di lavoro. Normalmente la directory radice di un processo coincide anche con la radice del filesystem usata dal kernel, e dato che il suo valore viene ereditato dal padre da ogni processo figlio, in generale i processi risolvono i -\itindsub{pathname}{assoluto}\textit{pathname} assoluti a partire sempre dalla -stessa directory, che corrisponde alla \file{/} del sistema. +\itindsub{pathname}{assoluto} \textit{pathname} assoluti a partire sempre +dalla stessa directory, che corrisponde alla radice del sistema. In certe situazioni però, per motivi di sicurezza, è utile poter impedire che un processo possa accedere a tutto il filesystem; per far questo si può @@ -2718,6 +2718,12 @@ contiene i file. Si tenga presente per replicare all'interno della \textit{chroot jail} tutti i file (in genere programmi e librerie) di cui il server potrebbe avere bisogno. + + + + + + % LocalWords: sez like filesystem unlink MacOS Windows VMS inode kernel unistd % LocalWords: un'etichetta int const char oldpath newpath errno EXDEV EPERM st % LocalWords: EEXIST EMLINK EACCES ENAMETOOLONG ENOTDIR EFAULT ENOMEM EROFS ls diff --git a/sockctrl.tex b/sockctrl.tex index 3a53034..66f480f 100644 --- a/sockctrl.tex +++ b/sockctrl.tex @@ -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,10 +4150,10 @@ 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 + \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. @@ -4161,22 +4161,27 @@ di manuale accessibile con \texttt{man 7 ip}, sono i seguenti: \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 - (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. +\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. + + 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 @@ -4184,33 +4189,34 @@ 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 +\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,125 +4224,137 @@ 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} \index{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. + 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}] 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}). +\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}] 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. 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 @@ -4348,25 +4366,26 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti: valore specificato dagli altri limiti del kernel. -\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,26 +4393,48 @@ 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\_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. + + 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