%% build.tex
%%
-%% Copyright (C) 1999-2015 Simone Piccardi. Permission is granted to copy,
+%% Copyright (C) 1999-2016 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",
%% errors.tex
%%
-%% Copyright (C) 2000-2015 Simone Piccardi. Permission is granted to
+%% Copyright (C) 2000-2016 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",
%% fileadv.tex
%%
-%% Copyright (C) 2000-2015 Simone Piccardi. Permission is granted to
+%% Copyright (C) 2000-2016 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",
%% filedir.tex
%%
-%% Copyright (C) 2000-2015 Simone Piccardi. Permission is granted to
+%% Copyright (C) 2000-2016 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",
%% fileio.tex (merge fileunix.tex - filestd.tex)
%%
-%% Copyright (C) 2000-2015 Simone Piccardi. Permission is granted to
+%% Copyright (C) 2000-2016 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",
%% gapil.tex
%%
-%% Copyright (C) 2000-2015 Simone Piccardi. Permission is granted to
+%% Copyright (C) 2000-2016 Simone Piccardi. Permission is granted to
%% copy, distribute and/or modify this document under the terms of the GNU Free
%% Documentation License, Version 1.3 or any later version published by the
%% Free Software Foundation; with the Invariant Sections being "Un preambolo",
\begin{quote}
- Copyright \copyright\ 2000-2015 Simone Piccardi. Permission is granted to
+ Copyright \copyright\ 2000-2016 Simone Piccardi. Permission is granted to
copy, distribute and/or modify this document under the terms of the GNU Free
Documentation License, Version 1.3 or any later version published by the
Free Software Foundation; with the Invariant Sections being ``Un preambolo''
%% intro.tex
%%
-%% Copyright (C) 2000-2015 Simone Piccardi. Permission is granted to
+%% Copyright (C) 2000-201 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",
%% ipc.tex
%%
-%% Copyright (C) 2000-2015 Simone Piccardi. Permission is granted to
+%% Copyright (C) 2000-2016 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",
%% macro.tex
%%
-%% Copyright (C) 2000-2015 Simone Piccardi. Permission is granted to
+%% Copyright (C) 2000-2016 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",
%% netlayer.tex
%%
-%% Copyright (C) 2000-2015 Simone Piccardi. Permission is granted to
+%% Copyright (C) 2000-2016 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",
%% network.tex
%%
-%% Copyright (C) 2000-2015 Simone Piccardi. Permission is granted to
+%% Copyright (C) 2000-2016 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",
un suo specifico formato. Per applicazioni generiche, come la posta o le
pagine web, viene di solito definito ed implementato quello che viene
chiamato un protocollo di applicazione (esempi possono essere HTTP, POP,
- SMTP, ecc.), ciascuno dei quali è descritto in un opportuno standard (di
- solito attraverso un RFC\footnote{l'acronimo RFC sta per \textit{Request For
- Comment} ed è la procedura attraverso la quale vengono proposti gli
- standard per Internet.}).
+ SMTP, ecc.), ciascuno dei quali è descritto in un opportuno standard, di
+ solito attraverso un RFC (l'acronimo RFC sta per
+ \itindex{Request~For~Comment~(RFC)} \textit{Request For Comment} ed è la
+ procedura attraverso la quale vengono proposti gli standard per Internet).
\item I dati delle applicazioni vengono inviati al livello di trasporto usando
un'interfaccia opportuna (i \textit{socket}, che esamineremo in dettaglio in
cap.~\ref{cha:socket_intro}). Qui verranno spezzati in pacchetti di
Combina per IPv6 le funzionalità di ICMPv4, IGMP e ARP.
\item[\textsl{EGP}] \textit{Exterior Gateway Protocol}. È un protocollo di
routing usato per comunicare lo stato fra gateway vicini a livello di
- \textsl{sistemi autonomi}\footnote{vengono chiamati \textit{autonomous
- systems} i raggruppamenti al livello più alto della rete.}, con
+ \textsl{sistemi autonomi} (vengono chiamati \textit{autonomous
+ systems} i raggruppamenti al livello più alto della rete), con
meccanismi che permettono di identificare i vicini, controllarne la
raggiungibilità e scambiare informazioni sullo stato della rete. Viene
implementato direttamente sopra IP.
Quando un pacchetto IP viene inviato su una interfaccia di rete e le sue
dimensioni eccedono la MTU viene eseguita la cosiddetta
-\textit{frammentazione}, i pacchetti cioè vengono suddivisi\footnote{questo
+\textit{frammentazione}, i pacchetti cioè vengono suddivisi in blocchi più
+piccoli che possono essere trasmessi attraverso l'interfaccia.\footnote{questo
accade sia per IPv4 che per IPv6, anche se i pacchetti frammentati sono
gestiti con modalità diverse, IPv4 usa un flag nell'header, IPv6 una
- opportuna opzione, si veda sez.~\ref{sec:ipv6_protocol}.}) in blocchi più
-piccoli che possono essere trasmessi attraverso l'interfaccia.
+ opportuna opzione, si veda sez.~\ref{sec:ipv6_protocol}.}
\begin{table}[!htb]
\centering
\label{tab:net_mtu_values}
\end{table}
+%TODO aggiornare la tabella con dati più recenti
+
\itindbeg{Path~MTU}
La MTU più piccola fra due stazioni viene in genere chiamata \textit{path
%% othersock.tex
%%
-%% Copyright (C) 2004-2015 Simone Piccardi. Permission is granted to
+%% Copyright (C) 2004-2016 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",
%% preambolo.tex
%%
-%% Copyright (C) 2000-2015 Simone Piccardi. Permission is granted to
+%% Copyright (C) 2000-2016 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",
%% pref.tex
%%
-%% Copyright (C) 2000-2015 Simone Piccardi. Permission is granted to
+%% Copyright (C) 2000-2016 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",
%% process.tex
%%
-%% Copyright (C) 2000-2015 by Simone Piccardi. Permission is granted to
+%% Copyright (C) 2000-2016 by 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",
%% prochand.tex
%%
-%% Copyright (C) 2000-2015 by Simone Piccardi. Permission is granted to
+%% Copyright (C) 2000-2016 by 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",
%% ringraziamenti.tex
%%
-%% Copyright (C) 2000-2015 Simone Piccardi. Permission is granted to
+%% Copyright (C) 2000-2016 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",
%% session.tex
%%
-%% Copyright (C) 2000-2015 Simone Piccardi. Permission is granted to
+%% Copyright (C) 2000-2016 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",
%% signal.tex
%%
-%% Copyright (C) 2000-2015 Simone Piccardi. Permission is granted to
+%% Copyright (C) 2000-2016 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",
%% sockadv.tex
%%
-%% Copyright (C) 2004-2015 Simone Piccardi. Permission is granted to
+%% Copyright (C) 2004-2016 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",
%% sockctrl.tex
%%
-%% Copyright (C) 2004-2015 Simone Piccardi. Permission is granted to
+%% Copyright (C) 2004-2016 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",
%% socket.tex
%%
-%% Copyright (C) 2000-2015 Simone Piccardi. Permission is granted to
+%% Copyright (C) 2000-2016 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",
\constd{PF\_PPPOX} &24& PPPoX socket & \\
\constd{PF\_WANPIPE} &25& Wanpipe API socket & \\
\constd{PF\_LLC} &26& Linux LLC & \\
- \constd{PF\_CAN} &29& Controller Are network & \\
+ \constd{PF\_CAN} &29& Controller Are Network & \\
\constd{PF\_BLUETOOTH}&31& Bluetooth socket & \\
\hline
\end{tabular}
&\const{SOCK\_STREAM} &\const{SOCK\_DGRAM} &\const{SOCK\_RAW}&
\const{SOCK\_RDM}&\const{SOCK\_SEQPACKET} \\
\hline
- \const{PF\_LOCAL} & si & si & & & \\
+ \const{PF\_UNIX} & si & si & -- & -- & si\footnotemark \\
\hline
-% \const{PF\_UNIX}&\multicolumn{5}{|l|}{sinonimo di \const{PF\_LOCAL}.}\\
-% \hline
- \const{PF\_INET} & TCP & UDP & IPv4 & & \\
+ \const{PF\_LOCAL}&\multicolumn{5}{|c|}{sinonimo di \const{PF\_UNIX}}\\
\hline
- \const{PF\_INET6} & TCP & UDP & IPv6 & & \\
+ \const{PF\_INET} & TCP & UDP & IPv4 & -- & -- \\
\hline
- \const{PF\_IPX} & & & & & \\
+ \const{PF\_INET6} & TCP & UDP & IPv6 & -- & -- \\
\hline
- \const{PF\_NETLINK} & & si & si & & \\
+ \const{PF\_IPX} & -- & -- & -- & -- & -- \\
\hline
- \const{PF\_X25} & & & & & si \\
+ \const{PF\_NETLINK} & -- & si & si & -- & -- \\
\hline
- \const{PF\_AX25} & & & & & \\
+ \const{PF\_X25} & -- & -- & -- & -- & si \\
\hline
- \const{PF\_ATMPVC} & & & & & \\
+ \const{PF\_AX25} & -- & -- & -- & -- & -- \\
\hline
- \const{PF\_APPLETALK} & & si & si & & \\
+ \const{PF\_ATMPVC} & -- & -- & -- & -- & -- \\
\hline
- \const{PF\_PACKET} & & si & si & & \\
+ \const{PF\_APPLETALK} & -- & si & si & -- & -- \\
+ \hline
+ \const{PF\_PACKET} & -- & si & si & -- & -- \\
\hline
\end{tabular}
\caption{Combinazioni valide di dominio e tipo di protocollo per la
\label{tab:sock_sock_valid_combinations}
\end{table}
+\footnotetext{supportati a partire dal kernel 2.6.4 per socket che conservano
+ i limiti dei messaggi e li consegnano in sequenza ordinata.}
+
In tab.~\ref{tab:sock_sock_valid_combinations} sono mostrate le combinazioni
valide possibili per le principali famiglie di protocolli. Per ogni
combinazione valida si è indicato il tipo di protocollo, o la parola
-\textsl{si} qualora non il protocollo non abbia un nome definito, mentre si
-sono lasciate vuote le caselle per le combinazioni non supportate.
+\textsl{si} qualora il protocollo non abbia un nome definito, mentre si sono
+lasciate vuote le caselle per le combinazioni non supportate.
\section{Le strutture degli indirizzi dei socket}
sarebbe più immediato per l'utente (che non dovrebbe più eseguire il casting),
è stato mantenuto l'uso di questa struttura.
+Se si usa una struttura \struct{sockaddr} per allocare delle variabili
+generiche da usare in seguito per degli indirizzi si pone il problema che
+niente assicura che i dati necessari per le varie famiglie di indirizzi
+possano rientrare nella dimensione del campo \var{sa\_data}, anzi, come
+vedremo in sez.~\ref{sec:sock_sa_ipv6}, nel caso di indirizzi IPv6 questa
+non è proprio sufficiente. Per questo l'interfaccia di programmazione dei
+socket prevede la defizione di una speciale struttura
+\struct{sockaddr\_storage} per la quale è assicurato che la dimensione sia
+sufficiente per qualunque
+
\subsection{La struttura degli indirizzi IPv4}
\label{sec:sock_sa_ipv4}
I socket di tipo \const{PF\_INET} vengono usati per la comunicazione
-attraverso internet; la struttura per gli indirizzi per un socket internet (se
+attraverso Internet; la struttura per gli indirizzi per un socket Internet (se
si usa IPv4) è definita come \struct{sockaddr\_in} nell'header file
\headfiled{netinet/in.h} ed ha la forma mostrata in
fig.~\ref{fig:sock_sa_ipv4_struct}, conforme allo standard POSIX.1g.
\includestruct{listati/sockaddr_in.h}
\end{minipage}
\caption{La struttura \structd{sockaddr\_in} degli indirizzi dei socket
- internet (IPv4) e la struttura \structd{in\_addr} degli indirizzi IPv4.}
+ Internet (IPv4) e la struttura \structd{in\_addr} degli indirizzi IPv4.}
\label{fig:sock_sa_ipv4_struct}
\end{figure}
-L'indirizzo di un socket internet (secondo IPv4) comprende l'indirizzo
-internet di un'interfaccia più un \textsl{numero di porta} (affronteremo in
+L'indirizzo di un socket Internet (secondo IPv4) comprende l'indirizzo
+Internet di un'interfaccia più un \textsl{numero di porta} (affronteremo in
dettaglio il significato di questi numeri in sez.~\ref{sec:TCP_port_num}). Il
protocollo IP non prevede numeri di porta, che sono utilizzati solo dai
protocolli di livello superiore come TCP e UDP. Questa struttura però viene
possono usare la funzione \func{bind} (che vedremo in
sez.~\ref{sec:TCP_func_bind}) su queste porte.
-Il membro \var{sin\_addr} contiene un indirizzo internet, e viene acceduto sia
+Il membro \var{sin\_addr} contiene un indirizzo Internet, e viene acceduto sia
come struttura (un resto di una implementazione precedente in cui questa era
una \dirct{union} usata per accedere alle diverse classi di indirizzi) che
direttamente come intero. In \headfile{netinet/in.h} vengono definite anche
e deve essere indicato in \textit{network order}, facendo uso delle costanti
simboliche definite in \file{linux/if\_ether.h}. Il campo \var{sll\_ifindex} è
l'indice dell'interfaccia, che, in caso di presenza di più interfacce dello
-stesso tipo (se ad esempio si hanno più schede ethernet), permette di
+stesso tipo (se ad esempio si hanno più schede Ethernet), permette di
selezionare quella con cui si vuole operare (un valore nullo indica qualunque
interfaccia). Questi sono i due soli campi che devono essere specificati
quando si vuole selezionare una interfaccia specifica, usando questa struttura
I campi \var{sll\_halen} e \var{sll\_addr} indicano rispettivamente
l'indirizzo associato all'interfaccia sul protocollo di collegamento e la
relativa lunghezza; ovviamente questi valori cambiano a seconda del tipo di
-collegamento che si usa, ad esempio, nel caso di ethernet, questi saranno il
+collegamento che si usa, ad esempio, nel caso di Ethernet, questi saranno il
MAC address della scheda e la relativa lunghezza. Essi vengono usati, insieme
ai campi \var{sll\_family} e \var{sll\_ifindex} quando si inviano dei
pacchetti, in questo caso tutti gli altri campi devono essere nulli.
promiscuo), \constd{PACKET\_OUTGOING} per un pacchetto originato dalla propria
macchina che torna indietro sul socket.
-
Si tenga presente infine che in fase di ricezione, anche se si richiede il
troncamento del pacchetto, le funzioni \func{recv}, \func{recvfrom} e
\func{recvmsg} (vedi sez.~\ref{sec:net_sendmsg}) restituiranno comunque la
\label{sec:sock_addr_func}
In questa sezione tratteremo delle varie funzioni usate per manipolare gli
-indirizzi, limitandoci però agli indirizzi internet. Come accennato gli
+indirizzi, limitandoci però agli indirizzi Internet. Come accennato gli
indirizzi e i numeri di porta usati nella rete devono essere forniti nel
cosiddetto \textit{network order}, che corrisponde al formato \textit{big
- endian}, anche quando la proprio macchina non usa questo formati, cosa che
-può comportare la necessità di eseguire delle conversioni.
+ endian} (vedi sez.~\ref{sec:endianness}), anche quando la proprio macchina
+non usa questo formato, cosa che può comportare la necessità di eseguire delle
+conversioni.
\subsection{Le funzioni per il riordinamento}
all'\textit{endianness} è che quando si passano dei dati da un tipo di
architettura all'altra i dati vengono interpretati in maniera diversa, e ad
esempio nel caso dell'intero a 16 bit ci si ritroverà con i due byte in cui è
-suddiviso scambiati di posto. Per questo motivo si usano delle funzioni di
-conversione che servono a tener conto automaticamente della possibile
-differenza fra l'ordinamento usato sul computer e quello che viene usato nelle
-trasmissione sulla rete; queste funzioni sono \funcd{htonl}, \funcd{htons},
-\funcd{ntohl} e \funcd{ntohs} ed i rispettivi prototipi sono:
-\begin{functions}
- \headdecl{netinet/in.h}
- \funcdecl{unsigned long int htonl(unsigned long int hostlong)}
- Converte l'intero a 32 bit \param{hostlong} dal formato della macchina a
- quello della rete.
-
- \funcdecl{unsigned short int htons(unsigned short int hostshort)}
- Converte l'intero a 16 bit \param{hostshort} dal formato della macchina a
- quello della rete.
+suddiviso scambiati di posto.
- \funcdecl{unsigned long int ntohl(unsigned long int netlong)}
- Converte l'intero a 32 bit \param{netlong} dal formato della rete a quello
- della macchina.
+Per questo motivo si usano delle funzioni di conversione che servono a tener
+conto automaticamente della possibile differenza fra l'ordinamento usato sul
+computer e quello che viene usato nelle trasmissione sulla rete; queste
+funzioni sono \funcd{htonl}, \funcd{htons}, \funcd{ntohl} e \funcd{ntohs} ed i
+rispettivi prototipi sono:
- \funcdecl{unsigned sort int ntohs(unsigned short int netshort)}
- Converte l'intero a 16 bit \param{netshort} dal formato della rete a quello
- della macchina.
-
- \bodydesc{Tutte le funzioni restituiscono il valore convertito, e non
- prevedono errori.}
-\end{functions}
+\begin{funcproto}{
+\fhead{netinet/in.h}
+\fdecl{unsigned long int htonl(unsigned long int hostlong)}
+\fdesc{Converte l'intero a 32 bit \param{hostlong} dal formato della macchina a
+ quello della rete.}
+\fdecl{unsigned short int htons(unsigned short int hostshort)}
+\fdesc{Converte l'intero a 16 bit \param{hostshort} dal formato della macchina a
+ quello della rete.}
+\fdecl{unsigned long int ntohl(unsigned long int netlong)}
+\fdesc{Converte l'intero a 32 bit \param{netlong} dal formato della rete a quello
+ della macchina.}
+\fdecl{unsigned sort int ntohs(unsigned short int netshort)}
+\fdesc{Converte l'intero a 16 bit \param{netshort} dal formato della rete a quello
+ della macchina.}
+}
+
+{Tutte le funzioni restituiscono il valore convertito, e non prevedono
+ errori.}
+\end{funcproto}
I nomi sono assegnati usando la lettera \texttt{n} come mnemonico per indicare
l'ordinamento usato sulla rete (da \textit{network order}) e la lettera
%% system.tex
%%
-%% Copyright (C) 2000-2015 Simone Piccardi. Permission is granted to
+%% Copyright (C) 2000-2016 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",
-bg%% tcpsock.tex
+%% tcpsock.tex
%%
-%% Copyright (C) 2000-2015 Simone Piccardi. Permission is granted to
+%% Copyright (C) 2000-2016 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",
%% thread.tex
%%
-%% Copyright (C) 2007-2015 Simone Piccardi. Permission is granted to
+%% Copyright (C) 2007-2016 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",
%% tcpprot.tex
%%
-%% Copyright (C) 2002-2015 Simone Piccardi. Permission is granted to copy,
+%% Copyright (C) 2002-2016 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",