panoramica generale. Originariamente la configurazione del \textit{resolver}
riguardava esclusivamente le questioni relative alla gestione dei nomi a
dominio, e prevedeva solo l'utilizzo del DNS e del file statico
-\file{/etc/hosts}.
+\conffile{/etc/hosts}.
Per questo aspetto il file di configurazione principale del sistema è
-\file{/etc/resolv.conf} che contiene in sostanza l'elenco degli indirizzi IP
-dei server DNS da contattare; a questo si affianca il file
-\file{/etc/host.conf} il cui scopo principale è indicare l'ordine in cui
-eseguire la risoluzione dei nomi (se usare prima i valori di \file{/etc/hosts}
-o quelli del DNS). Tralasciamo i dettagli relativi alle varie direttive che
-possono essere usate in questi file, che si trovano nelle rispettive pagine di
-manuale.
+\conffile{/etc/resolv.conf} che contiene in sostanza l'elenco degli indirizzi
+IP dei server DNS da contattare; a questo si affianca il file
+\conffile{/etc/host.conf} il cui scopo principale è indicare l'ordine in cui
+eseguire la risoluzione dei nomi (se usare prima i valori di
+\conffile{/etc/hosts} o quelli del DNS). Tralasciamo i dettagli relativi alle
+varie direttive che possono essere usate in questi file, che si trovano nelle
+rispettive pagine di manuale.
Con il tempo però è divenuto possibile fornire diversi sostituti per
-l'utilizzo delle associazione statiche in \file{/etc/hosts}, inoltre oltre
+l'utilizzo delle associazione statiche in \conffile{/etc/hosts}, inoltre oltre
alla risoluzione dei nomi a dominio ci sono anche altri nomi da risolvere,
come quelli che possono essere associati ad una rete (invece che ad una
singola macchina) o ai gruppi di macchine definiti dal servizio
\textit{netgroup}) varie macchine, centralizzando i servizi di definizione
di utenti e gruppi e di autenticazione, oggi è sempre più spesso sostituito
da LDAP.} o come quelli dei protocolli e dei servizi che sono mantenuti nei
-file statici \file{/etc/protocols} e \file{/etc/services}. Molte di queste
-informazioni non si trovano su un DNS, ma in una rete locale può essere molto
-utile centralizzare il mantenimento di alcune di esse su opportuni server.
-Inoltre l'uso di diversi supporti possibili per le stesse informazioni (ad
-esempio il nome delle macchine può essere mantenuto sia tramite
-\file{/etc/hosts}, che con il DNS, che con NIS) comporta il problema
-dell'ordine in cui questi vengono interrogati.\footnote{con le implementazioni
- classiche i vari supporti erano introdotti modificando direttamente le
- funzioni di libreria, prevedendo un ordine di interrogazione predefinito e
- non modificabile (a meno di una ricompilazione delle librerie stesse).}
+file statici \conffile{/etc/protocols} e \conffile{/etc/services}. Molte di
+queste informazioni non si trovano su un DNS, ma in una rete locale può essere
+molto utile centralizzare il mantenimento di alcune di esse su opportuni
+server. Inoltre l'uso di diversi supporti possibili per le stesse
+informazioni (ad esempio il nome delle macchine può essere mantenuto sia
+tramite \conffile{/etc/hosts}, che con il DNS, che con NIS) comporta il
+problema dell'ordine in cui questi vengono interrogati.\footnote{con le
+ implementazioni classiche i vari supporti erano introdotti modificando
+ direttamente le funzioni di libreria, prevedendo un ordine di interrogazione
+ predefinito e non modificabile (a meno di una ricompilazione delle librerie
+ stesse).}
\itindbeg{Name~Service~Switch}
Per risolvere questa serie di problemi la risoluzione dei nomi a dominio
\textbf{Classe} & \textbf{Tipo di corrispondenza}\\
\hline
\hline
- \texttt{shadow} & corrispondenze fra username e proprietà dell'utente
- (\acr{uid}, ecc.).\\
- \texttt{group} & corrispondenze fra nome del gruppo e proprietà dello
+ \texttt{shadow} & Corrispondenze fra username e proprietà dell'utente
+ (\acr{uid}, ecc.).\\
+ \texttt{group} & Corrispondenze fra nome del gruppo e proprietà dello
stesso.\\
- \texttt{aliases} & alias per la posta elettronica.\\
- \texttt{ethers} & corrispondenze fra numero IP e MAC address della
+ \texttt{aliases} & Alias per la posta elettronica.\\
+ \texttt{ethers} & Corrispondenze fra numero IP e MAC address della
scheda di rete.\\
- \texttt{hosts} & corrispondenze fra nome a dominio e numero IP.\\
- \texttt{netgroup} & corrispondenze gruppo di rete e macchine che lo
+ \texttt{hosts} & Corrispondenze fra nome a dominio e numero IP.\\
+ \texttt{netgroup} & Corrispondenze gruppo di rete e macchine che lo
compongono.\\
- \texttt{networks} & corrispondenze fra nome di una rete e suo indirizzo
+ \texttt{networks} & Corrispondenze fra nome di una rete e suo indirizzo
IP.\\
- \texttt{protocols}& corrispondenze fra nome di un protocollo e relativo
+ \texttt{protocols}& Corrispondenze fra nome di un protocollo e relativo
numero identificativo.\\
- \texttt{rpc} & corrispondenze fra nome di un servizio RPC e relativo
+ \texttt{rpc} & Corrispondenze fra nome di un servizio RPC e relativo
numero identificativo.\\
- \texttt{services} & corrispondenze fra nome di un servizio e numero di
+ \texttt{services} & Corrispondenze fra nome di un servizio e numero di
porta. \\
\hline
\end{tabular}
\label{tab:sys_NSS_classes}
\end{table}
-Il sistema del \textit{Name Service Switch} è controllato dal contenuto del
-file \file{/etc/nsswitch.conf}; questo contiene una riga\footnote{seguendo una
- convezione comune per i file di configurazione le righe vuote vengono
- ignorate e tutto quello che segue un carattere ``\texttt{\#}'' viene
- considerato un commento.} di configurazione per ciascuna di queste classi,
-che viene inizia col nome di tab.~\ref{tab:sys_NSS_classes} seguito da un
-carattere ``\texttt{:}'' e prosegue con la lista dei \textsl{servizi} su cui
-le relative informazioni sono raggiungibili, scritti nell'ordine in cui si
+Il sistema del \textit{Name Service Switch} è controllato dal contenuto del
+file \conffile{/etc/nsswitch.conf}; questo contiene una riga\footnote{seguendo
+ una convezione comune per i file di configurazione le righe vuote vengono
+ ignorate e tutto quello che segue un carattere ``\texttt{\#}'' viene
+ considerato un commento.} di configurazione per ciascuna di queste classi,
+che viene inizia col nome di tab.~\ref{tab:sys_NSS_classes} seguito da un
+carattere ``\texttt{:}'' e prosegue con la lista dei \textsl{servizi} su cui
+le relative informazioni sono raggiungibili, scritti nell'ordine in cui si
vuole siano interrogati.
-Ogni servizio è specificato a sua volta da un nome, come \texttt{file},
-\texttt{dns}, \texttt{db}, ecc. che identifica la libreria dinamica che
-realizza l'interfaccia con esso. Per ciascun servizio se \texttt{NAME} è il
-nome utilizzato dentro \file{/etc/nsswitch.conf}, dovrà essere presente
-(usualmente in \file{/lib}) una libreria \texttt{libnss\_NAME} che ne
+Ogni servizio è specificato a sua volta da un nome, come \texttt{file},
+\texttt{dns}, \texttt{db}, ecc. che identifica la libreria dinamica che
+realizza l'interfaccia con esso. Per ciascun servizio se \texttt{NAME} è il
+nome utilizzato dentro \conffile{/etc/nsswitch.conf}, dovrà essere presente
+(usualmente in \file{/lib}) una libreria \texttt{libnss\_NAME} che ne
implementa le funzioni.
In ogni caso, qualunque sia la modalità con cui ricevono i dati o il supporto
\textbf{Costante} & \textbf{Significato} \\
\hline
\hline
- \const{RES\_INIT} & viene attivato se è stata chiamata
+ \const{RES\_INIT} & Viene attivato se è stata chiamata
\func{res\_init}. \\
- \const{RES\_DEBUG} & stampa dei messaggi di debug.\\
- \const{RES\_AAONLY} & accetta solo risposte autoritative.\\
- \const{RES\_USEVC} & usa connessioni TCP per contattare i server
+ \const{RES\_DEBUG} & Stampa dei messaggi di debug.\\
+ \const{RES\_AAONLY} & Accetta solo risposte autoritative.\\
+ \const{RES\_USEVC} & Usa connessioni TCP per contattare i server
invece che l'usuale UDP.\\
- \const{RES\_PRIMARY} & interroga soltanto server DNS primari.
+ \const{RES\_PRIMARY} & Interroga soltanto server DNS primari.
\\
- \const{RES\_IGNTC} & ignora gli errori di troncamento, non ritenta la
+ \const{RES\_IGNTC} & Ignora gli errori di troncamento, non ritenta la
richiesta con una connessione TCP.\\
- \const{RES\_RECURSE} & imposta il bit che indica che si desidera
+ \const{RES\_RECURSE} & Imposta il bit che indica che si desidera
eseguire una interrogazione ricorsiva.\\
- \const{RES\_DEFNAMES} & se attivo \func{res\_search} aggiunge il nome
+ \const{RES\_DEFNAMES} & Se attivo \func{res\_search} aggiunge il nome
del dominio di default ai nomi singoli (che non
contengono cioè un ``\texttt{.}'').\\
- \const{RES\_STAYOPEN} & usato con \const{RES\_USEVC} per mantenere
+ \const{RES\_STAYOPEN} & Usato con \const{RES\_USEVC} per mantenere
aperte le connessioni TCP fra interrogazioni
diverse. \\
- \const{RES\_DNSRCH} & se attivo \func{res\_search} esegue le ricerche
+ \const{RES\_DNSRCH} & Se attivo \func{res\_search} esegue le ricerche
di nomi di macchine nel dominio corrente o nei
domini ad esso sovrastanti.\\
- \const{RES\_INSECURE1} & blocca i controlli di sicurezza di tipo 1.\\
- \const{RES\_INSECURE2} & blocca i controlli di sicurezza di tipo 2.\\
- \const{RES\_NOALIASES} & blocca l'uso della variabile di ambiente
+ \const{RES\_INSECURE1} & Blocca i controlli di sicurezza di tipo 1.\\
+ \const{RES\_INSECURE2} & Blocca i controlli di sicurezza di tipo 2.\\
+ \const{RES\_NOALIASES} & Blocca l'uso della variabile di ambiente
\texttt{HOSTALIASES}.\\
- \const{RES\_USE\_INET6} & restituisce indirizzi IPv6 con
+ \const{RES\_USE\_INET6} & Restituisce indirizzi IPv6 con
\func{gethostbyname}. \\
- \const{RES\_ROTATE} & ruota la lista dei server DNS dopo ogni
+ \const{RES\_ROTATE} & Ruota la lista dei server DNS dopo ogni
interrogazione.\\
- \const{RES\_NOCHECKNAME}& non controlla i nomi per verificarne la
+ \const{RES\_NOCHECKNAME}& Non controlla i nomi per verificarne la
correttezza sintattica. \\
- \const{RES\_KEEPTSIG} & non elimina i record di tipo \texttt{TSIG}.\\
+ \const{RES\_KEEPTSIG} & Non elimina i record di tipo \texttt{TSIG}.\\
\const{RES\_BLAST} & \\
- \const{RES\_DEFAULT} & è l'insieme di \const{RES\_RECURSE},
+ \const{RES\_DEFAULT} & Combinazione di \const{RES\_RECURSE},
\const{RES\_DEFNAMES} e \const{RES\_DNSRCH}.\\
\hline
\end{tabular}
\textbf{Costante} & \textbf{Significato} \\
\hline
\hline
- \const{C\_IN} & indirizzi internet, in pratica i soli utilizzati oggi.\\
- \const{C\_HS} & indirizzi \textit{Hesiod}, utilizzati solo al MIT, oggi
+ \const{C\_IN} & Indirizzi internet, in pratica i soli utilizzati oggi.\\
+ \const{C\_HS} & Indirizzi \textit{Hesiod}, utilizzati solo al MIT, oggi
completamente estinti. \\
- \const{C\_CHAOS}& indirizzi per la rete \textit{Chaosnet}, un'altra rete
+ \const{C\_CHAOS}& Indirizzi per la rete \textit{Chaosnet}, un'altra rete
sperimentale nata al MIT. \\
- \const{C\_ANY} & indica un indirizzo di classe qualunque.\\
+ \const{C\_ANY} & Indica un indirizzo di classe qualunque.\\
\hline
\end{tabular}
\caption{Costanti identificative delle classi di indirizzi per l'argomento
\textbf{Costante} & \textbf{Significato} \\
\hline
\hline
- \const{T\_A} & indirizzo di una stazione.\\
- \const{T\_NS} & server DNS autoritativo per il dominio richiesto.\\
- \const{T\_MD} & destinazione per la posta elettronica.\\
- \const{T\_MF} & redistributore per la posta elettronica.\\
- \const{T\_CNAME} & nome canonico.\\
- \const{T\_SOA} & inizio di una zona di autorità.\\
- \const{T\_MB} & nome a dominio di una casella di posta.\\
- \const{T\_MG} & nome di un membro di un gruppo di posta.\\
- \const{T\_MR} & nome di un cambiamento di nome per la posta.\\
- \const{T\_NULL} & record nullo.\\
- \const{T\_WKS} & servizio noto.\\
- \const{T\_PTR} & risoluzione inversa di un indirizzo numerico.\\
- \const{T\_HINFO} & informazione sulla stazione.\\
- \const{T\_MINFO} & informazione sulla casella di posta.\\
- \const{T\_MX} & server cui instradare la posta per il dominio.\\
- \const{T\_TXT} & stringhe di testo (libere).\\
- \const{T\_RP} & nome di un responsabile (\textit{responsible person}).\\
- \const{T\_AFSDB} & database per una cella AFS.\\
- \const{T\_X25} & indirizzo di chiamata per X.25.\\
- \const{T\_ISDN} & indirizzo di chiamata per ISDN.\\
- \const{T\_RT} & router.\\
- \const{T\_NSAP} & indirizzo NSAP.\\
- \const{T\_NSAP\_PTR}& risoluzione inversa per NSAP (deprecato).\\
- \const{T\_SIG} & firma digitale di sicurezza.\\
- \const{T\_KEY} & chiave per firma.\\
- \const{T\_PX} & corrispondenza per la posta X.400.\\
- \const{T\_GPOS} & posizione geografica.\\
- \const{T\_AAAA} & indirizzo IPv6.\\
- \const{T\_LOC} & informazione di collocazione.\\
- \const{T\_NXT} & dominio successivo.\\
- \const{T\_EID} & identificatore di punto conclusivo.\\
- \const{T\_NIMLOC}& posizionatore \textit{nimrod}.\\
- \const{T\_SRV} & servizio.\\
- \const{T\_ATMA} & indirizzo ATM.\\
- \const{T\_NAPTR} & puntatore ad una \textit{naming authority} .\\
- \const{T\_TSIG} & firma di transazione.\\
- \const{T\_IXFR} & trasferimento di zona incrementale.\\
- \const{T\_AXFR} & trasferimento di zona di autorità.\\
- \const{T\_MAILB} & trasferimento di record di caselle di posta.\\
- \const{T\_MAILA} & trasferimento di record di server di posta.\\
- \const{T\_ANY} & valore generico.\\
+ \const{T\_A} & Indirizzo di una stazione.\\
+ \const{T\_NS} & Server DNS autoritativo per il dominio richiesto.\\
+ \const{T\_MD} & Destinazione per la posta elettronica.\\
+ \const{T\_MF} & Redistributore per la posta elettronica.\\
+ \const{T\_CNAME} & Nome canonico.\\
+ \const{T\_SOA} & Inizio di una zona di autorità.\\
+ \const{T\_MB} & Nome a dominio di una casella di posta.\\
+ \const{T\_MG} & Nome di un membro di un gruppo di posta.\\
+ \const{T\_MR} & Nome di un cambiamento di nome per la posta.\\
+ \const{T\_NULL} & Record nullo.\\
+ \const{T\_WKS} & Servizio noto.\\
+ \const{T\_PTR} & Risoluzione inversa di un indirizzo numerico.\\
+ \const{T\_HINFO} & Informazione sulla stazione.\\
+ \const{T\_MINFO} & Informazione sulla casella di posta.\\
+ \const{T\_MX} & Server cui instradare la posta per il dominio.\\
+ \const{T\_TXT} & Stringhe di testo (libere).\\
+ \const{T\_RP} & Nome di un responsabile (\textit{responsible person}).\\
+ \const{T\_AFSDB} & Database per una cella AFS.\\
+ \const{T\_X25} & Indirizzo di chiamata per X.25.\\
+ \const{T\_ISDN} & Indirizzo di chiamata per ISDN.\\
+ \const{T\_RT} & Router.\\
+ \const{T\_NSAP} & Indirizzo NSAP.\\
+ \const{T\_NSAP\_PTR}& Risoluzione inversa per NSAP (deprecato).\\
+ \const{T\_SIG} & Firma digitale di sicurezza.\\
+ \const{T\_KEY} & Chiave per firma.\\
+ \const{T\_PX} & Corrispondenza per la posta X.400.\\
+ \const{T\_GPOS} & Posizione geografica.\\
+ \const{T\_AAAA} & Indirizzo IPv6.\\
+ \const{T\_LOC} & Informazione di collocazione.\\
+ \const{T\_NXT} & Dominio successivo.\\
+ \const{T\_EID} & Identificatore di punto conclusivo.\\
+ \const{T\_NIMLOC}& Posizionatore \textit{nimrod}.\\
+ \const{T\_SRV} & Servizio.\\
+ \const{T\_ATMA} & Indirizzo ATM.\\
+ \const{T\_NAPTR} & Puntatore ad una \textit{naming authority}.\\
+ \const{T\_TSIG} & Firma di transazione.\\
+ \const{T\_IXFR} & Trasferimento di zona incrementale.\\
+ \const{T\_AXFR} & Trasferimento di zona di autorità.\\
+ \const{T\_MAILB} & Trasferimento di record di caselle di posta.\\
+ \const{T\_MAILA} & Trasferimento di record di server di posta.\\
+ \const{T\_ANY} & Valore generico.\\
\hline
\end{tabular}
\caption{Costanti identificative del tipo di record per l'argomento
\textbf{Costante} & \textbf{Significato} \\
\hline
\hline
- \const{HOST\_NOT\_FOUND} & l'indirizzo richiesto non è valido e la
- macchina indicata è sconosciuta. \\
- \const{NO\_ADDRESS} & il nome a dominio richiesto è valido, ma non ha
+ \const{HOST\_NOT\_FOUND} & L'indirizzo richiesto non è valido e la
+ macchina indicata è sconosciuta.\\
+ \const{NO\_ADDRESS} & Il nome a dominio richiesto è valido, ma non ha
un indirizzo associato ad esso
(alternativamente può essere indicato come
- \const{NO\_DATA}). \\
- \const{NO\_RECOVERY} & si è avuto un errore non recuperabile
- nell'interrogazione di un server DNS. \\
- \const{TRY\_AGAIN} & si è avuto un errore temporaneo
+ \const{NO\_DATA}).\\
+ \const{NO\_RECOVERY} & Si è avuto un errore non recuperabile
+ nell'interrogazione di un server DNS.\\
+ \const{TRY\_AGAIN} & Si è avuto un errore temporaneo
nell'interrogazione di un server DNS, si può
ritentare l'interrogazione in un secondo
- tempo. \\
+ tempo.\\
\hline
\end{tabular}
\caption{Valori possibili della variabile \var{h\_errno}.}
\textbf{Costante} & \textbf{Significato} \\
\hline
\hline
- \const{AI\_V4MAPPED} & usato con \const{AF\_INET6} per richiedere una
+ \const{AI\_V4MAPPED} & Usato con \const{AF\_INET6} per richiedere una
ricerca su un indirizzo IPv4 invece che IPv6; gli
eventuali risultati saranno rimappati su indirizzi
IPv6.\\
- \const{AI\_ALL} & usato con \const{AI\_V4MAPPED}; richiede sia
+ \const{AI\_ALL} & Usato con \const{AI\_V4MAPPED}; richiede sia
indirizzi IPv4 che IPv6, e gli indirizzi IPv4
saranno rimappati in IPv6.\\
- \const{AI\_ADDRCONFIG}& richiede che una richiesta IPv4 o IPv6 venga
+ \const{AI\_ADDRCONFIG}& Richiede che una richiesta IPv4 o IPv6 venga
eseguita solo se almeno una interfaccia del
sistema è associata ad un indirizzo di tale tipo.\\
- \const{AI\_DEFAULT} & il valore di default, è equivalente alla
+ \const{AI\_DEFAULT} & Il valore di default, è equivalente alla
combinazione di \const{AI\_ADDRCONFIG} e di
\const{AI\_V4MAPPED}.\\
\hline
\multicolumn{2}{|c|}{\textbf{Funzioni}}\\
\hline
\hline
- indirizzo&\file{/etc/hosts}&\struct{hostent}&\func{gethostbyname}&
- \func{gethostbyaddr}\\
- servizio &\file{/etc/services}&\struct{servent}&\func{getservbyname}&
- \func{getservbyaddr}\\
- rete &\file{/etc/networks}&\struct{netent}&\func{getnetbyname}&
- \func{getnetbyaddr}\\
- protocollo&\file{/etc/protocols}&\struct{protoent}&\func{getprotobyname}&
- \func{getprotobyaddr}\\
+ indirizzo &\conffile{/etc/hosts}&\struct{hostent}&\func{gethostbyname}&
+ \func{gethostbyaddr}\\
+ servizio &\conffile{/etc/services}&\struct{servent}&\func{getservbyname}&
+ \func{getservbyaddr}\\
+ rete &\conffile{/etc/networks}&\struct{netent}&\func{getnetbyname}&
+ \func{getnetbyaddr}\\
+ protocollo&\conffile{/etc/protocols}&\struct{protoent}&
+ \func{getprotobyname}&\func{getprotobyaddr}\\
\hline
\end{tabular}
\caption{Funzioni di risoluzione dei nomi per i vari servizi del
Entrambe le funzioni prendono come ultimo argomento una stringa \param{proto}
che indica il protocollo per il quale si intende effettuare la
-ricerca,\footnote{le informazioni mantenute in \file{/etc/services} infatti
- sono relative sia alle porte usate su UDP che su TCP, occorre quindi
+ricerca,\footnote{le informazioni mantenute in \conffile{/etc/services}
+ infatti sono relative sia alle porte usate su UDP che su TCP, occorre quindi
specificare a quale dei due protocolli si fa riferimento.} che nel caso si
IP può avere come valori possibili solo \texttt{udp} o
\texttt{tcp};\footnote{in teoria si potrebbe avere un qualunque protocollo fra
- quelli citati in \file{/etc/protocols}, posto che lo stesso supporti il
+ quelli citati in \conffile{/etc/protocols}, posto che lo stesso supporti il
concetto di \textsl{porta}, in pratica questi due sono gli unici presenti.}
se si specifica un puntatore nullo la ricerca sarà eseguita su un protocollo
qualsiasi.
Il primo argomento è il nome del servizio per \func{getservbyname},
specificato tramite la stringa \param{name}, mentre \func{getservbyport}
richiede il numero di porta in \param{port}. Entrambe le funzioni eseguono una
-ricerca sul file \file{/etc/services}\footnote{il \textit{Name Service Switch}
- astrae il concetto a qualunque supporto su cui si possano mantenere i
- suddetti dati. } ed estraggono i dati dalla prima riga che corrisponde agli
-argomenti specificati; se la risoluzione ha successo viene restituito un
-puntatore ad una apposita struttura \struct{servent} contenente tutti i
-risultati), altrimenti viene restituito un puntatore nullo. Si tenga presente
-che anche in questo caso i dati vengono mantenuti in una area di memoria
-statica e che quindi la funzione non è rientrante.
+ricerca sul file \conffile{/etc/services}\footnote{il \textit{Name Service
+ Switch} astrae il concetto a qualunque supporto su cui si possano
+ mantenere i suddetti dati. } ed estraggono i dati dalla prima riga che
+corrisponde agli argomenti specificati; se la risoluzione ha successo viene
+restituito un puntatore ad una apposita struttura \struct{servent} contenente
+tutti i risultati), altrimenti viene restituito un puntatore nullo. Si tenga
+presente che anche in questo caso i dati vengono mantenuti in una area di
+memoria statica e che quindi la funzione non è rientrante.
\begin{figure}[!htb]
\footnotesize \centering
\begin{functions}
\headdecl{netdb.h}
\funcdecl{void setservent(int stayopen)}
- Apre il file \file{/etc/services} e si posiziona al suo inizio.
+ Apre il file \conffile{/etc/services} e si posiziona al suo inizio.
\funcdecl{struct servent *getservent(void)}
- Legge la voce successiva nel file \file{/etc/services}.
+ Legge la voce successiva nel file \conffile{/etc/services}.
\funcdecl{void endservent(void)}
- Chiude il file \file{/etc/services}.
+ Chiude il file \conffile{/etc/services}.
\bodydesc{Le due funzioni \func{setservent} e \func{endservent} non
restituiscono nulla, \func{getservent} restituisce il puntatore ad una
\end{functions}
La prima funzione, \func{getservent}, legge una singola voce a partire dalla
-posizione corrente in \file{/etc/services}, pertanto si può eseguire una
+posizione corrente in \conffile{/etc/services}, pertanto si può eseguire una
lettura sequenziale dello stesso invocandola più volte. Se il file non è
aperto provvede automaticamente ad aprirlo, nel qual caso leggerà la prima
voce. La seconda funzione, \func{setservent}, permette di aprire il file
-\file{/etc/services} per una successiva lettura, ma se il file è già stato
+\conffile{/etc/services} per una successiva lettura, ma se il file è già stato
aperto riporta la posizione di lettura alla prima voce del file, in questo
modo si può far ricominciare da capo una lettura sequenziale. L'argomento
\param{stayopen}, se diverso da zero, fa sì che il file resti aperto anche fra
Il campo \var{ai\_protocol} permette invece di effettuare la selezione dei
risultati per il nome del servizio usando il numero identificativo del
rispettivo protocollo di trasporto (i cui valori possibili sono riportati in
-\file{/etc/protocols}); di nuovo i due soli valori utilizzabili sono quelli
+\conffile{/etc/protocols}); di nuovo i due soli valori utilizzabili sono quelli
relativi a UDP e TCP, o il valore nullo che indica di ignorare questo campo
nella selezione.
\textbf{Costante} & \textbf{Significato} \\
\hline
\hline
- \const{AI\_PASSIVE} & viene utilizzato per ottenere un indirizzo in
+ \const{AI\_PASSIVE} & Viene utilizzato per ottenere un indirizzo in
formato adatto per una successiva chiamata a
\func{bind}. Se specificato quando si è usato
\const{NULL} come valore per \param{node} gli
\textit{loopback}. Se invece non è impostato gli
indirizzi verranno restituiti in formato adatto ad
una chiamata a \func{connect} o \func{sendto}.\\
- \const{AI\_CANONNAME} & richiede la restituzione del nome canonico della
+ \const{AI\_CANONNAME} & Richiede la restituzione del nome canonico della
macchina, che verrà salvato in una stringa il cui
indirizzo sarà restituito nel campo
\var{ai\_canonname} della prima struttura
\struct{addrinfo} dei risultati. Se il nome
canonico non è disponibile al suo posto
viene restituita una copia di \param{node}. \\
- \const{AI\_NUMERICHOST}& se impostato il nome della macchina specificato
+ \const{AI\_NUMERICHOST}& Se impostato il nome della macchina specificato
con \param{node} deve essere espresso in forma
numerica, altrimenti sarà restituito un errore
\const{EAI\_NONAME} (vedi
tab.~\ref{tab:addrinfo_error_code}), in questo
modo si evita ogni chiamata alle funzioni di
risoluzione.\\
- \const{AI\_V4MAPPED} & stesso significato dell'analoga di
+ \const{AI\_V4MAPPED} & Stesso significato dell'analoga di
tab.~\ref{tab:sock_getipnodebyname_flags}.\\
- \const{AI\_ALL} & stesso significato dell'analoga di
+ \const{AI\_ALL} & Stesso significato dell'analoga di
tab.~\ref{tab:sock_getipnodebyname_flags}.\\
- \const{AI\_ADDRCONFIG} & stesso significato dell'analoga di
+ \const{AI\_ADDRCONFIG} & Stesso significato dell'analoga di
tab.~\ref{tab:sock_getipnodebyname_flags}.\\
\hline
\end{tabular}
\textbf{Costante} & \textbf{Significato} \\
\hline
\hline
- \const{EAI\_FAMILY} & la famiglia di indirizzi richiesta non è
+ \const{EAI\_FAMILY} & La famiglia di indirizzi richiesta non è
supportata. \\
- \const{EAI\_SOCKTYPE}& il tipo di socket richiesto non è supportato. \\
- \const{EAI\_BADFLAGS}& il campo \var{ai\_flags} contiene dei valori non
+ \const{EAI\_SOCKTYPE}& Il tipo di socket richiesto non è supportato. \\
+ \const{EAI\_BADFLAGS}& Il campo \var{ai\_flags} contiene dei valori non
validi. \\
- \const{EAI\_NONAME} & il nome a dominio o il servizio non sono noti,
+ \const{EAI\_NONAME} & Il nome a dominio o il servizio non sono noti,
viene usato questo errore anche quando si specifica
il valore \const{NULL} per entrambi gli argomenti
\param{node} e \param{service}. \\
- \const{EAI\_SERVICE} & il servizio richiesto non è disponibile per il tipo
+ \const{EAI\_SERVICE} & Il servizio richiesto non è disponibile per il tipo
di socket richiesto, anche se può esistere per
altri tipi di socket. \\
- \const{EAI\_ADDRFAMILY}& la rete richiesta non ha nessun indirizzo di rete
+ \const{EAI\_ADDRFAMILY}& La rete richiesta non ha nessun indirizzo di rete
per la famiglia di indirizzi specificata. \\
- \const{EAI\_NODATA} & la macchina specificata esiste, ma non ha nessun
+ \const{EAI\_NODATA} & La macchina specificata esiste, ma non ha nessun
indirizzo di rete definito. \\
- \const{EAI\_MEMORY} & è stato impossibile allocare la memoria necessaria
+ \const{EAI\_MEMORY} & È stato impossibile allocare la memoria necessaria
alle operazioni. \\
- \const{EAI\_FAIL} & il DNS ha restituito un errore di risoluzione
+ \const{EAI\_FAIL} & Il DNS ha restituito un errore di risoluzione
permanente. \\
- \const{EAI\_AGAIN} & il DNS ha restituito un errore di risoluzione
+ \const{EAI\_AGAIN} & Il DNS ha restituito un errore di risoluzione
temporaneo, si può ritentare in seguito. \\
- \const{EAI\_SYSTEM} & c'è stato un errore di sistema, si può controllare
+ \const{EAI\_SYSTEM} & C'è stato un errore di sistema, si può controllare
\var{errno} per i dettagli. \\
% \hline
% TODO estensioni GNU, trovarne la documentazione
-% \const{EAI\_INPROGRESS}& richiesta in corso. \\
-% \const{EAI\_CANCELED}& la richiesta è stata cancellata.\\
-% \const{EAI\_NOTCANCELED}& la richiesta non è stata cancellata. \\
-% \const{EAI\_ALLDONE} & tutte le richieste sono complete. \\
-% \const{EAI\_INTR} & richiesta interrotta. \\
+% \const{EAI\_INPROGRESS}& Richiesta in corso. \\
+% \const{EAI\_CANCELED}& La richiesta è stata cancellata.\\
+% \const{EAI\_NOTCANCELED}& La richiesta non è stata cancellata. \\
+% \const{EAI\_ALLDONE} & Tutte le richieste sono complete. \\
+% \const{EAI\_INTR} & Richiesta interrotta. \\
\hline
\end{tabular}
\caption{Costanti associate ai valori dei codici di errore della funzione
\textbf{Costante} & \textbf{Significato} \\
\hline
\hline
- \const{NI\_NOFQDN} & richiede che venga restituita solo il nome della
+ \const{NI\_NOFQDN} & Richiede che venga restituita solo il nome della
macchina all'interno del dominio al posto del
nome completo (FQDN).\\
- \const{NI\_NUMERICHOST}& richiede che venga restituita la forma numerica
+ \const{NI\_NUMERICHOST}& Richiede che venga restituita la forma numerica
dell'indirizzo (questo succede sempre se il nome
non può essere ottenuto).\\
- \const{NI\_NAMEREQD} & richiede la restituzione di un errore se il nome
+ \const{NI\_NAMEREQD} & Richiede la restituzione di un errore se il nome
non può essere risolto.\\
- \const{NI\_NUMERICSERV}& richiede che il servizio venga restituito in
+ \const{NI\_NUMERICSERV}& Richiede che il servizio venga restituito in
forma numerica (attraverso il numero di porta).\\
- \const{NI\_DGRAM} & richiede che venga restituito il nome del
+ \const{NI\_DGRAM} & Richiede che venga restituito il nome del
servizio su UDP invece che quello su TCP per quei
pichi servizi (porte 512-214) che soni diversi
nei due protocolli.\\
La funzione prende quattro argomenti, i primi due sono le stringhe che
indicano il nome della macchina a cui collegarsi ed il relativo servizio su
cui sarà effettuata la risoluzione; seguono il protocollo da usare (da
-specificare con il valore numerico di \file{/etc/protocols}) ed il tipo di
+specificare con il valore numerico di \conffile{/etc/protocols}) ed il tipo di
socket (al solito specificato con i valori illustrati in
sez.~\ref{sec:sock_type}). La funzione ritorna il valore del file descriptor
associato al socket (un numero positivo) in caso di successo, o -1 in caso di
I valori usati per \param{level}, corrispondenti ad un dato protocollo usato
da un socket, sono quelli corrispondenti al valore numerico che identifica il
-suddetto protocollo in \file{/etc/protocols}; dato che la leggibilità di un
+suddetto protocollo in \conffile{/etc/protocols}; dato che la leggibilità di un
programma non trarrebbe certo beneficio dall'uso diretto dei valori numerici,
più comunemente si indica il protocollo tramite le apposite costanti
\texttt{SOL\_*} riportate in tab.~\ref{tab:sock_option_levels}, dove si sono
confusa: infatti in Linux il valore si può impostare sia usando le costanti
\texttt{SOL\_*}, che le analoghe \texttt{IPPROTO\_*} (citate anche da
Stevens in \cite{UNP1}); entrambe hanno gli stessi valori che sono
- equivalenti ai numeri di protocollo di \file{/etc/protocols}, con una
+ equivalenti ai numeri di protocollo di \conffile{/etc/protocols}, con una
eccezione specifica, che è quella del protocollo ICMP, per la quale non
esista una costante, il che è comprensibile dato che il suo valore, 1, è
quello che viene assegnato a \const{SOL\_SOCKET}.}
\textbf{Livello} & \textbf{Significato} \\
\hline
\hline
- \const{SOL\_SOCKET}& opzioni generiche dei socket.\\
- \const{SOL\_IP} & opzioni specifiche per i socket che usano IPv4.\\
- \const{SOL\_TCP} & opzioni per i socket che usano TCP.\\
- \const{SOL\_IPV6} & opzioni specifiche per i socket che usano IPv6.\\
- \const{SOL\_ICMPV6}& opzioni specifiche per i socket che usano ICMPv6.\\
+ \const{SOL\_SOCKET}& Opzioni generiche dei socket.\\
+ \const{SOL\_IP} & Opzioni specifiche per i socket che usano IPv4.\\
+ \const{SOL\_TCP} & Opzioni per i socket che usano TCP.\\
+ \const{SOL\_IPV6} & Opzioni specifiche per i socket che usano IPv6.\\
+ \const{SOL\_ICMPV6}& Opzioni specifiche per i socket che usano ICMPv6.\\
\hline
\end{tabular}
\caption{Possibili valori dell'argomento \param{level} delle
\hline
\hline
\const{SO\_KEEPALIVE}&$\bullet$&$\bullet$&$\bullet$&\texttt{int}&
- controlla l'attività della connessione.\\
+ Controlla l'attività della connessione.\\
\const{SO\_OOBINLINE}&$\bullet$&$\bullet$&$\bullet$&\texttt{int}&
- lascia in linea i dati \itindex{out-of-band}
+ Lascia in linea i dati \itindex{out-of-band}
\textit{out-of-band}.\\
\const{SO\_RCVLOWAT} &$\bullet$&$\bullet$&$\bullet$&\texttt{int}&
- basso livello sul buffer di ricezione.\\
+ Basso livello sul buffer di ricezione.\\
\const{SO\_SNDLOWAT} &$\bullet$&$\bullet$& &\texttt{int}&
- basso livello sul buffer di trasmissione.\\
+ Basso livello sul buffer di trasmissione.\\
\const{SO\_RCVTIMEO} &$\bullet$&$\bullet$& &\texttt{timeval}&
- timeout in ricezione.\\
+ Timeout in ricezione.\\
\const{SO\_SNDTIMEO} &$\bullet$&$\bullet$& &\texttt{timeval}&
- timeout in trasmissione.\\
+ Timeout in trasmissione.\\
\const{SO\_BSDCOMPAT}&$\bullet$&$\bullet$&$\bullet$&\texttt{int}&
- abilita la compatibilità con BSD.\\
+ Abilita la compatibilità con BSD.\\
\const{SO\_PASSCRED} &$\bullet$&$\bullet$&$\bullet$&\texttt{int}&
- abilita la ricezione di credenziali.\\
+ Abilita la ricezione di credenziali.\\
\const{SO\_PEERCRED} &$\bullet$& & &\texttt{ucred}&
- restituisce le credenziali del processo remoto.\\
+ Restituisce le credenziali del processo remoto.\\
\const{SO\_BINDTODEVICE}&$\bullet$&$\bullet$& &\texttt{char *}&
- lega il socket ad un dispositivo.\\
+ Lega il socket ad un dispositivo.\\
\const{SO\_DEBUG} &$\bullet$&$\bullet$&$\bullet$&\texttt{int}&
- abilita il debugging sul socket.\\
+ Abilita il debugging sul socket.\\
\const{SO\_REUSEADDR}&$\bullet$&$\bullet$&$\bullet$&\texttt{int}&
- consente il riutilizzo di un indirizzo locale.\\
+ Consente il riutilizzo di un indirizzo locale.\\
\const{SO\_TYPE} &$\bullet$& & &\texttt{int}&
- restituisce il tipo di socket.\\
+ Restituisce il tipo di socket.\\
\const{SO\_ACCEPTCONN}&$\bullet$& & &\texttt{int}&
- indica se il socket è in ascolto.\\
+ Indica se il socket è in ascolto.\\
\const{SO\_DONTROUTE}&$\bullet$&$\bullet$&$\bullet$&\texttt{int}&
- non invia attraverso un gateway.\\
+ Non invia attraverso un gateway.\\
\const{SO\_BROADCAST}&$\bullet$&$\bullet$&$\bullet$&\texttt{int}&
- attiva o disattiva il \itindex{broadcast}
+ Attiva o disattiva il \itindex{broadcast}
\textit{broadcast}.\\
\const{SO\_SNDBUF} &$\bullet$&$\bullet$& &\texttt{int}&
- imposta dimensione del buffer di trasmissione.\\
+ Imposta dimensione del buffer di trasmissione.\\
\const{SO\_RCVBUF} &$\bullet$&$\bullet$& &\texttt{int}&
- imposta dimensione del buffer di ricezione.\\
+ Imposta dimensione del buffer di ricezione.\\
\const{SO\_LINGER} &$\bullet$&$\bullet$& &\texttt{linger}&
- indugia nella chiusura con dati da spedire.\\
+ Indugia nella chiusura con dati da spedire.\\
\const{SO\_PRIORITY} &$\bullet$&$\bullet$& &\texttt{int}&
- imposta la priorità del socket.\\
+ Imposta la priorità del socket.\\
\const{SO\_ERROR} &$\bullet$& & &\texttt{int}&
- riceve e cancella gli errori pendenti.\\
+ Riceve e cancella gli errori pendenti.\\
\hline
\end{tabular}
\caption{Le opzioni disponibili al livello \const{SOL\_SOCKET}.}
usualmente utilizzata per ricevere il codice di errore, come accennato in
sez.~\ref{sec:TCP_sock_select}, quando si sta osservando il socket con una
\func{select} che ritorna a causa dello stesso.
-\end{basedescript}
+
+\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
+ 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}.
+
+\item[\const{SO\_DETACH\_FILTER}] consente di distaccare un filtro
+ precedentemente aggiunto ad un socket.
% TODO documentare SO_ATTACH_FILTER e SO_DETACH_FILTER
+% riferimenti http://www.rcpt.to/lsfcc/lsf.html
+% Documentation/networking/filter.txt
+
+
+\end{basedescript}
\subsection{L'uso delle principali opzioni dei socket}
possibile effettuare un \textit{completely duplicate binding} ed ottenere il
successo di \func{bind} su un socket legato allo stesso indirizzo e porta solo
se il programma che ha eseguito per primo \func{bind} su di essi ha impostato
-questa opzione.\footnote{Questa restrizione permette di evitare il cosiddetto
+questa opzione.\footnote{questa restrizione permette di evitare il cosiddetto
\textit{port stealing}, in cui un programma, usando \const{SO\_REUSEADDR},
può collegarsi ad una porta già in uso e ricevere i pacchetti destinati ad
un altro programma; con questa caratteristica ciò è possibile soltanto se il
\hline
\hline
\const{IP\_OPTIONS} &$\bullet$&$\bullet$&&\texttt{void *}& %???
- imposta o riceve le opzioni di IP.\\
+ Imposta o riceve le opzioni di IP.\\
\const{IP\_PKTINFO} &$\bullet$&$\bullet$&$\bullet$&\texttt{int}&
- passa un messaggio di informazione.\\
+ Passa un messaggio di informazione.\\
\const{IP\_RECVTOS} &$\bullet$&$\bullet$&$\bullet$&\texttt{int}&
- passa un messaggio col campo TOS.\\
+ Passa un messaggio col campo TOS.\\
\const{IP\_RECVTTL} &$\bullet$&$\bullet$&$\bullet$&\texttt{int}&
- passa un messaggio col campo TTL.\\
+ Passa un messaggio col campo TTL.\\
\const{IP\_RECVOPTS} &$\bullet$&$\bullet$&$\bullet$&\texttt{int}&
- passa un messaggio con le opzioni IP.\\
+ Passa un messaggio con le opzioni IP.\\
\const{IP\_RETOPTS} &$\bullet$&$\bullet$&$\bullet$&\texttt{int}&
- passa un messaggio con le opzioni IP non trattate.\\
+ Passa un messaggio con le opzioni IP non trattate.\\
\const{IP\_TOS} &$\bullet$&$\bullet$& &\texttt{int}&
- imposta il valore del campo TOS.\\
+ Imposta il valore del campo TOS.\\
\const{IP\_TTL} &$\bullet$&$\bullet$& &\texttt{int}&
- imposta il valore del campo TTL.\\
+ Imposta il valore del campo TTL.\\
\const{IP\_HDRINCL} &$\bullet$&$\bullet$&$\bullet$&\texttt{int}&
- passa l'intestazione di IP nei dati.\\
+ Passa l'intestazione di IP nei dati.\\
\const{IP\_RECVERR} &$\bullet$&$\bullet$&$\bullet$&\texttt{int}&
- abilita la gestione degli errori.\\
+ Abilita la gestione degli errori.\\
\const{IP\_MTU\_DISCOVER} &$\bullet$&$\bullet$& &\texttt{int}&
- imposta il Path MTU \itindex{Maximum~Transfer~Unit} Discovery.\\
+ Imposta il Path MTU \itindex{Maximum~Transfer~Unit} Discovery.\\
\const{IP\_MTU} &$\bullet$& & &\texttt{int}&
- legge il valore attuale della \itindex{Maximum~Transfer~Unit} MTU.\\
+ Legge il valore attuale della \itindex{Maximum~Transfer~Unit} MTU.\\
\const{IP\_ROUTER\_ALERT} &$\bullet$&$\bullet$&$\bullet$&\texttt{int}&
- imposta l'opzione \textit{IP router alert} sui pacchetti.\\
+ Imposta l'opzione \textit{IP router alert} sui pacchetti.\\
\const{IP\_MULTICAST\_TTL} &$\bullet$&$\bullet$& &\texttt{int}&
- imposta il TTL per i pacchetti \itindex{multicast} \textit{multicast}.\\
+ Imposta il TTL per i pacchetti \itindex{multicast} \textit{multicast}.\\
\const{IP\_MULTICAST\_LOOP} &$\bullet$&$\bullet$&$\bullet$&\texttt{int}&
- controlla il reinvio a se stessi dei dati di \itindex{multicast}
+ Controlla il reinvio a se stessi dei dati di \itindex{multicast}
\textit{multicast}.\\
\const{IP\_ADD\_MEMBERSHIP} & &$\bullet$& &\struct{ip\_mreqn}&
- si unisce a un gruppo di \itindex{multicast} \textit{multicast}.\\
+ Si unisce a un gruppo di \itindex{multicast} \textit{multicast}.\\
\const{IP\_DROP\_MEMBERSHIP}& &$\bullet$& &\struct{ip\_mreqn}&
- si sgancia da un gruppo di \textit{multicast}.\\
+ Si sgancia da un gruppo di \textit{multicast}.\\
\const{IP\_MULTICAST\_IF} & &$\bullet$& &\struct{ip\_mreqn}&
- imposta l'interfaccia locale di un socket \itindex{multicast}
+ Omposta l'interfaccia locale di un socket \itindex{multicast}
\textit{multicast}.\\
\hline
\end{tabular}
ricerca è disabilitata ed è responsabilità del programma creare pacchetti di
dimensioni appropriate e ritrasmettere eventuali pacchetti persi. Se
l'opzione viene abilitata, il kernel si incaricherà di tenere traccia
- automaticamente della \textit{Path MTU} verso ciascuna destinazione, e
- rifiuterà immediatamente la trasmissione di pacchetti di dimensioni maggiori
- della MTU con un errore di \errval{EMSGSIZE}.\footnote{in caso contrario la
- trasmissione del pacchetto sarebbe effettuata, ottenendo o un fallimento
- successivo della trasmissione, o la frammentazione dello stesso.}
+ automaticamente della \itindex{Maximum~Transfer~Unit} \textit{Path MTU}
+ verso ciascuna destinazione, e rifiuterà immediatamente la trasmissione di
+ pacchetti di dimensioni maggiori della MTU con un errore di
+ \errval{EMSGSIZE}.\footnote{in caso contrario la trasmissione del pacchetto
+ sarebbe effettuata, ottenendo o un fallimento successivo della
+ trasmissione, o la frammentazione dello stesso.}
\item[\const{IP\_MTU}] Permette di leggere il valore della \textit{Path MTU}
di percorso del socket. L'opzione richiede per \param{optval} un intero che
\hline
\hline
\const{TCP\_NODELAY} &$\bullet$&$\bullet$&$\bullet$&\texttt{int}&
- spedisce immediatamente i dati in segmenti singoli.\\
+ Spedisce immediatamente i dati in segmenti singoli.\\
\const{TCP\_MAXSEG} &$\bullet$&$\bullet$& &\texttt{int}&
- valore della \itindex{Maximum~Segment~Size} MSS per i segmenti in
+ Valore della \itindex{Maximum~Segment~Size} MSS per i segmenti in
uscita.\\
\const{TCP\_CORK} &$\bullet$&$\bullet$&$\bullet$&\texttt{int}&
- accumula i dati in un unico segmento.\\
+ Accumula i dati in un unico segmento.\\
\const{TCP\_KEEPIDLE} &$\bullet$&$\bullet$& &\texttt{int}&
- tempo in secondi prima di inviare un \textit{keepalive}.\\
+ Tempo in secondi prima di inviare un \textit{keepalive}.\\
\const{TCP\_KEEPINTVL} &$\bullet$&$\bullet$& &\texttt{int}&
- tempo in secondi prima fra \textit{keepalive} successivi.\\
+ Tempo in secondi prima fra \textit{keepalive} successivi.\\
\const{TCP\_KEEPCNT} &$\bullet$&$\bullet$& &\texttt{int}&
- numero massimo di \textit{keepalive} inviati.\\
+ Numero massimo di \textit{keepalive} inviati.\\
\const{TCP\_SYNCNT} &$\bullet$&$\bullet$& &\texttt{int}&
- numero massimo di ritrasmissioni di un SYN.\\
+ Numero massimo di ritrasmissioni di un SYN.\\
\const{TCP\_LINGER2} &$\bullet$&$\bullet$& &\texttt{int}&
- tempo di vita in stato \texttt{FIN\_WAIT2}.\\
+ Tempo di vita in stato \texttt{FIN\_WAIT2}.\\
\const{TCP\_DEFER\_ACCEPT}&$\bullet$&$\bullet$& &\texttt{int}&
- ritorna da \func{accept} solo in presenza di dati.\\
+ Ritorna da \func{accept} solo in presenza di dati.\\
\const{TCP\_WINDOW\_CLAMP}&$\bullet$&$\bullet$& &\texttt{int}&
- valore della \itindex{advertised~window} \textit{advertised window}.\\
+ Valore della \itindex{advertised~window} \textit{advertised window}.\\
\const{TCP\_INFO} &$\bullet$& & &\struct{tcp\_info}&
- restituisce informazioni sul socket.\\
+ Restituisce informazioni sul socket.\\
\const{TCP\_QUICKACK} &$\bullet$&$\bullet$&$\bullet$&\texttt{int}&
- abilita la modalità \textit{quickack}.\\
+ Abilita la modalità \textit{quickack}.\\
\const{TCP\_CONGESTION} &$\bullet$&$\bullet$& &\texttt{char *}&
- imposta l'algoritmo per il controllo della congestione.\\
+ Imposta l'algoritmo per il controllo della congestione.\\
\hline
\end{tabular}
\caption{Le opzioni per i socket TCP disponibili al livello
\textbf{Nome}&\textbf{Configurazione}&\textbf{Riferimento} \\
\hline
\hline
- reno& -- &algoritmo tradizionale, usato in caso di assenza degli altri.\\
+ reno& -- &Algoritmo tradizionale, usato in caso di assenza degli altri.\\
\texttt{bic} &\texttt{TCP\_CONG\_BIC} &
\href{http://www.csc.ncsu.edu/faculty/rhee/export/bitcp/index.htm}
{\texttt{http://www.csc.ncsu.edu/faculty/rhee/export/bitcp/index.htm}}.\\
\hline
\hline
\const{UDP\_CORK} &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& %???
- accumula tutti i dati su un unico pacchetto.\\
+ Accumula tutti i dati su un unico pacchetto.\\
\const{UDP\_ENCAP} &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& %???
- non documentata.\\
+ Non documentata.\\
\hline
\end{tabular}
\caption{Le opzioni per i socket UDP disponibili al livello
\label{tab:sock_opt_udplevel}
\end{table}
+% TODO documentare \const{UDP\_ENCAP}
+
Ancora una volta le descrizioni contenute tab.~\ref{tab:sock_opt_udplevel}
sono un semplice riferimento, una maggiore quantità di dettagli sulle
caratteristiche delle opzioni citate è quello dell'elenco seguente:
\textbf{Flag} & \textbf{Significato} \\
\hline
\hline
- \const{IFF\_UP} & l'interfaccia è attiva.\\
- \const{IFF\_BROADCAST} & l'interfaccia ha impostato un indirizzo di
+ \const{IFF\_UP} & L'interfaccia è attiva.\\
+ \const{IFF\_BROADCAST} & L'interfaccia ha impostato un indirizzo di
\itindex{broadcast} \textit{broadcast} valido.\\
- \const{IFF\_DEBUG} & è attivo il flag interno di debug.\\
- \const{IFF\_LOOPBACK} & l'interfaccia è una interfaccia di
+ \const{IFF\_DEBUG} & È attivo il flag interno di debug.\\
+ \const{IFF\_LOOPBACK} & L'interfaccia è una interfaccia di
\textit{loopback}.\\
- \const{IFF\_POINTOPOINT}& l'interfaccia è associata ad un collegamento
+ \const{IFF\_POINTOPOINT}&L'interfaccia è associata ad un collegamento
\textsl{punto-punto}.\\
- \const{IFF\_RUNNING} & l'interfaccia ha delle risorse allocate (non può
+ \const{IFF\_RUNNING} & L'interfaccia ha delle risorse allocate (non può
quindi essere disattivata).\\
- \const{IFF\_NOARP} & l'interfaccia ha il protocollo ARP disabilitato o
+ \const{IFF\_NOARP} & L'interfaccia ha il protocollo ARP disabilitato o
l'indirizzo del livello di rete non è impostato.\\
- \const{IFF\_PROMISC} & l'interfaccia è in \index{modo~promiscuo}
+ \const{IFF\_PROMISC} & L'interfaccia è in \index{modo~promiscuo}
\textsl{modo promiscuo} (riceve cioè tutti i
pacchetti che vede passare, compresi quelli non
direttamente indirizzati a lei).\\
- \const{IFF\_NOTRAILERS}& evita l'uso di \textit{trailer} nei pacchetti.\\
- \const{IFF\_ALLMULTI} & riceve tutti i pacchetti di \itindex{multicast}
+ \const{IFF\_NOTRAILERS}& Evita l'uso di \textit{trailer} nei pacchetti.\\
+ \const{IFF\_ALLMULTI} & Riceve tutti i pacchetti di \itindex{multicast}
\textit{multicast}.\\
- \const{IFF\_MASTER} & l'interfaccia è il master di un bundle per il
+ \const{IFF\_MASTER} & L'interfaccia è il master di un bundle per il
bilanciamento di carico.\\
- \const{IFF\_SLAVE} & l'interfaccia è uno slave di un bundle per il
+ \const{IFF\_SLAVE} & L'interfaccia è uno slave di un bundle per il
bilanciamento di carico.\\
- \const{IFF\_MULTICAST} & l'interfaccia ha il supporto per il
+ \const{IFF\_MULTICAST} & L'interfaccia ha il supporto per il
\textit{multicast} \itindex{multicast} attivo.\\
- \const{IFF\_PORTSEL} & l'interfaccia può impostare i suoi parametri
- hardware (con l'uso di \struct{ifmap})..\\
- \const{IFF\_AUTOMEDIA} & l'interfaccia è in grado di selezionare
+ \const{IFF\_PORTSEL} & L'interfaccia può impostare i suoi parametri
+ hardware (con l'uso di \struct{ifmap}).\\
+ \const{IFF\_AUTOMEDIA} & L'interfaccia è in grado di selezionare
automaticamente il tipo di collegamento.\\
- \const{IFF\_DYNAMIC} & gli indirizzi assegnati all'interfaccia vengono
+ \const{IFF\_DYNAMIC} & Gli indirizzi assegnati all'interfaccia vengono
persi quando questa viene disattivata.\\
% \const{IFF\_} & .\\
\hline
moderata.
\item[\procrelfile{/proc/sys/net/core}{no\_cong}] valore per l'occupazione
- della coda di ricezione sotto la quale si si considera di non avere
+ della coda di ricezione sotto la quale si considera di non avere
congestione.
\item[\procrelfile{/proc/sys/net/core}{no\_cong\_thresh}] valore minimo
% ottimizzazione per l'uso come router.
\item[\procrelfile{/proc/sys/net/core}{somaxconn}] imposta la dimensione
- massima del \textit{backlog} della funzione \func{listen} (vedi
- sez.~\ref{sec:TCP_func_listen}), e corrisponde al valore della costante
- \const{SOMAXCONN}; il suo valore di default è 128.
+ massima utilizzabile per il \textit{backlog} della funzione \func{listen}
+ (vedi sez.~\ref{sec:TCP_func_listen}), e corrisponde al valore della
+ costante \const{SOMAXCONN}; il suo valore di default è 128.
\end{basedescript}
dello stesso (come ARP).
I file che consentono di controllare le caratteristiche specifiche del
-protocollo IP in quanto tale, descritti anche nella pagina di manuale
-accessibile con \texttt{man 7 ip}, sono i seguenti:
+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}}
\item[\procrelfile{/proc/sys/net/ipv4}{ip\_default\_ttl}] imposta il valore di
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 non ci normalmente non c'è nessuna necessità di
- modificarlo,\footnote{l'unico motivo sarebbe per raggiungere macchine
- estremamente ``{lontane}'' in termini di \textit{hop}, ma è praticamente }
- aumentare il valore è una pratica poco gentile, in quanto in caso di
- problemi di routing si allunga inutilmente il numero di ritrasmissioni.
-
+ 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
+ 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).
+ zero abilita), di default è disabilitato.
-\item[\procrelfile{/proc/sys/net/ipv4}{ip\_dynaddr}] Abilita la riscrittura
+\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. Un valore nullo disabilita la funzionalità, con 1 la
- si abilita, con 2 la si abilità in modalità \textsl{prolissa}.
+ 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 via DHCP, BOOTP o RARP.
+\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 numerici, 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}] imposta la
- disciplina di ricerca della \itindex{Maximum~Transfer~Unit} \textit{Path
- MTU} (vedi sez.~\ref{sec:net_lim_dim} e sez.~\ref{sec:sock_ipv4_options}).
-
-\item[\procrelfile{/proc/sys/net/ipv4}{ipfrag\_high\_thresh}] 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}.
+ 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ò avveniera 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 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}.
\item[\procrelfile{/proc/sys/net/ipv4}{ipfrag\_low\_thresh}] soglia bassa
(specificata in byte) cui viene riportata la coda dei pacchetti IP
frammentati quando si raggiunge il valore \texttt{ipfrag\_high\_thresh}.
-\item[\procrelfile{/proc/sys/net/ipv4}{ip\_always\_defrag}] se abilitato
- (prende un intero come valore logico) tutti i pacchetti IP frammentati
- saranno riassemblati, anche in caso in successivo immediato
- inoltro.\footnote{introdotto con il kernel 2.2.13, nelle versioni precedenti
- questo comportamento poteva essere solo in fase di compilazione del kernel
- con l'opzione \texttt{CONFIG\_IP\_ALWAYS\_DEFRAG}.}
-
\item[\procrelfile{/proc/sys/net/ipv4}{ip\_nonlocal\_bind}] se abilitato
(prende un intero come valore logico) è possibile che una applicazione possa
collegarsi (con \func{bind} su un indirizzo non locale. Questo può risultare
pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti:
\begin{basedescript}{\desclabelwidth{3.9cm}\desclabelstyle{\nextlinelabel}}
-\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_abort\_on\_overflow}] è un valore
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_abort\_on\_overflow}] Un valore
logico (disabilitato di default) che indica di azzerare le connessioni
quando il programma che le riceve è troppo lento ed incapace di accettarle.
Questo consente di recuperare le connessioni se si è avuto un eccesso dovuto
% \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
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_dsack}] Un valore logico che
+ abilita il supporto, definito
+ nell'\href{http://www.ietf.org/rfc/rfc2884.txt}{RFC~2884}, per il
\textit{Duplicate SACK}.\footnote{si indica con SACK (\textit{Selective
Acknowledgement}) un'opzione TCP, definita
nell'\href{http://www.ietf.org/rfc/rfc2018.txt}{RFC~2018}, usata per dare
- un \textit{acknowledgement} unico su blocchi di pacchetti non contigui.}
-
-\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_ecn}] Abilita il meccanismo della
- \textit{Explicit Congestion Notification} (o ECN) definito
- nell'\href{http://www.ietf.org/rfc/rfc2884.txt}{RFC~2884}. 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.\\
+ un \textit{acknowledgement} unico su blocchi di pacchetti non contigui,
+ che consente di diminuire il numero di pacchetti scambiati.} Di default è
+ abilitato.
+
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_ecn}] Un valore logico che abilita
+ il meccanismo della \textit{Explicit Congestion Notification} (in breve ECN)
+ nelle connessioni TCP. Questo è un meccanismo (è descritto in dettaglio
+ nell'\href{http://www.ietf.org/rfc/rfc3168.txt}{RFC~3168} mentre gli effetti
+ sulle prestazioni del suo utilizzo sono documentate
+ nell'\href{http://www.ietf.org/rfc/rfc2884.txt}{RFC~2884} ) che consente di
+ notificare quando una rotta o una rete è congestionata da un eccesso di
+ traffico, si può così essere avvisati e cercare rotte alternative oppure
+ diminuire l'emissione di pacchetti (in modo da non aumentare la
+ congestione). Di default è disabilitato.
+
+ Si tenga presente che se si abilita questa opzione si possono avere dei
+ malfunzionamenti apparentemente casuali dipendenti dalla destinazione,
+ dovuti al fatto che alcuni vecchi router non supportano il meccanismo ed
+ alla sua attivazione e scartano i relativi pacchetti, bloccando
+ completamente il traffico.\\
\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_fack}] è un valore logico che
- abilita il supporto per il \textit{TCP Forward Acknowledgement}. Di default
- è abilitato.
+ abilita il supporto per il \textit{TCP Forward Acknowledgement}, un
+ algoritmo per il controllo della congestione del traffico. Di default è
+ abilitato.
% TODO documentare o descrivere che cos'è il TCP Forward Acknowledgement
\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_fin\_timeout}] specifica il numero
interferenze radio, piuttosto che alla congestione dei router. Di default è
disabilitato.
-
\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_keepalive\_intvl}] il numero di
secondi che deve trascorrere fra l'emissione di due successivi pacchetti di
test quando è abilitata la funzionalità del \textit{keepalive} (vedi
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
+ connessione orfana può consumare fino a 64K di memoria del kernel. Il valore
+ di default viene impostato inizialmente al valore del parametro del kernel
\texttt{NR\_FILE}, e viene aggiustato a seconda della memoria disponibile.
% TODO verificare la spiegazione di connessione orfana
ritrasmissioni provocate dal riordinamento. Non è opportuno modificare
questo valore dal default che è 3.
-\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_retrans\_collapse}]
+\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).
\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_retries1}] imposta il massimo
numero di volte che protocollo tenterà la ritrasmissione si un pacchetto su
massimo di 100 secondi, che però è un valore considerato troppo basso.
-\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_rfc1337}]
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_rfc1337}] un valore logico che
+ indica allo stack TCP del kernel di abilitare il comportamento richiesto
+ nell'\href{http://www.ietf.org/rfc/rfc1337.txt}{RFC~1337}; di default è
+ disabilitato, il che significa che alla ricezione di un segmento RST in stao
+ \texttt{TIME\_WAIT} il socket viene chiuso immediatamente senza attendere la
+ conclusione del periodo di \texttt{TIME\_WAIT}.
\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_rmem}]
-\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_sack}]
+\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}]
-\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_syncookies}]
+
+\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.
\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_syn\_retries}] imposta il numero
di tentativi (il default è 5) di ritrasmissione dei pacchetti SYN di inizio
(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}]
-\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_tw\_recycle}]
+\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}]
-\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_window\_scaling}]
+\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}]
+
\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_westwood}]
+
\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_wmem}]
+
\end{basedescript}
% LocalWords: socket sez dotted decimal resolver Domain Name Service cap DNS