From a48e8dfeb4b05b57eab2336c7d2e0aaf6b9bd572 Mon Sep 17 00:00:00 2001 From: Simone Piccardi Date: Tue, 4 Sep 2007 13:48:22 +0000 Subject: [PATCH] Correzioni ortografiche e materiale su sysctl del TCP --- errors.tex | 2 +- fileadv.tex | 17 +++--- filedir.tex | 16 +++--- netlayer.tex | 2 +- process.tex | 7 ++- sockctrl.tex | 154 +++++++++++++++++++++++++++++++++------------------ system.tex | 2 +- tcpsock.tex | 10 ++-- thread.tex | 8 ++- 9 files changed, 134 insertions(+), 84 deletions(-) diff --git a/errors.tex b/errors.tex index 692d179..1b739be 100644 --- a/errors.tex +++ b/errors.tex @@ -500,7 +500,7 @@ messaggio. % LocalWords: SysV EMULTIHOP Multihop attempted ENODATA ENOLINK been severed % LocalWords: ENOMSG desired ENOSR streams resources ENOSTR stream EOVERFLOW % LocalWords: Value large defined STAT EPROTO ETIME Timer expired group wait -% LocalWords: waitpid Specification cap USB did respond +% LocalWords: waitpid Specification cap USB did respond Stale %%% Local Variables: diff --git a/fileadv.tex b/fileadv.tex index 4b60313..e881d60 100644 --- a/fileadv.tex +++ b/fileadv.tex @@ -3389,7 +3389,7 @@ all'accesso al disco; il suo prototipo La funzione richiede che venga letto in anticipo il contenuto del file \param{fd} a partire dalla posizione \param{offset} e per un ammontare di -\param{count} bytes, in modo da portarlo in cache. La funzione usa la +\param{count} byte, in modo da portarlo in cache. La funzione usa la \index{memoria~virtuale} memoria virtuale ed il meccanismo della \index{paginazione} paginazione per cui la lettura viene eseguita in blocchi corrispondenti alle dimensioni delle pagine di memoria, ed i valori di @@ -3444,13 +3444,13 @@ definisce la macro \macro{\_XOPEN\_SOURCE} ad almeno 600, La funzione dichiara al kernel le modalità con cui intende accedere alla regione del file indicato da \param{fd} che inizia alla posizione \param{offset} e si estende per \param{len} byte. Se per \param{len} si usa un -valora nullo la regione coperta sarà da \param{offset} alla fine del +valore nullo la regione coperta sarà da \param{offset} alla fine del file.\footnote{questo è vero solo per le versioni più recenti, fino al kernel 2.6.6 il valore nullo veniva interpretato letteralmente.} Le modalità sono indicate dall'argomento \param{advice} che è una maschera binaria dei valori illustrati in tab.~\ref{tab:posix_fadvise_flag}. Si tenga presente comunque che la funzione dà soltanto un avvertimento, non esiste nessun vincolo per il -kernel, che utilzza semplicemente l'informazione. +kernel, che utilizza semplicemente l'informazione. \begin{table}[htb] \centering @@ -3465,11 +3465,11 @@ kernel, che utilzza semplicemente l'informazione. comportamento sarà identico a quello che si avrebbe senza nessun avviso.\\ \const{POSIX\_FADV\_SEQUENTIAL}& L'applicazione si aspetta di accedere di - accedere ai dati spercificati in maniera + accedere ai dati specificati in maniera sequenziale, a partire dalle posizioni più basse.\\ \const{POSIX\_FADV\_RANDOM} & I dati saranno letti in maniera - completamete causale.\\ + completamente causale.\\ \const{POSIX\_FADV\_NOREUSE} & I dati saranno acceduti una sola volta.\\ \const{POSIX\_FADV\_WILLNEED}& I dati saranno acceduti a breve.\\ \const{POSIX\_FADV\_DONTNEED}& I dati non saranno acceduti a breve.\\ @@ -3484,7 +3484,7 @@ kernel, che utilzza semplicemente l'informazione. Anche \func{posix\_fadvise} si appoggia al sistema della memoria virtuale ed al meccanismo standard del \textit{readahead} utilizzato dal kernel; in particolare con \const{POSIX\_FADV\_SEQUENTIAL} si raddoppia la dimensione -dell'ammontare di dati letti preventivamente rispetto al default, apettandosi +dell'ammontare di dati letti preventivamente rispetto al default, aspettandosi appunto una lettura sequenziale che li utilizzerà, mentre con \const{POSIX\_FADV\_RANDOM} si disabilita del tutto il suddetto meccanismo, dato che con un accesso del tutto casuale è inutile mettersi a leggere i dati @@ -3548,7 +3548,7 @@ possibile scrivere sul file indicato dall'argomento \param{fd} nella regione che inizia dalla posizione \param{offset} e si estende per \param{len} byte; se questa si estende oltre la fine del file le dimensioni di quest'ultimo saranno incrementate di conseguenza. Dopo aver eseguito con successo la -funzione è garantito che una scrittura nella regione inidicata non fallirà per +funzione è garantito che una scrittura nella regione indicata non fallirà per mancanza di spazio disco. @@ -4467,10 +4467,11 @@ possibilit % LocalWords: NUL sizeof casting printevent nread limits sysconf SC wrapper Di % LocalWords: splice result argument DMA controller zerocopy Linus Larry Voy % LocalWords: Jens Anxboe vmsplice seek ESPIPE GIFT TCP CORK MSG splicecp nr -% LocalWords: nwrite segs patch readahead +% LocalWords: nwrite segs patch readahead posix fadvise TC advice FADV NORMAL %%% Local Variables: %%% mode: latex %%% TeX-master: "gapil" %%% End: +% LocalWords: SEQUENTIAL NOREUSE WILLNEED DONTNEED streaming fallocate EFBIG diff --git a/filedir.tex b/filedir.tex index e4d61d0..04eef2a 100644 --- a/filedir.tex +++ b/filedir.tex @@ -525,7 +525,7 @@ sia come \itindex{pathname} \textit{pathname} assoluto che come \itindex{pathname} \textit{pathname} relativo. I permessi di accesso (vedi sez.~\ref{sec:file_access_control}) con cui la -directory viene creata sono specificati dall'argomemto \param{mode}, i cui +directory viene creata sono specificati dall'argomento \param{mode}, i cui possibili valori sono riportati in tab.~\ref{tab:file_permission_const}; si tenga presente che questi sono modificati dalla maschera di creazione dei file (si veda sez.~\ref{sec:file_perm_management}). La titolarità della nuova @@ -2558,7 +2558,7 @@ 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 nella prossimaa sezione, ma si possono inserire anche altre + che tratteremo nella prossima 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 @@ -2597,7 +2597,7 @@ le esigenze pi rispondere in maniera adeguata a situazioni che richiedono una gestione complessa dei permessi di accesso.\footnote{già un requisito come quello di dare accesso in scrittura ad alcune persone ed in sola lettura ad altre non - si può soddisfare in maniera soddifacente.} + si può soddisfare in maniera soddisfacente.} Per questo motivo erano state progressivamente introdotte nelle varie versioni di Unix dei meccanismi di gestione dei permessi dei file più flessibili, nella @@ -2611,14 +2611,14 @@ Gli obiettivi erano per finanziamenti vennero ritirati senza che si fosse arrivati alla definizione di uno standard, dato però che una parte della documentazione prodotta era di alta qualità venne deciso di rilasciare al pubblico la diciassettesima bozza -del documento, quella che va sotto il nome di POSIX 1003.1e Draft 17, che è -divenuta la base sulla quale si definiscono quelle che vanno sotto il nome di -\textit{Posix ACL}. +del documento, quella che va sotto il nome di \textit{POSIX 1003.1e Draft 17}, +che è divenuta la base sulla quale si definiscono quelle che vanno sotto il +nome di \textit{Posix ACL}. A differenza di altri sistemi (ad esempio FreeBSD) nel caso di Linux si è scelto di realizzare le ACL attraverso l'interfaccia degli \textit{Extended Attributes}, e fornire tutte le relative funzioni di gestione tramite una -liberia, \texttt{libacl} che nasconde i dettagli implementativi delle stesse e +libreria, \texttt{libacl} che nasconde i dettagli implementativi delle stesse e presenta ai programmi una interfaccia che fa riferimento allo standard POSIX 1003.1e. @@ -2757,7 +2757,7 @@ programmi e librerie) di cui il server potrebbe avere bisogno. % LocalWords: gid Control List patch mandatory control execute group other all % LocalWords: dell' effective passwd IGID locking swap saved text IRWXU IRWXG % LocalWords: IRWXO ext reiser capability FSETID mask capabilities chroot jail -% LocalWords: FTP Di filter reiserfs +% LocalWords: FTP Di filter reiserfs Attributes Solaris Posix FreeBSD libacl %%% Local Variables: %%% mode: latex diff --git a/netlayer.tex b/netlayer.tex index a992e0c..a9c7222 100644 --- a/netlayer.tex +++ b/netlayer.tex @@ -7,7 +7,7 @@ %% 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". -%% +%% \chapter{Il livello di rete} \label{cha:network_layer} diff --git a/process.tex b/process.tex index b5cfe14..2daf77d 100644 --- a/process.tex +++ b/process.tex @@ -50,7 +50,7 @@ specificato il flag \texttt{-static} durante la compilazione, tutti i programmi in Linux sono incompleti e necessitano di essere \textsl{collegati} alle librerie condivise quando vengono avviati. La procedura è controllata da alcune variabili di ambiente e dal contenuto di \conffile{/etc/ld.so.conf}. I -dettagli sono riportati nella man page di \cmd{ld.so}. +dettagli sono riportati nella pagina di manuale di \cmd{ld.so}. Il sistema fa partire qualunque programma chiamando la funzione \func{main}; sta al programmatore chiamare così la funzione principale del programma da cui @@ -406,7 +406,7 @@ seguenti segmenti: automaticamente il codice necessario, seguendo quella che viene chiamata una \textit{calling convention}; quella standard usata con il C ed il C++ è detta \textit{cdecl} e prevede che gli argomenti siano caricati nello - stack fal chiamante da destra a sinistra, e che si il chimante stesso ad + stack dal chiamante da destra a sinistra, e che si il chiamante stesso ad eseguire la ripulitura dello stack al ritorno della funzione, se ne possono però utilizzare di alternative (ad esempio nel pascal gli argomenti sono inseriti da sinistra a destra ed è compito del chiamato @@ -1712,7 +1712,8 @@ dichiarandole tutte come \direct{volatile}.\footnote{la direttiva % LocalWords: clearenv libc value overwrite string reference result argument % LocalWords: socket variadic ellipsis header stdarg execl self promoting last % LocalWords: float double short register type dest src extern setjmp jmp buf -% LocalWords: env return if while sottoprocesso Di +% LocalWords: env return if while Di page cdecl +% LocalWords: environment %%% Local Variables: %%% mode: latex diff --git a/sockctrl.tex b/sockctrl.tex index f5a4c43..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 @@ -3990,15 +3992,16 @@ socket. Quelli descritti anche nella pagina di manuale, accessibile con \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 @@ -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. @@ -4353,7 +4356,7 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti: \item[\procrelfile{/proc/sys/net/ipv4}{tcp\_mem}] viene usato dallo stack TCP - per gestire le modalità con cui esso utlizzerà la memoria. Prende una + per gestire le modalità con cui esso utilizzerà la memoria. Prende una tripletta di valori interi, che indicano un numero di pagine: \begin{itemize*} @@ -4425,13 +4428,13 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti: \begin{itemize*} \item il primo valore, chiamato \textit{min} nelle pagine di manuale, indica - la dimensione minima del buffer di ricezione; il default è 4Kb, ma in - sistemi con poca memoria viene automaticamente ridotto a + 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\_mem}) le allocazioni al di sotto di + \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 lettura di un singolo socket + 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 @@ -4447,17 +4450,17 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti: \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 + indica la dimensione massima in byte del buffer di ricezione di un socket + TCP; il default è 174760 byte, che viene ridotto automaticamente a 87380 + per sistemi con poca memoria. Il valore non può comunque eccedere il limite generale per tutti i socket posto con \procfile{/proc/sys/net/core/rmem\_max}. Questo valore non viene ad - incidere sulla dimensione del buffer di lettura di un singolo socket + 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 aknowledment} definito + 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. @@ -4471,12 +4474,12 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti: dar luogo a problemi di interoperabilità. \item[\procrelfile{/proc/sys/net/ipv4}{tcp\_synack\_retries}] indica il numero - massimo di volte che verrà ritasmesso il segmento SYN/ACK nella creazione di + 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 quasta funzionalità è necessario + 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 @@ -4499,7 +4502,12 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti: \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. + 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 @@ -4516,17 +4524,51 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti: aumentarne le dimensioni. Questa è pienamente supportata dallo stack TCP di Linux, ma se lo si disabilita la negoziazione del \itindex{TCP~window~scaling} \textit{TCP window scaling} con l'altro capo - della conessione non viene effettuata. - -\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_vegas\_cong\_avoid}] + della connessione non viene effettuata. -\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_westwood}] +%\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_vegas\_cong\_avoid}] +% TODO: controllare su internet -\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_wmem}] +%\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_westwood}] +% TODO: controllare su internet -\end{basedescript} +\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} @@ -4604,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 diff --git a/system.tex b/system.tex index d33c0c8..469e2ea 100644 --- a/system.tex +++ b/system.tex @@ -2696,7 +2696,7 @@ che errori relativi alla stessa linea non vengano ripetuti. % LocalWords: strftime thread EOF modifiable lvalue app errcode strerror LC at % LocalWords: perror string errnum MESSAGES error message ErrCode strtol log % LocalWords: program invocation argv printf print progname exit count fname -% LocalWords: lineno one standardese Di +% LocalWords: lineno one standardese Di page diff --git a/tcpsock.tex b/tcpsock.tex index ff3a218..5378a2d 100644 --- a/tcpsock.tex +++ b/tcpsock.tex @@ -165,12 +165,12 @@ connessione. Normalmente vengono usate le seguenti opzioni: spostare a sinistra il valore della finestra annunciata inserito nel pacchetto). Con Linux è possibile indicare al kernel di far negoziare il fattore di scala in fase di creazione di una connessione tramite la - \textit{sysctl} \texttt{tcp\_window\_scaling} (vedi - sez.~\ref{sec:sock_ipv4_sysctl}).\footnote{per poter usare questa + \textit{sysctl} \itindex{TCP~window~scaling} \texttt{tcp\_window\_scaling} + (vedi sez.~\ref{sec:sock_ipv4_sysctl}).\footnote{per poter usare questa funzionalità è comunque necessario ampliare le dimensioni dei buffer di ricezione e spedizione, cosa che può essere fatta sia a livello di sistema - con le opportune \textit{sysctl} (vedi sez.~\ref{sec:sock_ipv4_sysctl}) che - a livello di singoli socket con le relative opzioni (vedi + con le opportune \textit{sysctl} (vedi sez.~\ref{sec:sock_ipv4_sysctl}) + che a livello di singoli socket con le relative opzioni (vedi sez.~\ref{sec:sock_tcp_udp_options}).} \item \textit{timestamp option}, è anche questa una nuova opzione necessaria @@ -1980,7 +1980,7 @@ in sez.~\ref{sec:file_line_io} a proposito dell'I/O su terminale), solo allora \func{fgets} ritornerà ed il client scriverà quanto immesso sul socket, per poi passare a rileggere quanto gli viene inviato all'indietro dal server, che a sua volta sarà inviato sullo standard output, che nel caso ne provoca -l'immediatamente stampa a video. +l'immediata stampa a video. \subsection{La conclusione normale} diff --git a/thread.tex b/thread.tex index b541e07..a42e2cc 100644 --- a/thread.tex +++ b/thread.tex @@ -14,7 +14,7 @@ Tratteremo in questo capitolo un modello di programmazione multitasking, quello dei \textit{thread}, alternativo al modello classico dei processi, -tipico di Unix. Ne esaminiremo le caratteristiche, vantaggi e svantaggi, e le +tipico di Unix. Ne esamineremo le caratteristiche, vantaggi e svantaggi, e le diverse realizzazioni che sono disponibili per Linux; nella seconda parte tratteremo in dettaglio quella che è l'implementazione principale, che fa riferimento all'interfaccia standardizzata da POSIX.1e. @@ -25,7 +25,7 @@ riferimento all'interfaccia standardizzata da POSIX.1e. Questa prima sezione costituisce una introduzione ai \textit{thread} e tratterà i concetti principali del relativo modello di programmazione, -esamineremo anche queli modelli sono disponibili per Linux, dando una breve +esamineremo anche quali modelli sono disponibili per Linux, dando una breve panoramica sulle implementazioni alternative. @@ -101,7 +101,11 @@ delle \acr{glibc}. +% LocalWords: thread multitasking POSIX sez Posix Library kernel glibc mutex + + %%% Local Variables: %%% mode: latex %%% TeX-master: "gapil" %%% End: + -- 2.30.2