X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=sockctrl.tex;h=a1f5d8be3e2497085a63db0678e424691518f3b6;hp=66f480f7657b2211a634cafe58fcfd6592fb36c2;hb=a48e8dfeb4b05b57eab2336c7d2e0aaf6b9bd572;hpb=3baefd41c790c995a2ca8e25bf5b56ad4eec6c83 diff --git a/sockctrl.tex b/sockctrl.tex index 66f480f..a1f5d8b 100644 --- a/sockctrl.tex +++ b/sockctrl.tex @@ -2107,7 +2107,7 @@ tab.~\ref{tab:sock_opt_socklevel} sul significato delle varie opzioni: \func{setsockopt} darà un errore di \errcode{ENOPROTOOPT}. \item[\const{SO\_SNDLOWAT}] questa opzione imposta il valore che indica il - numero minimo di byte che devono essere presenti nel buffer di scrittura + numero minimo di byte che devono essere presenti nel buffer di trasmissione perché il kernel li invii al protocollo successivo, consentendo ad una \func{write} di ritornare o segnalando ad una \func{select} (vedi sez.~\ref{sec:TCP_sock_select}) che è possibile eseguire una scrittura. @@ -2240,17 +2240,17 @@ tab.~\ref{tab:sock_opt_socklevel} sul significato delle varie opzioni: tipo \const{SOCK\_STREAM}. \item[\const{SO\_SNDBUF}] questa opzione imposta la dimensione del buffer di - uscita del socket. Prende per \param{optval} un intero indicante il numero - di byte. Il valore di default ed il valore massimo che si possono + trasmissione del socket. Prende per \param{optval} un intero indicante il + numero di byte. Il valore di default ed il valore massimo che si possono specificare come argomento per questa opzione sono impostabili rispettivamente tramite gli opportuni valori di \func{sysctl} (vedi sez.~\ref{sec:sock_sysctl}). \item[\const{SO\_RCVBUF}] questa opzione imposta la dimensione del buffer di - ingresso del socket. Prende per \param{optval} un intero indicante il numero - di byte. Il valore di default ed il valore massimo che si può specificare - come argomento per questa opzione sono impostabili tramiti gli opportuni - valori di \func{sysctl} (vedi sez.~\ref{sec:sock_sysctl}). + ricezione del socket. Prende per \param{optval} un intero indicante il + numero di byte. Il valore di default ed il valore massimo che si può + specificare come argomento per questa opzione sono impostabili tramiti gli + opportuni valori di \func{sysctl} (vedi sez.~\ref{sec:sock_sysctl}). Si tenga presente che nel caso di socket TCP, per entrambe le opzioni \const{SO\_RCVBUF} e \const{SO\_SNDBUF}, il kernel alloca effettivamente una @@ -2267,7 +2267,7 @@ tab.~\ref{tab:sock_opt_socklevel} sul significato delle varie opzioni: \procrelfile{/proc/sys/net/ipv4}{tcp\_rmem} in \texttt{/proc/sys/net/ipv4}, vedi sez.~\ref{sec:sock_sysctl}.} indica la memoria effettivamente impiegata. Si tenga presente inoltre che le - modifiche alle dimensioni dei buffer di ingresso e di uscita, per poter + modifiche alle dimensioni dei buffer di ricezione e trasmissione, per poter essere effettive, devono essere impostate prima della chiamata alle funzioni \func{listen} o \func{connect}. @@ -2304,7 +2304,7 @@ tab.~\ref{tab:sock_opt_socklevel} sul significato delle varie opzioni: \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 + fra tutti quelli ricevuti, verranno letti. Viene usato principalmente 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}. @@ -2407,7 +2407,7 @@ comunicare con il server via rete. \end{figure} Abilitandola dopo un certo tempo le connessioni effettivamente terminate -verrano comunque chiuse per cui, utilizzando ad esempio una \func{select}, se +verranno comunque chiuse per cui, utilizzando ad esempio una \func{select}, se be potrà rilevare la conclusione e ricevere il relativo errore. Si tenga presente però che non può avere la certezza assoluta che un errore di \errcode{ETIMEDOUT} ottenuto dopo aver abilitato questa opzione corrisponda @@ -2762,7 +2762,7 @@ sono definite in \file{netinet/ip.h}, ed accessibili includendo detto file. \const{IP\_DROP\_MEMBERSHIP}& &$\bullet$& &\struct{ip\_mreqn}& Si sgancia da un gruppo di \textit{multicast}.\\ \const{IP\_MULTICAST\_IF} & &$\bullet$& &\struct{ip\_mreqn}& - Omposta l'interfaccia locale di un socket \itindex{multicast} + Imposta l'interfaccia locale di un socket \itindex{multicast} \textit{multicast}.\\ \hline \end{tabular} @@ -3121,9 +3121,10 @@ quantit quando un programma di terminale invia un segmento TCP per ogni tasto premuto, 40 byte di intestazione di protocollo con 1 byte di dati trasmessi; per evitare situazioni del genere è stato introdotto - l'\textsl{algoritmo di Nagle}.} Questo meccanismo è controllato da un - apposito algoritmo (detto \textsl{algoritmo di Nagle}, vedi - sez.~\ref{sez:tcp_protocol_xxx}). Il comportamento normale del protocollo + \index{algoritmo~di~Nagle} l'\textsl{algoritmo di Nagle}.} Questo + meccanismo è controllato da un apposito algoritmo (detto + \index{algoritmo~di~Nagle} \textsl{algoritmo di Nagle}, vedi + sez.~\ref{sez:tcp_protocol_xxx}). Il comportamento normale del protocollo prevede che i dati siano accumulati fintanto che non si raggiunge una quantità considerata adeguata per eseguire la trasmissione di un singolo segmento. @@ -3134,10 +3135,11 @@ quantit richiesta HTTP.} in tal caso l'attesa introdotta dall'algoritmo di bufferizzazione non soltanto è inutile, ma peggiora le prestazioni introducendo un ritardo. Impostando questa opzione si disabilita l'uso - dell'\textsl{algoritmo di Nagle} ed i dati vengono inviati immediatamente in - singoli segmenti, qualunque sia la loro dimensione. Ovviamente l'uso di - questa opzione è dedicato a chi ha esigenze particolari come quella - illustrata, che possono essere stabilite solo per la singola applicazione. + \index{algoritmo~di~Nagle} dell'\textsl{algoritmo di Nagle} ed i dati + vengono inviati immediatamente in singoli segmenti, qualunque sia la loro + dimensione. Ovviamente l'uso di questa opzione è dedicato a chi ha esigenze + particolari come quella illustrata, che possono essere stabilite solo per la + singola applicazione. Si tenga conto che questa opzione viene sovrascritta dall'eventuale impostazione dell'opzione \const{TCP\_CORK} (il cui scopo è sostanzialmente @@ -3160,15 +3162,15 @@ quantit \item[\const{TCP\_CORK}] questa opzione è il complemento naturale di \const{TCP\_NODELAY} e serve a gestire a livello applicativo la situazione opposta, cioè quella in cui si sa fin dal principio che si dovranno inviare - grosse quantità di dati. Anche in questo caso l'\textsl{algoritmo di Nagle} - tenderà a suddividerli in dimensioni da lui ritenute - opportune,\footnote{l'algoritmo cerca di tenere conto di queste situazioni, - ma essendo un algoritmo generico tenderà comunque ad introdurre delle - suddivisioni in segmenti diversi, anche quando potrebbero non essere - necessarie, con conseguente spreco di banda.} ma sapendo fin dall'inizio - quale è la dimensione dei dati si potranno di nuovo ottenere delle migliori - prestazioni disabilitandolo, e gestendo direttamente l'invio del nostro - blocco di dati in soluzione unica. + grosse quantità di dati. Anche in questo caso \index{algoritmo~di~Nagle} + l'\textsl{algoritmo di Nagle} tenderà a suddividerli in dimensioni da lui + ritenute opportune,\footnote{l'algoritmo cerca di tenere conto di queste + situazioni, ma essendo un algoritmo generico tenderà comunque ad + introdurre delle suddivisioni in segmenti diversi, anche quando potrebbero + non essere necessarie, con conseguente spreco di banda.} ma sapendo fin + dall'inizio quale è la dimensione dei dati si potranno di nuovo ottenere + delle migliori prestazioni disabilitandolo, e gestendo direttamente l'invio + del nostro blocco di dati in soluzione unica. Quando questa opzione viene abilitata non vengono inviati segmenti di dati fintanto che essa non venga disabilitata; a quel punto tutti i dati rimasti @@ -3983,35 +3985,36 @@ corrispondono a nessun nodo di \func{sysctl}. \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. + di default del buffer di ricezione (cioè per i dati in ingresso) dei socket. \item[\procrelfile{/proc/sys/net/core}{rmem\_max}] imposta la dimensione - massima che si può assegnare al buffer di ingresso dei socket attraverso + massima che si può assegnare al buffer di ricezione dei socket attraverso l'uso dell'opzione \const{SO\_RCVBUF}. \item[\procrelfile{/proc/sys/net/core}{wmem\_default}] imposta la dimensione - di default del buffer di scrittura (cioè per i dati in uscita) dei socket. + di default del buffer di trasmissione (cioè per i dati in uscita) dei + socket. \item[\procrelfile{/proc/sys/net/core}{wmem\_max}] imposta la dimensione - massima che si può assegnare al buffer di uscita dei socket attraverso l'uso - dell'opzione \const{SO\_SNDBUF}. + massima che si può assegnare al buffer di trasmissione dei socket attraverso + l'uso dell'opzione \const{SO\_SNDBUF}. \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 @@ -4041,7 +4044,7 @@ Oltre a questi nella directory \texttt{/proc/sys/net/core} si trovano altri 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. @@ -4086,7 +4089,7 @@ 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{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 @@ -4097,7 +4100,7 @@ di manuale accessibile con \texttt{man 7 ip}, sono i seguenti: valore di default è 64, e normalmente non c'è nessuna necessità di modificarlo.\footnote{l'unico motivo sarebbe per raggiungere macchine estremamente ``{lontane}'' in termini di \textit{hop}, ma è praticamente - impossible trovarne.} Aumentare il valore è una pratica poco gentile, in + impossibile trovarne.} Aumentare il valore è una pratica poco gentile, in quanto in caso di problemi di routing si allunga inutilmente il numero di ritrasmissioni. @@ -4154,9 +4157,10 @@ di manuale accessibile con \texttt{man 7 ip}, sono i seguenti: 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 @@ -4187,7 +4191,7 @@ di manuale accessibile con \texttt{man 7 ip}, sono i seguenti: 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 @@ -4239,7 +4243,7 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti: \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} @@ -4269,7 +4273,7 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti: 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}. @@ -4322,7 +4326,8 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti: 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 @@ -4350,21 +4355,25 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti: 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 utilizzerà 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 @@ -4404,7 +4413,6 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti: 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 @@ -4416,77 +4424,153 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti: \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 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 (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. - -\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}] + 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 \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}] + 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*} -\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_westwood}] +\end{basedescript} -\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_wmem}] -\end{basedescript} % LocalWords: socket sez dotted decimal resolver Domain Name Service cap DNS % LocalWords: client fig LDAP Lightweight Access Protocol NIS Information Sun @@ -4562,9 +4646,11 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti: % 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 -% LocalWords: hop Selective Acknowledgement acknowledgement Explicit RTO stack -% LocalWords: Notification wireless denial pressure +% LocalWords: HTCP hybla HYBLA scalable SCALABLE ifc req iflist access ntoa Kb +% LocalWords: hop Selective acknowledgement Explicit RTO stack firewall +% LocalWords: Notification wireless denial pressure ATTACH DETACH +% LocalWords: libpcap discovery point l'overhaed min PAGE flood +% LocalWords: selective COOKIES NAT %%% Local Variables: %%% mode: latex