X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=tcpsock.tex;h=8ce19aa84c6caca7821b5c97efbfe1625e8d26f7;hp=485f36f0be956b66ddef6942654ddce9b42dfc35;hb=85e7b3ed7aafdb66a7feda150f68649915a5e85d;hpb=e7010c3fbd41a2de44c7b513c5de6e2c6d7ab4b4 diff --git a/tcpsock.tex b/tcpsock.tex index 485f36f..8ce19aa 100644 --- a/tcpsock.tex +++ b/tcpsock.tex @@ -1,6 +1,6 @@ %% tcpsock.tex %% -%% Copyright (C) 2000-2007 Simone Piccardi. Permission is granted to +%% Copyright (C) 2000-2009 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 "Un preambolo", @@ -42,7 +42,7 @@ significato di alcuni dei vari \textsl{stati} ad essa associati. \itindbeg{three~way~handshake} Il processo che porta a creare una connessione TCP è chiamato \textit{three way handshake}; la successione tipica degli eventi (e dei -\textsl{segmenti}\footnote{Si ricordi che il segmento è l'unità elementare di +\textsl{segmenti}\footnote{si ricordi che il segmento è l'unità elementare di dati trasmessa dal protocollo TCP al livello successivo; tutti i segmenti hanno un header che contiene le informazioni che servono allo \textit{stack TCP} (così viene di solito chiamata la parte del kernel che implementa il @@ -149,7 +149,7 @@ connessione. Normalmente vengono usate le seguenti opzioni: 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{in Linux il 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 @@ -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 @@ -187,6 +187,7 @@ vengono anche dette \textit{long fat pipe options} dato che questo che viene dato alle connessioni caratterizzate da alta velocità o da ritardi elevati. In ogni caso Linux supporta pienamente entrambe le opzioni. + \subsection{La terminazione della connessione} \label{sec:TCP_conn_term} @@ -480,7 +481,7 @@ l'elenco delle porte assegnate dalla IANA (la \textit{Internet Assigned Number Authority}) ma l'elenco viene costantemente aggiornato e pubblicato su internet (una versione aggiornata si può trovare all'indirizzo \href{http://www.iana.org/assignments/port-numbers} -{\texttt{http://www.iana.org/assignments/port-numbers}}); inoltre in un +{\textsf{http://www.iana.org/assignments/port-numbers}}); inoltre in un sistema unix-like un analogo elenco viene mantenuto nel file \conffile{/etc/services}, con la corrispondenza fra i vari numeri di porta ed il nome simbolico del servizio. I numeri sono divisi in tre intervalli: @@ -684,7 +685,7 @@ ci si porr \item[\errcode{ENOTSOCK}] il file descriptor non è associato ad un socket. \item[\errcode{EACCES}] si è cercato di usare una porta riservata senza sufficienti privilegi. - \item[\errcode{EADDRNOTAVAIL}] Il tipo di indirizzo specificato non è + \item[\errcode{EADDRNOTAVAIL}] il tipo di indirizzo specificato non è disponibile. \item[\errcode{EADDRINUSE}] qualche altro socket sta già usando l'indirizzo. \end{errlist} @@ -965,12 +966,12 @@ kernel, compreso Linux 2.0, che mostrano le differenze fra diverse implementazioni. In Linux il significato di questo valore è cambiato a partire dal kernel 2.2 -per prevenire l'attacco chiamato \textit{syn flood}. Questo si basa -sull'emissione da parte dell'attaccante di un grande numero di pacchetti SYN -indirizzati verso una porta, forgiati con indirizzo IP fasullo\footnote{con la - tecnica che viene detta \textit{ip spoofing}.} così che i SYN$+$ACK vanno -perduti e la coda delle connessioni incomplete viene saturata, impedendo di -fatto ulteriori connessioni. +per prevenire l'attacco chiamato \index{SYN~flood} \textit{SYN flood}. Questo +si basa sull'emissione da parte dell'attaccante di un grande numero di +pacchetti SYN indirizzati verso una porta, forgiati con indirizzo IP +fasullo\footnote{con la tecnica che viene detta \textit{ip spoofing}.} così +che i SYN$+$ACK vanno perduti e la coda delle connessioni incomplete viene +saturata, impedendo di fatto ulteriori connessioni. Per ovviare a questo il significato del \param{backlog} è stato cambiato a indicare la lunghezza della coda delle connessioni complete. La lunghezza @@ -1044,11 +1045,11 @@ funzione \item[\errcode{EAGAIN} o \errcode{EWOULDBLOCK}] il socket è stato impostato come non bloccante (vedi sez.~\ref{sec:file_noblocking}), e non ci sono connessioni in attesa di essere accettate. - \item[\errcode{EPERM}] Le regole del firewall non consentono la connessione. + \item[\errcode{EPERM}] le regole del firewall non consentono la connessione. \item[\errcode{ENOBUFS}, \errcode{ENOMEM}] questo spesso significa che l'allocazione della memoria è limitata dai limiti sui buffer dei socket, non dalla memoria di sistema. - \item[\errcode{EINTR}] La funzione è stata interrotta da un segnale. + \item[\errcode{EINTR}] la funzione è stata interrotta da un segnale. \end{errlist} Inoltre possono essere restituiti gli errori di rete relativi al nuovo socket, diversi a secondo del protocollo, come: \errval{EMFILE}, @@ -1979,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}