From d497e85d00a74fa8d7fdec19e334d10b9f8aee41 Mon Sep 17 00:00:00 2001 From: Simone Piccardi Date: Fri, 27 Oct 2006 19:30:05 +0000 Subject: [PATCH] Materiale scritto in treno. --- sockctrl.tex | 127 ++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 106 insertions(+), 21 deletions(-) diff --git a/sockctrl.tex b/sockctrl.tex index ef79762..79cb8c6 100644 --- a/sockctrl.tex +++ b/sockctrl.tex @@ -4145,15 +4145,29 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti: possibile ottimizzare il server in modo che sia in grado di accettare connessioni più rapidamente. -\item[\texttt{tcp\_adv\_win\_scale}] questo valore indica al kernel quanto - spazio all'interno del buffer associato a un socket (quello impostato con - \texttt{tcp\_rmem}) deve essere utilizzato per la - -\item[\texttt{tcp\_app\_win}] - -\item[\texttt{tcp\_bic}] -\item[\texttt{tcp\_bic\_low\_window}] -\item[\texttt{tcp\_bic\_fast\_convergence}] +\item[\texttt{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 + $\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. + +\item[\texttt{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. + +% 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[\texttt{tcp\_dsack}] Abilita il supporto definito nell'\href{http://www.ietf.org/rfc/rfc2884.txt}{RFC~2884} per il @@ -4170,7 +4184,9 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti: alcuni vecchi router non supportano il meccanismo ed alla sua attivazione scartano i relativi pacchetti.\\ -\item[\texttt{tcp\_fack}] +\item[\texttt{tcp\_fack}] è un valore logico che abilita il supporto per il + \textit{TCP Forward Acknowledgement}. Di default è abilitato. +% TODO documentare o descrivere che cos'è il TCP Forward Acknowledgement \item[\texttt{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 @@ -4181,13 +4197,50 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti: alcuni attacchi di \itindex{Denial~of~Service~(DoS)} \textit{Denial of Service}. - -\item[\texttt{tcp\_frto}] -\item[\texttt{tcp\_keepalive\_intvl}] -\item[\texttt{tcp\_keepalive\_probes}] -\item[\texttt{tcp\_keepalive\_time}] -\item[\texttt{tcp\_low\_latency}] -\item[\texttt{tcp\_max\_orphans}] +\item[\texttt{tcp\_frto}] è un valore logico che abilita il supporto per + l'algoritmo F-RTO, un algoritmo usato per la ritrasmissione dei timout 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 è disabilitato. + + +\item[\texttt{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[\texttt{tcp\_keepalive\_probes}] 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[\texttt{tcp\_keepalive\_time}] il nummero 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[\texttt{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[\texttt{tcp\_max\_orphans}] il numero massimo di socjet 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 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[\texttt{tcp\_max\_syn\_backlog}] un numero intero che indica la lunghezza della coda delle connessioni incomplete, cioè delle connessioni @@ -4206,10 +4259,42 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti: sia $\mathtt{tcp\_max\_syn\_backlog} \ge \mathtt{16*TCP\_SYNQ\_HSIZE}$, per poi ricompilare il kernel.} -\item[\texttt{tcp\_max\_tw\_buckets}] -\item[\texttt{tcp\_mem}] -\item[\texttt{tcp\_orphan\_retries}] -\item[\texttt{tcp\_reordering}] +\item[\texttt{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. + + +\item[\texttt{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. + + 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 precendete valore \textit{low}. + + 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[\texttt{tcp\_orphan\_retries}] 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. + +\item[\texttt{tcp\_reordering}] il numero massimo di volte che un pacchetto + può essere riordinato nel flusso di dati, prima che lo staack 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. + \item[\texttt{tcp\_retrans\_collapse}] \item[\texttt{tcp\_retries1}] imposta il massimo numero di volte che -- 2.30.2