\subsection{Le opzioni TCP.}
\label{sec:TCP_TCP_opt}
-Ciascun segmento SYN contiene in genere delle opzioni per il protocollo TCP
-(le cosiddette \textit{TCP options}, che vengono inserite fra l'header e i
-dati) che servono a comunicare all'altro capo una serie di parametri utili a
-regolare la connessione. Normalmente vengono usate le seguenti opzioni:
+Ciascun segmento SYN contiene in genere delle opzioni per il protocollo TCP,
+le cosiddette \textit{TCP options},\footnote{da non confondere con le opzioni
+ dei socket TCP che tratteremo in sez.~\ref{sec:sock_tcp_udp_options}, in
+ questo caso si tratta delle opzioni che vengono trasmesse come parte di un
+ pacchetto TCP, non delle funzioni che consentono di impostare i relativi
+ valori.} che vengono inserite fra l'header e i dati, e che servono a
+comunicare all'altro capo una serie di parametri utili a regolare la
+connessione. Normalmente vengono usate le seguenti opzioni:
\begin{itemize}
\item \textit{MSS option}, dove MMS sta per \itindex{Maximum~Segment~Size}
connessione annuncia all'altro il massimo ammontare di dati che vorrebbe
accettare per ciascun segmento nella connessione corrente. È possibile
leggere e scrivere questo valore attraverso l'opzione del socket
- \const{TCP\_MAXSEG} (vedi sez.~\ref{sec:TCP_TCP_opt}).
+ \const{TCP\_MAXSEG} (vedi sez.~\ref{sec:sock_tcp_udp_options}).
\item \textit{window scale option}, il protocollo TCP implementa il controllo
di flusso attraverso una \itindex{advertised~window} \textit{advertised
sez.~\ref{sec:tcp_protocol_xxx}) con la quale ciascun capo della
comunicazione dichiara quanto spazio disponibile ha in memoria per i dati.
Questo è un numero a 16 bit dell'header, che così può indicare un massimo di
- 65535 byte;\footnote{ Linux usa come massimo 32767 per evitare problemi con
+ 65535 byte;\footnote{Linux usa come massimo 32767 per evitare problemi con
alcune implementazioni che usano l'aritmetica con segno per implementare
lo stack TCP.} ma alcuni tipi di connessione come quelle ad alta velocità
(sopra i 45Mbit/sec) e quelle che hanno grandi ritardi nel cammino dei
pacchetti (come i satelliti) richiedono una finestra più grande per poter
- ottenere il massimo dalla trasmissione, per questo esiste questa opzione che
- indica un fattore di scala da applicare al valore della finestra
- annunciata\footnote{essendo una nuova opzione per garantire la compatibilità
- con delle vecchie implementazioni del protocollo la procedura che la
- attiva prevede come negoziazione che l'altro capo della connessione
- riconosca esplicitamente l'opzione inserendola anche lui nel suo SYN di
- risposta dell'apertura della connessione.} per la connessione corrente
- (espresso come numero di bit cui spostare a sinistra il valore della
- finestra annunciata inserito nel pacchetto).
+ ottenere il massimo dalla trasmissione. Per questo esiste questa opzione che
+ indica un fattore di scala da applicare al valore della
+ \itindex{advertised~window} finestra annunciata\footnote{essendo una nuova
+ opzione per garantire la compatibilità con delle vecchie implementazioni
+ del protocollo la procedura che la attiva prevede come negoziazione che
+ l'altro capo della connessione riconosca esplicitamente l'opzione
+ inserendola anche lui nel suo SYN di risposta dell'apertura della
+ connessione.} per la connessione corrente (espresso come numero di bit cui
+ spostare a sinistra il valore della finestra annunciata inserito nel
+ pacchetto). Con Linux è possibile indicare al kernel di far negozioare 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
+ 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{sysct} (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
per le connessioni ad alta velocità per evitare possibili corruzioni di dati