+\end{basedescript}
+
+
+\subsection{I valori di controllo per il protocollo IPv4}
+\label{sec:sock_ipv4_sysctl}
+
+Nella directory \texttt{/proc/sys/net/ipv4} sono presenti i file che
+corrispondono ai parametri dei socket che usano il protocollo IPv4, relativi
+quindi sia alle caratteristiche di IP, che a quelle degli altri protocolli che
+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, che sono descritti anche nella relativa pagina
+di manuale accessibile con \texttt{man 7 ip}, sono i seguenti:
+\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
+ pacchetti uscenti, stabilendo così il numero massimo di router che i
+ 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 normalmente non c'è nessuna necessità di
+ modificarlo.\footnote{l'unico motivo sarebbe per raggiungere macchine
+ estremamente ``{lontane}'' in termini di \textit{hop}, ma è praticamente
+ impossibile 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), di default è disabilitato.
+
+\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. 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. 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 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ò 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
+ 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
+ \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
+ in coda; quando questo valore viene raggiunta la coda viene ripulita fino al
+ valore \texttt{ipfrag\_low\_thresh}. Prende un valore intero.
+
+\item[\procrelfile{/proc/sys/net/ipv4}{ipfrag\_low\_thresh}] soglia bassa
+ (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 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
+caratteristiche specifiche del protocollo TCP, elencati anche nella rispettiva
+pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti:
+\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
+ 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 default è 2 che significa che al buffer dell'applicazione
+ viene riservato un quarto del totale.
+
+\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
+% \item[\texttt{tcp\_bic}]
+% \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
+ 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.} 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} \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}
+ 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 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}] 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 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}] 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}] 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. 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}] 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. 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}] viene usato dallo stack TCP
+ per gestire le modalità con cui esso utilizzerà la memoria. Prende una
+ tripletta di valori interi, che indicano un numero di pagine:
+
+ \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.
+
+ \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
+ 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}] 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{sec:tcp_protocol_xxx}) viene usata
+ questa metrica di riconoscimento dei riordinamenti per evitare inutili
+ 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). 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
+ una connessione stabilita prima di fare ricorso ad ulteriori sforzi che
+ 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. 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}). 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}] indica al 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:
+
+ \begin{itemize}
+ \item il primo valore, chiamato \textit{min} nelle pagine di manuale, indica
+ la dimensione minima in byte 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\_rmem}) le allocazioni al di sotto di
+ questo limite abbiamo comunque successo. Questo valore non viene comunque
+ ad incidere sulla dimensione del buffer di ricezione 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 ricezione 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 acknowledgement} 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à ritrasmesso 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 questa 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 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}] 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}] 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.\footnote{il \textit{Network Address
+ Translation} è una tecnica, impiegata nei firewall e nei router, che
+ consente di modificare al volo gli indirizzi dei pacchetti che transitano
+ per una macchina, Linux la supporta con il \itindex{netfilter}
+ \textit{netfilter}, per maggiori dettagli si consulti il cap.~2 di
+ \cite{FwGL}.}
+
+\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
+ \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 connessione non viene effettuata.
+
+%\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_vegas\_cong\_avoid}]
+% TODO: controllare su internet
+
+%\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_westwood}]
+% TODO: controllare su internet
+
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_wmem}] viene usato dallo stack TCP
+ per controllare dinamicamente le dimensioni dei propri buffer di spedizione,
+ adeguandole in rapporto alla memoria disponibile. Prende una tripletta di
+ valori interi separati da spazi che indicano delle dimensioni in byte:
+
+ \begin{itemize}
+ \item il primo valore, chiamato \textit{min}, indica la dimensione minima in
+ byte del buffer di spedizione; il default è 4Kb. Come per l'analogo di
+ \procrelfile{/proc/sys/net/ipv4}{tcp\_rmem}) viene usato per assicurare
+ che anche in situazioni di pressione sulla memoria (vedi
+ \procrelfile{/proc/sys/net/ipv4}{tcp\_mem}) le allocazioni al di sotto di
+ questo limite abbiamo comunque successo. Di nuovo questo valore non viene
+ ad incidere sulla dimensione del buffer di trasmissione di un singolo
+ socket dichiarata con l'opzione \const{SO\_SNDBUF}.
+
+ \item il secondo valore, denominato \textit{default}, indica la dimensione
+ di default in byte del buffer di spedizione di un socket TCP. Questo
+ valore sovrascrive il default iniziale impostato per tutti i tipi di
+ socket con \procfile{/proc/sys/net/core/wmem\_default}. Il default è 87380
+ byte, ridotto a 43689 per sistemi con poca memoria. Si può aumentare
+ questo valore quando si desiderano dimensioni più ampie del buffer di
+ trasmissione per i socket TCP, ma come per il precedente
+ \procrelfile{/proc/sys/net/ipv4}{tcp\_rmem}) 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}
+ con \procrelfile{/proc/sys/net/ipv4}{tcp\_window\_scaling}.
+
+ \item il terzo valore, denominato \textit{max}, indica la dimensione massima
+ in byte del buffer di spedizione di un socket TCP; il default è 128Kb, che
+ viene ridotto automaticamente a 64Kb 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/wmem\_max}. Questo valore non viene
+ ad incidere sulla dimensione del buffer di trasmissione di un singolo
+ socket dichiarata con l'opzione \const{SO\_SNDBUF}.
+ \end{itemize}
+
+\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
+% LocalWords: username group aliases ethers MAC address hosts networks rpc RPC
+% LocalWords: protocols services dns db lib libnss org truelite it root res HS
+% LocalWords: resource init netinet resolv int void conf host LOCALDOMAIN TCP
+% LocalWords: options DEBUG debug AAONLY USEVC UDP PRIMARY IGNTC RECURSE INET
+% LocalWords: DEFNAMES search STAYOPEN DNSRCH INSECURE NOALIASES HOSTALIASES
+% LocalWords: IPv gethostbyname NOCHECKNAME KEEPTSIG TSIG BLAST RETRY retry NS
+% LocalWords: retrans query FQDN Fully Qualified const char dname class type
+% LocalWords: unsigned answer anslen CSNET Hesiod MIT CHAOS Chaosnet ANY BIND
+% LocalWords: nameser compat Berkley MF CNAME SOA MB MR NULL WKS PTR HINFO TXT
+% LocalWords: MINFO RP responsible person AFSDB AFS RT router NSAP SIG KEY PX
+% LocalWords: GPOS AAAA LOC NXT EID NIMLOC nimrod SRV ATMA ATM NAPTR naming AF
+% LocalWords: authority IXFR AXFR MAILB MAILA errno NOT FOUND RECOVERY TRY err
+% LocalWords: AGAIN herror netdb string perror error hstrerror strerror struct
+% LocalWords: hostent name addrtype length addr list sys af mygethost inet ret
+% LocalWords: ntop deep copy buf size buflen result errnop value argument len
+% LocalWords: ERANGE sethostent stayopen endhostent gethostbyaddr order pton
+% LocalWords: getipnodebyname getipnodebyaddr flags num MAPPED ALL ADDRCONFIG
+% LocalWords: freehostent ip getXXXbyname getXXXbyaddr servent getservbyname
+% LocalWords: getservbyaddr netent getnetbyname getnetbyaddr protoent smtp udp
+% LocalWords: getprotobyname getprotobyaddr getservbyport port tcp setservent
+% LocalWords: getservent endservent setXXXent getXXXent endXXXent gethostent
+% LocalWords: setnetent getnetent endnetent setprotoent getprotoent POSIX RFC
+% LocalWords: endprotoent getaddrinfo getnameinfo nell' node service addrinfo
+% LocalWords: hints linked addrlen socklen family socktype protocol sockaddr
+% LocalWords: canonname next PF UNSPEC SOCK STREAM DGRAM bind INADDR loopback
+% LocalWords: connect sendto NUMERICHOST EAI NONAME SYSTEM BADFLAGS ADDRFAMILY
+% LocalWords: NODATA MEMORY FAIL errcode echo mygetaddr ptr casting Canonical
+% LocalWords: freeaddrinfo getservname salen hostlen serv servlen l'OR NI NUL
+% LocalWords: NOFQDN NAMEREQD NUMERICSERV MAXHOST MAXSERV sockconn SockUtil of
+% LocalWords: descriptor hint fifth sockbind setsockopt getsockopt sock level
+% LocalWords: optname optval optlen EBADF EFAULT EINVAL ENOPROTOOPT ENOTSOCK
+% LocalWords: IPPROTO Stevens ICMP ICMPV ICMPv get KEEPALIVE OOBINLINE timeval
+% LocalWords: RCVLOWAT SNDLOWAT RCVTIMEO SNDTIMEO BSDCOMPAT BSD PASSCRED ucred
+% LocalWords: PEERCRED BINDTODEVICE REUSEADDR ACCEPTCONN DONTROUTE gateway MSG
+% LocalWords: BROADCAST broadcast SNDBUF RCVBUF LINGER linger PRIORITY read IF
+% LocalWords: OOB recvmsg kernel select write readv recv recvfrom EAGAIN send
+% LocalWords: EWOULDBLOCK writev sendmsg raw domain SCM CREDENTIALS eth packet
+% LocalWords: IFNAMSIZ capabilities capability ADMIN log trpt EADDRINUSE close
+% LocalWords: listen routing sysctl shutdown Quality TOS keep alive ACK RST to
+% LocalWords: ECONNRESET ETIMEDOUT keepalive echod fourth newsgroup WAIT reuse
+% LocalWords: sockbindopt SockUtils homed completely binding RECVDSTADDR onoff
+% LocalWords: PKTINFO getsockname multicast streaming unicast REUSEPORT reset
+% LocalWords: stealing ling RECVTOS RECVTTL TTL RECVOPTS RETOPTS HDRINCL MTU
+% LocalWords: RECVERR DISCOVER Path Discovery ALERT alert ADD MEMBERSHIP mreqn
+% LocalWords: pktinfo ipi ifindex spec dst RECVIF Live IPTOS LOWDELAY Advanced
+% LocalWords: Transfer Unit PMTUDISC DONT WANT route dall' pmtu EMSGSIZE imr
+% LocalWords: multiaddr mreq fcntl ioctl request SIOCGSTAMP trip SIOCSPGRP pid
+% LocalWords: process SIGIO SIGURG KILL FIOASYNC SIOCGPGRP filesystem proc ttl
+% LocalWords: rmem wmem message cost burst bucket filter netdev backlog optmem
+% LocalWords: forward dynaddr dial autoconfig local masquerading ipfrag high
+% LocalWords: thresh low always defrag CONFIG SETSIG cmd FIOGETOWN FIOSETOWN
+% LocalWords: quest'ultime neigh dev weight cong mod somaxconn Di SIOCINQ DoS
+% LocalWords: Documentation SIOCATMARK SIOCOUTQ FIONREAD TIOCOUTQ Denial work
+% LocalWords: netfilter scheduler mark ARP DHCP BOOTP RARP nonlocal sniffer is
+% LocalWords: linux NODELAY MAXSEG CORK KEEPIDLE KEEPINTVL KEEPCNT SYNCNT INFO
+% LocalWords: DEFER ACCEPT WINDOW CLAMP QUICKACK CONGESTION ENCAP urgent MSS
+% LocalWords: Segment SYN accept advertised window info quickack Nagle ifreq
+% LocalWords: ifr ppp union EPERM SIOCGIFNAME dell' interface index IFF NOARP
+% LocalWords: SIOCGIFINDEX SIOCGIFFLAGS POINTOPOINT RUNNING PROMISC NOTRAILERS
+% LocalWords: ALLMULTI bundle PORTSEL ifmap AUTOMEDIA DYNAMIC SIOCSIFFLAGS way
+% LocalWords: SIOCGIFMETRIC SIOCSIFMETRIC SIOCGIFMTU SIOCSIFMTU SIOCGIFHWADDR
+% LocalWords: SIOCSIFHWADDR SIOCSIFHWBROADCAST SIOCGIFMAP SIOCSIFMAP sendfile
+% LocalWords: SIOCADDMULTI SIOCDELMULTI SIOCGIFTXQLEN SIOCSIFTXQLEN three syn
+% LocalWords: SIOCSIFNAME SIOCGIFCONF handshake retries MIN FreeBSD closing Mb
+% LocalWords: abort overflow adv win app bic convergence dsack ecn fack frto
+% LocalWords: intvl probes latency orphans l'ACK SYNQ HSIZE tw buckets mem rfc
+% LocalWords: orphan reordering collapse sack stdurg synack syncookies recycle
+% LocalWords: timestamps scaling vegas avoid westwood tcpi l'incapsulazione NR
+% LocalWords: metric EOPNOTSUPP mtu hwaddr ARPHRD interrupt DMA map qlen silly
+% LocalWords: rename ifconf syndrome dell'ACK FTP ACCEPTFILTER advanced reno
+% LocalWords: congestion control Networking cubic CUBIC highspeed HSTCP htcp
+% LocalWords: HTCP hybla HYBLA scalable SCALABLE ifc req iflist access ntoa Kb
+% LocalWords: hop Selective acknowledgement Explicit RTO stack firewall passwd
+% LocalWords: Notification wireless denial pressure ATTACH DETACH publickey
+% LocalWords: libpcap discovery point l'overhaed min PAGE flood NFS blast
+% LocalWords: selective COOKIES NAT Translation