Aggiornamento data copyright
[gapil.git] / sockctrl.tex
index a1ad01a988c4bf1330d613c1f49a8b724471bf1c..09d02506de1797da1925ac59ed71fafbe6663dd3 100644 (file)
@@ -1,6 +1,6 @@
 %% sockctrl.tex
 %%
-%% Copyright (C) 2004-2008 Simone Piccardi.  Permission is granted to
+%% Copyright (C) 2004-2011 Simone Piccardi.  Permission is granted to
 %% copy, distribute and/or modify this document under the terms of the GNU Free
 %% Documentation License, Version 1.1 or any later version published by the
 %% Free Software Foundation; with the Invariant Sections being "Prefazione",
@@ -2333,6 +2333,12 @@ tab.~\ref{tab:sock_opt_socklevel} sul significato delle varie opzioni:
 %without using the netfilter MARK target. Changing the mark can be used
 %for mark based routing without netfilter or for packet filtering.
 
+
+% TODO documentare SO_TIMESTAMP e le altre opzioni di timestamping dei 
+% pacchetti, introdotte nel 2.6.30, vedi nei sorgenti del kernel:
+% Documentation/networking/timestamping.txt
+
+
 \end{basedescript}
 
 
@@ -2590,7 +2596,7 @@ altro socket.  Questo ovviamente non ha senso per il normale traffico di rete,
 in cui i pacchetti vengono scambiati direttamente fra due applicazioni; ma
 quando un sistema supporta il traffico in \itindex{multicast}
 \textit{multicast}, in cui una applicazione invia i pacchetti a molte altre
-(vedi sez.~\ref{sec:multicast_xxx}), allora ha senso che su una macchina i
+(vedi sez.~\ref{sec:xxx_multicast}), allora ha senso che su una macchina i
 pacchetti provenienti dal traffico in \itindex{multicast} \textit{multicast}
 possano essere ricevuti da più applicazioni\footnote{l'esempio classico di
   traffico in \textit{multicast} è quello di uno streaming di dati (audio,
@@ -2758,6 +2764,8 @@ sono definite in \file{netinet/ip.h}, ed accessibili includendo detto file.
       Imposta il valore del campo TOS.\\
     \const{IP\_TTL}             &$\bullet$&$\bullet$&         &\texttt{int}& 
       Imposta il valore del campo TTL.\\
+    \const{IP\_MINTTL}          &$\bullet$&$\bullet$&   &\texttt{int}& 
+      Imposta il valore minimo del TTL per i pacchetti accettati.\\ 
     \const{IP\_HDRINCL}         &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& 
       Passa l'intestazione di IP nei dati.\\
     \const{IP\_RECVERR}         &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& 
@@ -2874,12 +2882,13 @@ sez.~\ref{sec:net_sendmsg}).
   supportata per socket di tipo \const{SOCK\_STREAM}.
 
 \item[\const{IP\_TOS}] L'opzione consente di leggere o impostare il campo
-  \textit{Type of Service} dell'intestazione IP (vedi
-  sez.~\ref{sec:IP_header}) che permette di indicare le priorità dei
-  pacchetti. Se impostato il valore verrà mantenuto per tutti i pacchetti del
-  socket; alcuni valori (quelli che aumentano la priorità) richiedono i
-  privilegi di amministrazione con la \itindex{capabilities} capability
-  \const{CAP\_NET\_ADMIN}.
+  \textit{Type of Service} dell'intestazione IP (per una trattazione più
+  dettagliata, che riporta anche i valori possibili e le relative costanti di
+  definizione si veda sez.~\ref{sec:IP_header}) che permette di indicare le
+  priorità dei pacchetti. Se impostato il valore verrà mantenuto per tutti i
+  pacchetti del socket; alcuni valori (quelli che aumentano la priorità)
+  richiedono i privilegi di amministrazione con la \itindex{capabilities}
+  capability \const{CAP\_NET\_ADMIN}.
 
   Il campo TOS è di 8 bit e l'opzione richiede per \param{optval} un intero
   che ne contenga il valore. Sono definite anche alcune costanti che
@@ -2891,12 +2900,32 @@ sez.~\ref{sec:net_sendmsg}).
   dal protocollo utilizzando l'opzione \const{SO\_PRIORITY} illustrata in
   sez.~\ref{sec:sock_generic_options}.
 
-\item[\const{IP\_TTL}] L'opzione consente di leggere o impostare il campo
-  \textit{Time to Live} dell'intestazione IP (vedi sez.~\ref{sec:IP_header})
-  per tutti i pacchetti associati al socket.  Il campo TTL è di 8 bit e
+\item[\const{IP\_TTL}] L'opzione consente di leggere o impostare per tutti i
+  pacchetti associati al socket il campo \textit{Time to Live}
+  dell'intestazione IP che indica il numero massimo di \textit{hop} (passaggi
+  da un router ad un altro) restanti al paccheto (per una trattazione più
+  estesa si veda sez.~\ref{sec:IP_header}).  Il campo TTL è di 8 bit e
   l'opzione richiede che \param{optval} sia un intero, che ne conterrà il
   valore.
 
+\item[\const{IP\_MINTTL}] L'opzione, introdotta con il kernel 2.6.34, imposta
+  un valore minimo per il campo \textit{Time to Live} dei pacchetti associati
+  al socket su cui è attivata, che se non rispettato ne causa lo scarto
+  automatico. L'opzione è nata per implementare
+  l'\href{http://www.ietf.org/rfc/rfc5082.txt}{RFC~5082} che la prevede come
+  forma di protezione per i router che usano il protocollo BGP poiché questi,
+  essendo in genere adiacenti, possono, impostando un valore di 255, scartare
+  automaticamente tutti gli eventuali pacchetti falsi creati da un attacco a
+  questo protocollo, senza doversi curare di verificarne la
+  validità.\footnote{l'attacco viene in genere portato per causare un
+    \textit{Denial of Service} aumentando il consumo di CPU del router nella
+    verifica dell'autenticità di un gran numero di pacchetti di pacchetti
+    falsi; questi, arrivando da sorgenti diverse da un router adiacente, non
+    potrebbero più avere un TTL di 255 anche qualora questo fosse stato il
+    valore di partenza, e l'impostazione dell'opzione consente di scartarli
+    senza carico aggiuntivo sulla CPU (che altrimenti dovrebbe calcolare una
+    checksum).}
+
 \item[\const{IP\_HDRINCL}] Se abilitata l'utente deve fornire lui stesso
   l'intestazione IP in cima ai propri dati. L'opzione è valida soltanto per
   socket di tipo \const{SOCK\_RAW}, e quando utilizzata eventuali valori
@@ -3140,7 +3169,7 @@ quantit
     \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
+  sez.~\ref{sec: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.
@@ -3168,7 +3197,7 @@ quantit
 
 \item[\const{TCP\_MAXSEG}] con questa opzione si legge o si imposta il valore
   della \itindex{Maximum~Segment~Size} MSS (\textit{Maximum~Segment~Size},
-  vedi sez.~\ref{sec:net_lim_dim} e sez.~\ref{sez:tcp_protocol_xxx}) dei
+  vedi sez.~\ref{sec:net_lim_dim} e sez.~\ref{sec:tcp_protocol_xxx}) dei
   segmenti TCP uscenti. Se l'opzione è impostata prima di stabilire la
   connessione, si cambia anche il valore della \itindex{Maximum~Segment~Size}
   MSS annunciata all'altro capo della connessione. Se si specificano valori
@@ -3304,7 +3333,7 @@ quantit
 \item[\const{TCP\_WINDOW\_CLAMP}] con questa opzione si legge o si imposta
   alla dimensione specificata, in byte, il valore dichiarato della
   \itindex{advertised~window} \textit{advertised window} (vedi
-  sez.~\ref{sez:tcp_protocol_xxx}). Il kernel impone comunque una dimensione
+  sez.~\ref{sec:tcp_protocol_xxx}). Il kernel impone comunque una dimensione
   minima pari a \texttt{SOCK\_MIN\_RCVBUF/2}.  Questa opzione non deve essere
   utilizzata in codice che vuole essere portabile.
 
@@ -3374,7 +3403,7 @@ quantit
 \item[\const{TCP\_CONGESTION}] questa opzione permette di impostare quale
   algoritmo per il controllo della congestione\footnote{il controllo della
     congestione è un meccanismo previsto dal protocollo TCP (vedi
-    sez.~\ref{sez:tcp_protocol_xxx}) per evitare di trasmettere inutilmente
+    sez.~\ref{sec:tcp_protocol_xxx}) per evitare di trasmettere inutilmente
     dati quando una connessione è congestionata; un buon algoritmo è
     fondamentale per il funzionamento del protocollo, dato che i pacchetti
     persi andrebbero ritrasmessi, per cui inviare un pacchetto su una linea
@@ -4399,7 +4428,7 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti:
 \item[\procrelfile{/proc/sys/net/ipv4}{tcp\_reordering}] indica il numero
   massimo di volte che un pacchetto può essere riordinato nel flusso di dati,
   prima che lo stack TCP assuma che è andato perso e si ponga nello stato di
-  \textit{slow start} (si veda sez.~\ref{sez:tcp_protocol_xxx}) viene usata
+  \textit{slow start} (si veda sez.~\ref{sec:tcp_protocol_xxx}) viene usata
   questa metrica di riconoscimento dei riordinamenti per evitare inutili
   ritrasmissioni provocate dal riordinamento. Prende un valore intero che di
   default che è 3, e che non è opportuno modificare.