Indice
Voci
Suite di protocolli Internet
1
Livello applicazioni
3
HTTPS
4
Hypertext Transfer Protocol
5
Simple Mail Transfer Protocol
10
Post Office Protocol
12
Internet Message Access Protocol
14
Dynamic Host Configuration Protocol
15
Simple Network Management Protocol
18
File Transfer Protocol
21
Domain Name System
26
Telnet
34
rsync
36
Real-time Transport Protocol
39
Livello di trasporto
40
Transmission Control Protocol
42
User Datagram Protocol
50
Livello di rete
52
IPv4
53
IPsec
58
Livello datalink
65
Secure shell
70
Note
Fonti e autori delle voci
74
Fonti, licenze e autori delle immagini
75
Licenze della voce
Licenza
76
Suite di protocolli Internet
Suite di protocolli Internet
In informatica e telecomunicazioni la suite di protocolli Internet è un insieme di protocolli di rete su cui si basa il
funzionamento della rete Internet. A volte, per sineddoche, è chiamata suite di protocolli TCP/IP, in funzione dei due
più importanti protocolli in essa definiti: il Transmission Control Protocol (TCP) e l'Internet Protocol (IP).
Storia del TCP/IP
Nei primi anni settanta, la Defence Advanced Research Project Agency (DARPA) finanziò l'Università di Stanford e
la BBN (Bolt, Beranek and Newman) per lo sviluppo di un insieme di protocolli di comunicazione da utilizzarsi per
lo sviluppo di reti a commutazione di pacchetto, per l'interconnessione di calcolatori eterogenei. Fu così che nacque
lInternet Protocol Suite i cui due protocolli più noti sono il TCP (Transmission Control Protocol) e l'IP
(Internet P'rotocol).
Si fa riferimento a questa architettura di rete con la sigla TCP/IP o IP/TCP (quest'ultima non è quasi mai usata). I
creatori di tali protocolli di trasmissione, tuttora utilizzati nel web, sono nello specifico Robert Kahn e Vinton Cerf, a
cui l'ex Presidente degli Stati Uniti George W. Bush ha consegnato la Presidential Medal of Freedom, ovvero la più
alta tra le onorificenze civili a stelle e strisce, il 9 novembre 2005. I due studiosi non sono nuovi a questo genere di
premiazioni: all'inizio del 2005 è stato assegnato loro il prestigioso 2004 A.M. Turing Award, equivalente del Premio
Nobel nel settore dell'Information Technology. Cerf e Kahn hanno sviluppato lo standard per la trasmissione di
pacchetti via rete nel lontano 1973, mentre lavoravano a un progetto di sviluppo dei sistemi di comunicazione voluto
dalla DARPA (Defense Advanced Research Projects Agency). Attualmente Vint Cerf, collabora con Google alla
creazione degli standard per le future applicazioni e nel frattempo si dedica allo sviluppo di nuovi protocolli di
comunicazione interplanetaria per il Jet Propulsion Lab della Nasa. Robert Kahn, invece, dopo 13 anni di servizio
presso la DARPA è diventato presidente della Corporation for National Research Initiatives (CNRI).
Questi protocolli, utilizzabili gratuitamente da tutti perché di pubblico dominio fin dall'inizio, ottennero un elevato
successo (utilizzati da un gruppo di ricercatori per ARPAnet).
Questo genera alcune ambiguità dovute al fatto che il nome più corretto sarebbe Internet Protocol Suite. Per esempio
succede di sentir parlare di servizi basati su TCP/IP anche quando in realtà, invece di TCP, viene usato un protocollo
alternativo, UDP, anch'esso appartenente all'Internet Protocol Suite. In genere il TCP viene utilizzato per quelle
applicazioni che richiedono un servizio orientato alla connessione, come ad esempio la posta elettronica e il file
sharing, mentre l'UDP prende sempre più piede per le applicazioni in tempo reale come l'on-line gaming o lo
streaming audio e video; la differenza fra i due protocolli risiede nella maggiore affidabilità nel trasporto dei dati di
TCP, che offre una serie di servizi appositamente pensati (gestione del flusso, della congestione...), mentre UDP
punta molto sulla velocità di trasmissione a scapito della affidabilità. Si tenga quindi sempre presente che la sigla
TCP/IP è di utilizzo talmente comune da essere utilizzata, talvolta, anche quando esistono termini alternativi più
corretti.
TCP/IP è l'architettura adottata dalla rete internet. Negli anni novanta, nonostante la sua età, è stata (più o meno
paradossalmente) l'unica architettura che ha interessato il mercato, al punto che gli enti di standardizzazione, di
fronte al fatto compiuto della sua massiccia diffusione hanno dovuto darle la stessa dignità di ISO/OSI.
Caratteristiche
Tale suite può essere descritta per analogia con il modello OSI, che descrive i livelli della pila di protocolli. In una
pila di protocolli ogni livello risolve una serie di problemi che riguardano la trasmissione di dati e fornisce un ben
definito servizio ai livelli più alti. I livelli più alti sono logicamente più vicini all'utente e funzionano con dati più
astratti lasciando ai livelli più bassi il compito di tradurre i dati in forme mediante le quali possono essere
fisicamente manipolati e trasmessi infine sul canale di comunicazione.
1
Suite di protocolli Internet
Il modello Internet è stato prodotto come una soluzione ad un problema ingegneristico pratico in quanto si è trattato
di aggiungere via via strati protocollari all'architettura di rete delle reti locali per ottenere un'interconnessione
efficiente ed affidabile. Il modello OSI, in un altro senso, invece è stato l'approccio più teorico-deduttivo ed è stato
anche prodotto nel più vecchio modello di rete.
Un esempio di funzionamento della suite TCP/IP
Per comprendere la struttura della suite TCP/IP, si utilizza una schematizzazione a livelli. Ogni livello esegue una
specifica serie di operazioni; ad ogni livello, ci si avvicina sempre più dall'interfaccia utente (quella con cui
interagiamo) all'interfaccia di rete. Il messaggio trasmesso è modificato di conseguenza.
Il primo livello è quello dell'applicazione: esso rappresenta l'interfaccia con l'utente ed abilita, ad esempio, la
consultazione di pagine web, stabilendo e gestendo le sessioni di lavoro dei processi client del nostro browser ed un
server web.
Il protocollo di trasporto TCP mette in coda i messaggi generati da client e server e li trasmette sotto forma di
pacchetti su di una connessione full-duplex; il buon fine della spedizione è attestato da una ricevuta di ritorno. Anche
questo è un collegamento virtuale tra le due applicazioni, i cui dettagli sono demandati al successivo livello, detto di
rete. Quindi, il livello di trasporto offre un servizio al livello delle applicazioni avvalendosi dei servizi del sottostante
livello di rete (ed in particolare del protocollo IP). Per gestire molteplici processi attivi nel trasferimento dati sul
medesimo nodo (o computer) il livello di trasporto (TCP o UDP) utilizza più numeri di porta.
TCP nell'invio dei pacchetti usa il meccanismo dello Sliding Window (o finestra scorrevole). Una serie di pacchetti
viene inviata da TCP seguendo delle regole ben precise:
•
•
•
•
Ad ogni finestra di pacchetti spedita il trasmettitore fa partire un timeOut.
Il Ricevitore invia per ogni pacchetto ricevuto un ACK indicando il successivo pacchetto atteso.
Il trasmettitore considera quindi spediti tutti i pacchetti precedenti.
Se il timeout scade oppure sono ricevuti 3 ACK duplicati, TCP assume si sia verificata la perdita di uno o più
pacchetti e provvede ad implementare opportune strategie di ritrasmissione dei dati e di controllo della
congestione.
Questa è una tecnica molto importante perché fornisce un canale di comunicazione affidabile. Inoltre TCP contiene
meccanismi per gestire la congestione ed il controllo di flusso.
Internet Protocol (IP) è il protocollo di InternetWorking del modello DOD/DARPA (secondo il modello OSI è
classificato nel livello rete). Esso si occupa di gestire l'indirizzamento dei nodi e l'instradamento. A ciascun nodo
viene infatti assegnato un indirizzo IP che lo identificherà in modo non ambiguo in rete. Le funzionalità di
instradamento, invece, consentono di selezionare il percorso migliore per veicolare un messaggio verso un dato nodo
destinatario, noto che sia il suo indirizzo IP.
Al livello di collegamento si decide come fare il trasferimento del messaggio per ogni singolo tratto del percorso: dal
computer del browser al primo router, dal primo router al secondo, dal secondo al terzo e dal terzo al computer del
server. Questo è un collegamento virtuale tra due computer (o router) adiacenti. Anche in questo caso le interfacce di
comunicazione dei nodi adiacenti saranno individuate per mezzo di un indirizzo univoco, usualmente denominato
indirizzo MAC.
Il livello fisico, che è l'ultimo, trasmette il messaggio sul canale di comunicazione usualmente sotto forma di onde
elettromagnetiche, sebbene sia anche possibile utilizzare onde acustiche (come ad esempio nelle reti di sensori
sottomarine).
2
Suite di protocolli Internet
Collegamenti esterni
• Introduzione al TCP/IP [1]
Note
[1] http:/ / www. oscene. net/ it/ sysadmin/ networking/ lo-stack-tcpip-introduzione
Livello applicazioni
In telecomunicazioni il livello applicazioni è il settimo ed ultimo livello del modello OSI per reti di calcolatori. La
sua funzione è quella di interfacciare e fornire servizi per i processi delle applicazioni; inoltra quindi le richieste al
sottostante livello di presentazione. Un programma applicativo interagisce con uno dei protocolli di livello di
trasporto per ricevere dati o inviarli passandoli nella forma richiesta.[1][2]
Tra i servizi più comuni offerti dal livello applicazioni ci sono le conversioni semantiche tra processi applicativi
associati. Nota: esempi di servizi usuali sono i file virtuali ed il virtual terminal.
Esempi
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
DNS
HTTP
SMTP
SNMP
POP3
FTP
Network Time Protocol (NTP)
Telnet
Secure shell (SSH)
IRC
Lightweight Directory Access Protocol (LDAP)
XMPP
FTAM
Advanced Program to Program Communications (APPC)
X.400
X.500
AFP
SIP
ITMS
AIM
3
Livello applicazioni
Note
[1] (EN) Application Layer Definition (http:/ / www. linfo. org/ application_layer. html). linfo.org, 16-11-2005. URL consultato il 14-5-2012.
[2] (EN) Bradley Mitchell. Visual Networking Overview - The OSI Model - Application Layer (http:/ / compnetworking. about. com/ od/
basicnetworkingconcepts/ l/ blbasics_osi7. htm). about.com. URL consultato il 14-5-2012.
Altri progetti
•
Wikimedia Commons contiene file multimediali: http://commons.wikimedia.org/wiki/
Category:Application layer protocols
HTTPS
In telecomunicazioni e informatica HyperText Transfer Protocol over Secure Socket Layer (HTTPS) è il
risultato dell'applicazione di un protocollo di crittografia asimmetrica al protocollo di trasferimento di ipertesti
HTTP. Viene utilizzato per garantire trasferimenti riservati di dati nel web, in modo da impedire intercettazioni dei
contenuti che potrebbero essere effettuati tramite la tecnica di attacco del man in the middle.
Descrizione
Nei browser web, la URI (Uniform Resource Identifier) che si riferisce a tale tecnologia ha nome di schema https
ed è in tutto e per tutto analoga alle URI http. Tuttavia, la porta di default impiegata non è la 80 come in HTTP, ma
la 443, mentre (trasparentemente all'utente) tra il protocollo TCP e HTTP si interpone un livello di
crittografia/autenticazione come il Secure Sockets Layer (SSL) o il Transport Layer Security (TLS).
In pratica viene creato un canale di comunicazione criptato tra il client e il server attraverso uno scambio di
certificati; una volta stabilito questo canale al suo interno viene utilizzato il protocollo HTTP per la comunicazione.
Questo tipo di comunicazione garantisce che solamente il client e il server siano in grado di conoscere il contenuto
della comunicazione.
Questo sistema fu progettato dalla Netscape Communications Corporation che si occupa delle autenticazioni e delle
comunicazioni crittografate ed è largamente usato nel World Wide Web per situazioni che richiedono particolari
esigenze in ambito di sicurezza come per esempio il pagamento di transazioni online. In questo caso SSL garantisce
la cifratura dei dati trasmessi e ricevuti su internet.
Funzionamento
HTTPS è un protocollo che integra l'interazione del protocollo HTTP attraverso un meccanismo di crittografia di
tipo Transport Layer Security (SSL/TLS). Questa tecnica aumenta il livello di protezione contro attacchi del tipo
man in the middle.
La porta di default per un accesso di tipo https:// è la porta 443 (mentre per il protocollo http:// si utilizza di default la
porta 80).
Per impostare un web server in modo che accetti connessioni di tipo https, l'amministratore di rete deve creare un
certificato digitale ovvero un documento elettronico che associa l'identità di una persona ad una chiave pubblica.
Questi certificati possono essere creati dai server basati su UNIX con l'ausilio di tools come ssl-ca di OpenSSL
oppure usando gensslcert di SuSE (tinyca2, CA.pl script perl, ). Questi certificati devono essere rilasciati da un
certificate authority o comunque da un sistema che accerta la validità dello stesso in modo da definire la vera identità
del possessore (i browser web sono creati in modo da poter verificare la loro validità tramite una lista preimpostata).
In particolari situazioni (come per esempio nel caso di aziende con una rete intranet privata) è possibile avere un
proprio certificato digitale che si può rilasciare ai propri utenti.
4
HTTPS
5
Questa tecnologia quindi può essere usata anche per permettere un accesso limitato ad un web server.
L'amministratore spesso crea dei certificati per ogni utente che vengono caricati nei loro browser contenenti
informazioni come il relativo nome e indirizzo e-mail in modo tale da permettere al server di riconoscere l'utente nel
momento in cui quest'ultimo tenti di riconnettersi senza immettere nome utente e/o password.
Voci correlate
• Hyper Text Transfer Protocol
• Strict Transport Security
Collegamenti esterni
•
•
•
•
RFC 2818: HTTP Over TLS [1]
SSL 3.0 Specification [2] (IETF)
HTTPS Everywhere [3] creato da Electronic Frontier Foundation
Wikipedia con protocollo HTTPS [4]
Note
[1]
[2]
[3]
[4]
http:/ / tools. ietf. org/ html/ rfc2818
http:/ / tools. ietf. org/ html/ draft-ietf-tls-ssl-version3-00
https:/ / www. eff. org/ https-everywhere/
https:/ / www. wikipedia. org/
Hypertext Transfer Protocol
L'HyperText Transfer Protocol (HTTP) (protocollo di trasferimento di un ipertesto) è usato come principale
sistema per la trasmissione d'informazioni sul web. Le specifiche del protocollo sono gestite dal World Wide Web
Consortium (W3C). Un Server HTTP generalmente resta in ascolto sulla porta 80 usando il protocollo TCP.
Storia
La prima versione dell'HTTP, la 0.9, risale alla fine degli anni ottanta e costituiva, insieme con il linguaggio HTML
e gli URL, il nucleo base della World Wide Web (WWW) global information initiative portata avanti da Tim
Berners-Lee al CERN di Ginevra per la condivisione delle informazioni tra la comunità dei fisici delle alte energie.
La prima versione effettivamente disponibile del protocollo, la HTTP/1.0, venne implementata dallo stesso
Berners-Lee nel 1991 e proposta come RFC 1945 [1] all'ente normatore IETF nel 1996. Con la diffusione di NCSA
Mosaic, un browser grafico di facile uso, il WWW conobbe un successo crescente e divennero evidenti alcuni limiti
della versione 1.0 del protocollo, in particolare:
• l'impossibilità di ospitare più siti www sullo stesso server (virtual host)
• il mancato riuso delle connessioni disponibili
• l'insufficienza dei meccanismi di sicurezza
Il protocollo venne quindi esteso nella versione HTTP/1.1, presentato come RFC 2068 nel 1997 e successivamente
aggiornato nel 1999 come descritto dal RFC 2616 [2]
Hypertext Transfer Protocol
Funzionamento
L'HTTP funziona su un meccanismo richiesta/risposta (client/server): il client esegue una richiesta e il server
restituisce la risposta. Nell'uso comune il client corrisponde al browser ed il server al sito web. Vi sono quindi due
tipi di messaggi HTTP: messaggi richiesta e messaggi risposta.
HTTP differisce da altri protocolli di livello 7 come FTP, per il fatto che le connessioni vengono generalmente
chiuse una volta che una particolare richiesta (o una serie di richieste correlate) è stata soddisfatta. Questo
comportamento rende il protocollo HTTP ideale per il World Wide Web, in cui le pagine molto spesso contengono
dei collegamenti (link) a pagine ospitate da altri server diminuendo così il numero di connessioni attive limitandole a
quelle effettivamente necessarie con aumento quindi di efficienza (minor carico e occupazione) sia sul client che sul
server. Talvolta però pone problemi agli sviluppatori di contenuti web, perché la natura senza stato (stateless) della
sessione di navigazione costringe ad utilizzare dei metodi alternativi per conservare lo stato dell'utente, tipicamente
basati sui cookie.
Messaggio di richiesta
Il messaggio di richiesta è composto di tre parti:
• Riga di richiesta (request line)
• Sezione header (informazioni aggiuntive)
• Body (corpo del messaggio)
Riga di richiesta
La riga di richiesta è composta da metodo, URI e versione del protocollo. Il metodo di richiesta, per la versione 1.1,
può essere uno dei seguenti:
•
•
•
•
•
•
•
•
GET
POST
HEAD
PUT
DELETE
TRACE
OPTIONS
CONNECT
l'URI sta per Uniform Resource Identifier ed indica l'oggetto della richiesta (ad esempio la pagina web che si
intende ottenere).
I metodi HTTP più comuni sono GET, HEAD e POST. Il metodo GET è usato per ottenere il contenuto della risorsa
indicata come URI (come può essere il contenuto di una pagina HTML). HEAD è analogo a GET, ma restituisce
solo i campi dell'header, ad esempio per verificare la data di modifica del file. Una richiesta con metodo HEAD non
prevede l'uso del body.
Il metodo POST è usato di norma per inviare informazioni al server (ad esempio i dati di un form). In questo caso
l'URI indica che cosa si sta inviando e il body ne indica il contenuto.
6
Hypertext Transfer Protocol
Gli header della richiesta
Gli header di richiesta più comuni sono:
Host: Nome del server a cui si riferisce l'URI. È obbligatorio nelle richieste conformi HTTP/1.1 perché permette
l'uso dei virtual host basati sui nomi.
User-Agent: Identificazione del tipo di client: tipo browser, produttore, versione...
Messaggio di risposta
Il messaggio di risposta è di tipo testuale ed è composto da tre parti:
• Riga di stato (status-line)
• Sezione header
• Body (contenuto della risposta)
Riga di stato
La riga di stato riporta un codice a tre cifre catalogato nel seguente modo:
• 1xx: Informational (messaggi informativi)
• 2xx: Successfull (la richiesta è stata soddisfatta)
• 3xx: Redirection (non c'è risposta immediata, ma la richiesta è sensata e viene detto come ottenere la risposta)
• 4xx: Client error (la richiesta non può essere soddisfatta perché sbagliata)
• 5xx: Server error (la richiesta non può essere soddisfatta per un problema interno del server)
I codici di risposta più comuni sono:
• 200 OK. Il server ha fornito correttamente il contenuto nella sezione body.
• 301 Moved Permanently. La risorsa che abbiamo richiesto non è raggiungibile perché è stata spostata in modo
permanente.
• 302 Found. La risorsa è raggiungibile con un altro URI indicato nel header Location. Di norma i browser
eseguono la richiesta all'URI indicato in modo automatico senza interazione dell'utente.
• 400 Bad Request. La risorsa richiesta non è comprensibile al server.
• 404 Not Found. La risorsa richiesta non è stata trovata e non se ne conosce l'ubicazione. Di solito avviene quando
l'URI è stato indicato in modo incorretto, oppure è stato rimosso il contenuto dal server.
• 500 Internal Server Error. Il server non è in grado di rispondere alla richiesta per un suo problema interno.
• 505 HTTP Version Not Supported. La versione di http non è supportata.
Gli header della risposta
Gli header della risposta più comuni sono:
• Server. Indica il tipo e la versione del server. Può essere visto come l'equivalente dell'header di richiesta
User-Agent
• Content-Type. Indica il tipo di contenuto restituito. La codifica di tali tipi (detti Media type) è registrata presso lo
IANA (Internet Assigned Number Authority ); essi sono detti tipi MIME (Multimedia Internet Message
Extensions), la cui codifica è descritta nel documento RFC 1521. Alcuni tipi usuali di tipi MIME incontrati in una
risposta HTML sono:
•
•
•
•
text/html Documento HTML
text/plain Documento di testo non formattato
text/xml Documento XML
image/jpeg Immagine di formato JPEG
7
Hypertext Transfer Protocol
Esempi di messaggi HTTP
Richiesta:
GET /wiki/Pagina_principale HTTP/1.1
Connection: Keep-Alive
User-Agent: Mozilla/5.0 (compatible; Konqueror/3.2; Linux) (KHTML, like Gecko)
Accept: text/html, image/jpeg, image/png, text/*, image/*, */*
Accept-Encoding: x-gzip, x-deflate, gzip, deflate, identity
Accept-Charset: iso-8859-1, utf-8;q=0.5, *;q=0.5
Accept-Language: en
Host: it.wikipedia.org
(la richiesta deve terminare con una riga vuota, cioè con due "a capo" consecutivi)
Risposta:
HTTP/1.0 200 OK
Date: Mon, 28 Jun 2004 10:47:31 GMT
Server: Apache/1.3.29 (Unix) PHP/4.3.4
X-Powered-By: PHP/4.3.4
Vary: Accept-Encoding,Cookie
Cache-Control: private, s-maxage=0, max-age=0, must-revalidate
Content-Language: it
Content-Type: text/html; charset=utf-8
Age: 7673
X-Cache: HIT from wikipedia.org
Connection: close
seguita dai dati richiesti.
Versioni sicure
Dal momento che tutto il traffico HTTP è anonimo e in chiaro, sono state sviluppate diverse alternative per garantire
differenti livelli di sicurezza, in termini di
•
•
•
•
cifratura del traffico;
verifica di integrità del traffico;
autenticazione del server;
autenticazione dell'utente.
La prima proposta venne direttamente da NCSA, con le versioni server 1.1 e client 2.2 che supportavano un
meccanismo di autenticazione utente e cifratura dati basati su messaggi formato PEM e chiavi PGP.
In seguito, sono state standardizzate due versioni sicure del protocollo HTTP chiamate SHTTP e HTTPS. La prima,
modellata sulla posta cifrata S/MIME, è ormai caduta in disuso e prevede meccanismi crittografici a livello di
payload: le richieste e gli header vengono scambiati in chiaro mentre il contenuto della pagina viene cifrato come
una struttura MIME multipart. Il meccanismo HTTPS, inventato da Netscape, usa invece il sottostante canale cifrato
a livello di trasporto mediante SSL o TLS per impedire l'intercettazione di qualsiasi parte della transazione. Entrambi
i protocolli possono garantire l'identità del mittente, ma solo SHTTP è in grado di garantire anche l'integrità del
contenuto dopo averlo, ad esempio, memorizzato su un disco.
8
Hypertext Transfer Protocol
Streaming HTTP
La fruizione nelle pagine WEB di materiale multimediale, quale audio o video viene gestito in modo del tutto
analogo al download dei file, tramite un caricamento progressivo o distribuzione progressiva, dove il file viene
scaricato in modo progressivo dall'inizio alla fine (tramite i protocolli Real Time Streaming Protocol e Real-time
Transport Protocol) e nel caso il bit-rate sia eccessivo per la rete che lo trasporta può verificarsi un continuo
ricaricamento del buffer
Per evitare questi inconvenienti esistono altri sistemi alternativi, che permettono l'adattamento del file alla rete
dell'utente finale, questi sistemi sono caratterizzati dai protocolli:
•
•
•
•
Smooth Streaming, ideato da Microsoft[3][4]
HTTP Dynamic Streaming soluzione ideata da Adobe
HTTP Live Streaming soluzione ideata da Apple
Octoshape è una piattaforma proprietaria di streaming multimediale, che utilizza la tecnologia per offrire un
throughput migliore e rompere la congestione nell'ultimo miglio. Ha la possibilità di utilizzare una suite di
tecnologie multicast per ridurre al minimo la larghezza di banda per qualsiasi CDN, ISP, emittente o del fornitore
dell'ultimo miglio.
Per contro queste soluzioni sono notevolmente più complesse rispetto alle tradizionali tecnologie di streaming.
Alcune delle considerazioni documentate riguardano lo stoccaggio, i costi aggiuntivi per la codifica e la difficoltà nel
mantenimento della qualità globale. Ci sono state anche alcune dinamiche interessanti trovate intorno alle interazioni
complesse fra logica adattiva bit rate in competizione con complessa logica di controllo del flusso TCP.[5][6]
Bibliografia
• RFC 1945 (Specifiche HTTP 1.0)
• RFC 2616 (Specifiche HTTP 1.1)
Voci correlate
•
•
•
•
HTTP tunneling
SPDY
HTTP Live Streaming
Do not track header
Note
[1] http:/ / tools. ietf. org/ html/ rfc1945
[2] http:/ / tools. ietf. org/ html/ rfc2616
[3] IIS Smooth Streaming Technical (http:/ / download. microsoft. com/ download/ 4/ 2/ 4/ 4247C3AA-7105-4764-A8F9-321CB6C765EB/
IIS_Smooth_Streaming_Technical_Overview. pdf)
[4] Smooth Streaming (http:/ / www. iis. net/ download/ smoothstreaming)
[5] An Experimental Evaluation of Rate-Adaptation Algorithms in Adaptive Streaming over HTTP (http:/ / www. cc. gatech. edu/ ~sakhshab/
Saamer_MMSys11. pdf)
[6] Is adaptive bit rate the yellow brick road, or fool's gold for HD streaming? (http:/ / www. fierceonlinevideo. com/ story/
adaptive-bit-rate-yellow-brick-road-or-fools-gold-hd-streaming/ 2011-01-28)
9
Hypertext Transfer Protocol
Altri progetti
•
Wikimedia Commons contiene file multimediali: http://commons.wikimedia.org/wiki/Category:HTTP
Simple Mail Transfer Protocol
Simple Mail Transfer Protocol (SMTP) è il protocollo standard per la trasmissione via internet di e-mail. In
italiano si potrebbe tradurre come "Protocollo elementare di trasferimento postale".
I protocolli utilizzati per ricevere posta sono invece il protocollo POP e l'IMAP.
Descrizione
È un protocollo relativamente semplice, testuale, nel quale vengono specificati uno o più destinatari di un messaggio,
verificata la loro esistenza e il messaggio viene trasferito. È abbastanza facile verificare come funziona un server
SMTP mediante un client telnet. Il protocollo SMTP utilizza come protocollo di livello transport TCP. Il client apre
una sessione TCP verso il server sulla porta 25 (recentemente modificata in 587 da molti Provider per limitare lo
spam). Per associare il server SMTP a un dato nome di dominio (DNS) si usa un Resource Record di tipo MX (Mail
eXchange) (Tipi di record DNS).
Poiché SMTP è un protocollo testuale basato sulla codifica ASCII ( in particolare ASCII NVT), non è permesso
trasmettere direttamente testo composto con un diverso set di caratteri e tantomeno file binari. Lo standard MIME
permette di estendere il formato dei messaggi mantenendo la compatibilità col software esistente. Per esempio, al
giorno d'oggi molti server SMTP supportano l'estensione 8BITMIME, la quale permette un trasferimento di un testo
che contiene caratteri accentati (non-ASCII) senza bisogno di trascodificarlo. Altri limiti di SMTP, quale la
lunghezza massima di una riga, impediscono la spedizione di file binari senza trascodifica. (Nota che per i file binari
inviati con HTTP si utilizza il formato MIME senza bisogno di una trascodifica.)
SMTP è un protocollo che permette soltanto di inviare messaggi di posta, ma non di richiederli ad un server: per fare
questo il client di posta deve usare altri protocolli, quali il POP3 (Post Office Protocol) e l'IMAP (Internet Message
Access Protocol).
Storia
SMTP iniziò a diffondersi nei primi anni '80. A quel tempo era un'alternativa a UUCP, che era più adatto a gestire il
trasferimento di e-mail fra computer la cui connessione era intermittente. L'SMTP, d'altra parte, funziona meglio se i
computer sono sempre collegati alla rete.
Sendmail fu uno dei primi (se non proprio il primo) mail transfer agent ad implementare il protocollo SMTP. Fino al
2001 sono stati scritti almeno 50 programmi che implementano il protocollo SMTP come client (mittente dei
messaggi) o server (destinatario del messaggio). Server molto diffusi sono Exim di Philip Hazel, Postfix di Wietse
Venema, qmail di D. J. Bernstein, Courier di Sam Varshavchik e Microsoft Exchange Server.
10
Simple Mail Transfer Protocol
Esempio di comunicazione SMTP
Quella che segue è una transazione SMTP valida. Le righe inviate dal client sono precedute da "C:", mentre quelle
inviate dal server da "S:". Su molti computer si può stabilire una connessione mediante il comando telnet:
telnet www.example.com 25
Questo comando apre una connessione a www.example.com sulla porta 25 di TCP.
S:
C:
S:
C:
S:
C:
S:
C:
S:
C:
C:
C:
C:
C:
C:
C:
S:
C:
S:
220 www.example.com ESMTP Postfix
HELO mydomain.com
250 Hello mydomain.com, pleased to meet you
MAIL FROM: <[email protected]>
250 [email protected] ... Sender ok
RCPT TO: <[email protected]>
250 [email protected] ... Recipient Ok
DATA
354 End data with "." on a line by itself
Subject: messaggio di prova
From: [email protected]
To: [email protected]
Ciao,
questa è una prova.
.
250 Ok: queued as 12345
QUIT
221 Bye
Sebbene non sia obbligatorio, quasi tutti i client richiedono al server quali estensioni del protocollo SMTP il server
supporta usando il saluto EHLO. Questi client usano HELO soltanto nel caso in cui il server non risponda ad EHLO.
La sicurezza del protocollo SMTP
Una delle limitazioni del protocollo SMTP originario è che non gestisce l'autenticazione dei mittenti. Oltre al rischio
di spam, esiste la possibilità di inviare e-mail facendo apparire come mittente l'indirizzo corrispondente ad un altro
account. Senza accedere all'account di terzi, è possibile stabilire una connessione al mail-server e scrivere un
messaggio in codice SMTP contenente i comandi relativi a mittente e destinatario, dare i relativi parametri e il corpo
della e-mail.
Per ovviare a questi problemi è stata sviluppata un'estensione chiamata SMTP-AUTH.
Nonostante questo, lo spam rimane ancor oggi un grave problema dello posta eletronica. Tuttavia, non si ritiene
praticabile una revisione radicale del protocollo SMTP, per via del gran numero di implementazioni del protocollo
attuale (ad esempio, è stato proposto Internet Mail 2000 come protocollo alternativo).
Per questo motivo sono stati proposti diversi protocolli ausiliari per assistere le transazioni SMTP. L'Anti-Spam
Research Group dell'IRTF sta lavorando su varie proposte di autenticazione e-mail centrate sulla flessibilità,
leggerezza e scalabilità.
11
Simple Mail Transfer Protocol
Gli standard RFC
(in lingua originale)
•
•
•
•
•
•
•
•
RFC 821, pubblicato nel 1982
RFC 1123 pubblicato nel 1989. Correzioni all'RFC 821
RFC 1425 pubblicato nel 1993. Introduce il comando EHLO
RFC 1651 pubblicato nel 1994. Rimpiazza l'RFC 1425
RFC 1869 pubblicato nel 1995. Rimpiazza l'RFC 1651
RFC 1891 pubblicato nel 1996. Corregge l'RFC 1869
RFC 2821 pubblicato nel 2001. Rimpiazza gli RFC 821, RFC 1123, RFC 1869
RFC 2822 pubblicato nel 2001.
(tradotti in italiano)
• RFC 1869 - Estensioni del servizio SMTP (tradotta) [1]
Voci correlate
• On-Demand Mail Relay
• Multipurpose Internet Mail Extensions (MIME)
• Mail server
Note
[1] http:/ / www. rfc. altervista. org/ rfctradotte. html
Post Office Protocol
Il Post Office Protocol (detto anche POP) è un protocollo di livello applicativo di tipo client-server che ha il
compito di permettere, mediante autenticazione, l'accesso da parte del client ad un account di posta elettronica
presente su di un host server e scaricare le e-mail dell'account stesso.
Il protocollo per inviare posta è invece il protocollo SMTP.
Descrizione
Il POP (nella versione 3) rimane in attesa sulla porta 110 dell'host (di default, ma può anche essere diversa) per una
connessione TCP da parte di un client.
I messaggi di posta elettronica, per essere letti, devono essere scaricati sul computer (questa è una notevole
differenza rispetto all'IMAP), anche se è possibile lasciarne una copia sull'host.
Il protocollo POP3 non prevede alcun tipo di cifratura, quindi anche le password utilizzate per l'autenticazione fra
server e client passano in chiaro. Per risolvere questo possibile problema è stata sviluppata l'estensione APOP che
utilizza MD5.
12
Post Office Protocol
Esempio di comunicazione POP3
Dopo aver stabilito una connessione tra il mittente (il client) e il destinatario (il server), ciò che accade è l'apertura di
una sessione POP3. Nella successiva conversazione, qualsiasi cosa inviata dal client è preceduta con "C:", mentre
qualsiasi cosa inviata dal server è preceduta da "S:". Su molti computer si può stabilire una connessione mediante il
comando telnet:
telnet www.example.com 110
Questo comando apre un collegamento POP3 verso l'host www.example.com.
S:+OK <[email protected]>
C:USER pippo
S:+OK
C:PASS pluto
S:+OK
C:LIST
S:+OK
1 817
2 124
.
C:RETR 1
S:+OK
Return-Path: <[email protected]>
Delivered-To: [email protected]
Date: Sat, 22 Oct 2005 13:24:54 +0200
From: Mario Rossi <[email protected]>
Subject: xxxx
Content-Type: text/plain; charset=ISO-8859-1
testo messaggio
.
C:DELE 1
S:+OK
C:QUIT
S:+OK
Voci correlate
• IMAP
Collegamenti esterni
•
•
•
•
•
RFC 937 POP versione 2
RFC 1939 POP versione 3 (traduzione in italiano [1])
RFC 1734 Il comando POP3 AUTH (traduzione in italiano [2])
RFC 1957 Osservazioni aggiuntive sull'implementazione di POP3 (traduzione in italiano [3])
RFC 3206 I codici di risposta POP SYS e AUTH (traduzione in italiano [4])
13
Post Office Protocol
Note
[1]
[2]
[3]
[4]
http:/ / www. rfc. altervista. org/ rfctradotte/ rfc1939_tradotta. txt
http:/ / www. rfc. altervista. org/ rfctradotte/ rfc1734_tradotta. txt
http:/ / www. rfc. altervista. org/ rfctradotte/ rfc1957_tradotta. txt
http:/ / www. rfc. altervista. org/ rfctradotte/ rfc3206_tradotta. txt
Internet Message Access Protocol
L'Internet Message Access Protocol (IMAP), a volte anche chiamato Interactive Mail Access Protocol, è un
protocollo di comunicazione per la ricezione di e-mail.
Il significato "Interactive Mail Access Protocol" è stato valido fino alla versione 3, dalla quarta in poi è cambiato in
"Internet Message Access Protocol". L'attuale versione è la "4 revision 1".
Il protocollo è stato inventato da Mark Crispin nel 1986 come alternativa più moderna all'utilizzatissimo POP.
La porta predefinita del demone IMAP sull'host è la 143. Se si utilizza una connessione sicura tramite SSL, allora la
porta è la 993.
Differenze tra IMAP e POP
Entrambi i protocolli permettono ad un client di accedere, leggere e cancellare le e-mail da un server, ma con alcune
differenze. Con entrambi i protocolli, il client scarica la posta direttamente sul PC, eventualmente cancellandola dal
server, ma è altresì possibile conservare copia delle proprie e-mail sul server, e scaricarle in un secondo momento da
altri computer. Ecco un elenco delle caratteristiche dell'IMAP ma non del POP:
• Accesso alla posta sia online che off-line
Mentre si utilizza il POP3, il client si connette per scaricare i nuovi messaggi e poi si disconnette. Con l'IMAP
il client rimane connesso e risponde alle richieste che l'utente fa attraverso l'interfaccia; questo permette di
risparmiare tempo se ci sono messaggi di grandi dimensioni.
• Più utenti possono utilizzare la stessa casella di posta
Il protocollo POP assume che un solo client (utente) sia connesso ad una determinata mailbox (casella di
posta), quella che gli è stata assegnata. Al contrario l'IMAP4 permette connessioni simultanee alla stessa
mailbox, fornendo meccanismi per controllare i cambiamenti apportati da ogni utente.
• Supporto all'accesso a singole parti MIME di un messaggio
La maggior parte delle e-mail sono trasmesse nel formato MIME, che permette una struttura ad albero del
messaggio, dove ogni ramo è un contenuto diverso (intestazioni, allegati o parti di esso, messaggio in un dato
formato, eccetera). Il protocollo IMAP4 permette di scaricare una singola parte MIME o addirittura sezioni
delle parti, per avere un'anteprima del messaggio o per scaricare una mail senza i file allegati.
• Supporto per attributi dei messaggi tenuti dal server.
Attraverso l'uso di attributi, tenuti sul server, definiti nel protocollo IMAP4, ogni singolo client può tenere
traccia di ogni messaggio, per esempio per sapere se è già stato letto o se ha avuto una risposta.
• Accesso a molteplici caselle di posta sul server
Alcuni utenti, con il protocollo IMAP4, possono creare, modificare o cancellare mailbox (di solito associate a
cartelle) sul server. Inoltre, questa gestione delle mailbox, permette di avere cartelle condivise tra utenti
diversi.
• Possibilità di fare ricerche sul server
14
Internet Message Access Protocol
L'IMAP4 permette al client di chiedere al server quali messaggi soddisfano un certo criterio, per fare, per
esempio, delle ricerche sui messaggi senza doverli scaricare tutti.
• Supporto di un meccanismo per la definizione di estensioni
Nelle specifiche dell'IMAP è descritto come un server può far sapere agli utenti se ha delle funzionalità extra.
Molte estensioni dell'IMAP sono molto diffuse, ad esempio l'IMAP Idle [1].
L'IMAP è principalmente utilizzato nelle grandi network come università o aziende, dove un utente cambia
postazione spesso: con il POP3, sarebbe necessario scaricare i messaggi ogni volta che si cambia pc, mentre con
l'IMAP si possono scaricare solo i nuovi messaggi o accedere ad un messaggio specifico senza dover scaricare gli
altri.
Collegamenti esterni
• Internet Message Access Protocol - version 4rev1 [2]
• Interactive Mail Access Protocol - version 3 [3]
• Interactive Mail Access Protocol - version 2 [4]
Note
[1]
[2]
[3]
[4]
http:/ / www. isode. com/ whitepapers/ imap-idle. html
http:/ / www. rfc-editor. org/ rfc/ rfc3501. txt
http:/ / www. rfc-editor. org/ rfc/ rfc1203. txt
http:/ / www. rfc-editor. org/ rfc/ rfc1176. txt
Dynamic Host Configuration Protocol
In telecomunicazioni e informatica il Dynamic Host Configuration Protocol (DHCP) (protocollo di
configurazione IP dinamica) è un protocollo di rete di livello applicativo che permette ai dispositivi o terminali di
una certa rete locale di ricevere dinamicamente ad ogni richiesta di accesso ad una rete IP (quale ad esempio
Internet) la configurazione IP necessaria per stabilire una connessione ed operare su una rete più ampia basata su
Internet Protocol cioè interoperare con tutte le altre sottoreti scambiandosi dati, purché anch'esse integrate allo stesso
modo con il protocollo IP.
Generalità
In una rete basata sul protocollo IP, ogni calcolatore ha bisogno di un indirizzo IP, scelto in modo tale che
appartenga all'insieme di indirizzi possibili assegnati all'intera sottorete (cioè al Net_ID) a cui è collegato e che sia
univoco, cioè non ci siano altri calcolatori che stiano già utilizzando quell'indirizzo.
Il compito di assegnare manualmente gli indirizzi IP ai calcolatori comporta infatti un rilevante onere per gli
amministratori di rete, soprattutto in reti di grandi dimensioni o in caso di numerosi computer che si connettono a
rotazione solo a ore o giorni determinati. Inoltre gli indirizzi IPv4 (attualmente usati nella quasi totalità delle reti al
mondo) con l'aumentare dei computer connessi a Internet hanno cominciato a scarseggiare, diminuendo la
disponibilità di IP fissi per eventuali configurazioni statiche.
DHCP supporta questo compito automaticamente ed in maniera dinamica cioè solo quando richiesto dall'host. Viene
utilizzato soprattutto in reti locali, in particolare su Ethernet. In altri contesti, funzioni simili sono svolte all'interno di
PPP. Una volta ricevuta la configurazione di rete la stazione o computer della rete locale diventa a tutti gli effetti un
host (ospite) della rete Internet e può intraprendere sessioni di navigazione Web e tutti gli altri servizi offerti dalla
Rete stessa.
15
Dynamic Host Configuration Protocol
Parametri gestiti da DHCP
Il protocollo DHCP viene usato anche per assegnare al computer diversi parametri necessari per il suo corretto
funzionamento sulla rete a cui è collegato. Tra i più comuni, oltre all'assegnazione dinamica dell'indirizzo IP, si
possono citare:
•
•
•
•
•
•
•
Maschera di sottorete
Default Gateway
Indirizzi dei server DNS
Nome di dominio DNS di default
Indirizzi dei server WINS
Indirizzi dei server NTP
Indirizzo di un server tftp e nome di un file da caricare per calcolatori che caricano dalla rete l'immagine del
sistema operativo (si veda Preboot Execution Environment).
• Parametri di configurazione del proxy WPAD
Nel protocollo c'è comunque il supporto per assegnare tramite DHCP molti altri parametri, definiti nell'RFC 2132.
Componenti del protocollo
Il Client DHCP è un calcolatore che ha bisogno di ottenere un indirizzo IP valido per la sottorete a cui è collegato, e
anche il programma che si occupa di richiedere l'indirizzo IP e configurarlo.
Il Server DHCP è il calcolatore che assegna gli indirizzi IP, e anche il processo che svolge questa funzione. Talvolta
questa funzione è incorporata in un router.
Il DHCP relay è il calcolatore (o più spesso una funzione implementata in un router) che si occupa di inoltrare le
richieste DHCP ad un server, qualora questo non sia sulla stessa sottorete. Questo componente è necessario solo se
un server DHCP deve servire molteplici sottoreti. Deve esistere almeno un DHCP relay per ciascuna sottorete
servita. Ogni relay deve essere esplicitamente configurato per inoltrare le richieste a uno o più server.
Richiesta e attribuzione dell'indirizzo
DHCP utilizza il protocollo UDP, le porte registrate sono la 67 per il server e la 68 per il client.
Quando un calcolatore vuole ottenere un indirizzo tramite DHCP, attiva il processo DHCP client. In questo
momento, il calcolatore non ha un indirizzo IP valido, quindi non può usare tutte le funzionalità della rete.
La procedura descritta dal protocollo consta di diversi handshake tra client e server ovvero scambio di pacchetti
ovviamente tutti incapsulati in frame di livello datalink come ad esempio Ethernet:
• In primis il client invia un pacchetto chiamato DHCPDISCOVER in broadcast, con indirizzo IP sorgente messo
convenzionalmente a 0.0.0.0, e destinazione 255.255.255.255 (indirizzo di broadcast).
• Il pacchetto viene ricevuto da tutto il dominio di broadcast ed in particolare da tutti i server DHCP presenti, i
quali possono rispondere (o meno) ciascuno con un pacchetto di DHCPOFFER in cui propongono un indirizzo
IP e gli altri parametri di configurazione al client. Questo pacchetto di ritorno è indirizzato direttamente
all'indirizzo di livello datalink del client (che non ha ancora un indirizzo IP) cioè in unicast, per cui può essere
inviato solo da un server che si trovi sullo stesso dominio di broadcast.
Se nel dominio di broadcast ci sono anche uno o più DHCP relay, questi inoltrano il pacchetto al loro server di
riferimento, che può rispondere al client sempre attraverso il relay. Il relay agent comunica al server il proprio
indirizzo IP sulla sottorete da cui ha ricevuto il pacchetto di DHCPDISCOVER, permettendo al server di capire da
quale sottorete è arrivata la richiesta, e quindi offrire un indirizzo per la sottorete giusta. Un server DHCP che debba
servire diverse sottoreti IP deve essere configurato per conoscere i parametri di ciascuna (indirizzo della rete,
maschera di sottorete, indirizzo di broadcast, indirizzo del gateway).
16
Dynamic Host Configuration Protocol
• Il client aspetta per un certo tempo di ricevere una o più offerte, dopodiché ne seleziona una, ed invia un
pacchetto di DHCPREQUEST in broadcast, indicando all'interno del pacchetto, con il campo "server identifier",
quale server ha selezionato. Anche questo pacchetto raggiunge tutti i server DHCP presenti sulla rete
(direttamente o tramite un relay).
• Il server che è stato selezionato conferma l'assegnazione dell'indirizzo con un pacchetto di DHCPACK
(nuovamente indirizzato in unicast all'indirizzo di livello datalink del client, possibilmente attraverso un relay); gli
altri server vengono automaticamente informati che la loro offerta non è stata scelta dal client, e che sulla
sottorete è presente un altro server DHCP.
Scadenza e rinnovo degli indirizzi
A questo punto, il client è autorizzato ad usare l'indirizzo ricevuto per un tempo limitato, detto tempo di lease. Prima
della scadenza, dovrà tentare di rinnovarlo inviando un nuovo pacchetto DHCPREQUEST al server, che gli
risponderà con un DHCPACK se vuole prolungare l'assegnazione dell'indirizzo. Questi sono normali pacchetti IP
unicast scambiati tra due calcolatori che hanno indirizzi validi. Se il client non riesce a rinnovare l'indirizzo, tornerà
allo stato iniziale cercando di farsene attribuire un altro.
Identificazione ed autenticazione dei client
Il client si identifica verso il server attraverso un campo client-id dei pacchetti DHCP. Questo campo ha
normalmente come valore il mac address della scheda di rete per cui si richiede l'indirizzo, ma può anche essere
configurato manualmente. Questa è l'unica forma di autenticazione disponibile per DHCP, ed è piuttosto debole, in
quanto utilizza un dato che viene inviato in broadcast sulla rete locale, e quindi può essere facilmente sniffato da
qualunque altro calcolatore connesso alla stessa rete. Per controllare l'accesso ad una rete esistono metodi più solidi,
che però richiedono un supporto da parte degli switch a cui sono collegati gli utenti, come IEEE 802.1x.
Un server dovrebbe cercare di assegnare allo stesso client sempre lo stesso indirizzo IP su ciascuna sottorete, ma non
ci sono garanzie che questo sia possibile, a meno che un indirizzo non sia associato esclusivamente ad un client.
Il server può utilizzare il campo client-id per decidere quale indirizzo assegnare al client, o quali altri parametri
passargli, o anche di non rispondere per nulla alla richiesta del client.
Identificazione del server, sicurezza
Il server si identifica verso il client con il proprio indirizzo IP. Un client potrebbe quindi decidere di accettare
indirizzi solo da un server già noto.
Qualunque calcolatore collegato ad una sottorete potrebbe fare da server DHCP per i calcolatori di quella sottorete, o
da relay verso un server DHCP arbitrario. È quindi possibile che un calcolatore configurato male o deliberatamente
per fini illeciti offra abusivamente indirizzi IP, creando malfunzionamenti alla rete e/o gravi problemi di sicurezza.
Un calcolatore che abbia ricevuto l'indirizzo IP da un server DHCP mal configurato non sarà in grado di utilizzare la
rete.
Se invece il server DHCP abusivo è configurato per scopi illeciti, le conseguenze possono essere anche peggiori:
esso infatti può offrire indirizzi che sa essere inutilizzati, oppure su una sottorete IP diversa da quella ufficiale,
evitando così di generare conflitti con il server ufficiale, ed indicare sé stesso come default gateway. Dovrà poi
ridirigere le connessioni effettuate dai client verso il gateway ufficiale utilizzando IP masquerading. A questo punto,
potrà intercettare e sniffare tutto il traffico generato dai client, che potrebbero non accorgersi facilmente della
differenza.
Per prevenire questi rischi, alcuni switch offrono una funzionalità detta "DHCP snooping", per cui analizzano tutti i
pacchetti DHCP che li attraversano, fermando quelli che non sono originati da server autorizzati.
17
Dynamic Host Configuration Protocol
Visualizzare la configurazione IP
I sistemi Windows offrono un comando da digitare direttamente su shell, detto ipconfig , che permette di conoscere
la configurazione IP del proprio computer. I comandi sono:
• ipconfig
oppure
• ipconfig /all
L'uscita di quest'ultimo comando fornisce configurazione IP per ogni interfaccia di rete.
Voci correlate
• Bootstrap Protocol (BOOTP)
• NAT
Collegamenti esterni
• RFC 2131 - Dynamic Host Configuration Protocol
• RFC 1534 - Interoperation Between DHCP and BOOTP
• RFC 2132 - DHCP Options and BOOTP Vendor Extensions
• Sito [1] del server DHCP prodotto dall'Internet Software Consortium
Note
[1] http:/ / www. isc. org/ sw/ dhcp
Simple Network Management Protocol
In informatica e telecomunicazioni Simple Network Management Protocol (SNMP) è un protocollo di rete che
appartiene alla suite di protocolli Internet definito dalla IETF (Internet Engineering Task Force). Il protocollo opera
al livello 7 del modello OSI e consente la configurazione, la gestione e la supervisione (monitoring) di apparati
collegati in una rete (siano essi nodi interni di commutazione come i dispositivi di rete e nodi terminali di utenza),
riguardo a tutti quegli aspetti che richiedono azioni di tipo amministrativo (management).
Architettura
I tre componenti logici fondamentali del framework SNMP per il suo funzionamento sono:
1. sistema gestito (managed object);
2. agente di gestione (management agent o master agent) e vari subagent (su sistema gestito);
3. sistema di gestione (manager) da remoto;
Ogni sistema gestito (per esempio un semplice nodo, un router, una stampante o qualsiasi altro dispositivo che
fornisca un'interfaccia di gestione SNMP) ospita un agente di gestione (master agent) e solitamente un certo numero
di subagent. Il master agent ha almeno il ruolo di intermediario fra il manager (che è l'applicazione remota che
prende le decisioni di gestione, per esempio sotto il controllo diretto dell'operatore umano) e i subagent (che sono gli
esecutori di tali decisioni). Ciascun subagent è incaricato di attuare le decisioni di gestione da parte del manager nel
contesto di un particolare sottosistema o relativamente a un particolare aspetto del sistema gestito. In sistemi che
forniscono meccanismi di gestione particolarmente semplici, master agent e subagent possono confluire in un unico
componente software capace sia di dialogare con il manager che di attuarne le decisioni; in questo caso si parlerà
semplicemente di agent.
18
Simple Network Management Protocol
SNMP utilizza quindi una chiara separazione fra il protocollo di gestione e la struttura dell'oggetto gestito.
Nell'architettura SNMP, per ogni sottosistema è definita una base di dati detta MIB (Management Information Base),
gestita dal corrispondente subagent, la quale rappresenta lo stato del sottosistema gestito, o meglio, una proiezione di
tale stato limitata agli aspetti di cui si vuole consentire la gestione. Si tratta di una base dati che si potrebbe definire,
mutuando un termine dalla riflessione, "causalmente connessa": in altre parole, ogni modifica alla MIB causa un
corrispondente mutamento nello stato del sottosistema rappresentato, e viceversa. Garantire questa proprietà della
MIB è la funzione principale del subagent che la gestisce.
L'accesso alla MIB (in lettura e scrittura) rappresenta l'interfaccia fornita al manager per gestire il sistema. Ogni
MIB, pur variando nei contenuti specifici, ha la medesima struttura generale e i medesimi meccanismi generali di
accesso da parte del manager (lettura e scrittura dei dati). Grazie alla connessione causale della MIB, è quindi
possibile al manager agire sullo stato del sottosistema in un modo che è largamente indipendente dalle procedure
concrete che devono poi essere messe in atto (dal subagent) per estrarre le informazioni di stato rappresentate nella
MIB, o attuare le modifiche di stato a seguito di cambiamenti dei contenuti della MIB. Così, per esempio, si potrebbe
avere un dato di MIB che rappresenta l'indirizzo IP del sistema gestito; per modificare tale indirizzo, al manager è
sufficiente accedere alla MIB sovrascrivendo il dato corrispondente, prescindendo dei dettagli di come una tale
modifica venga poi concretamente "attuata" sul sistema gestito attraverso l'agent o il subagent.
Funzionamento
Più in dettaglio, il manager dialoga con i sistemi gestiti essenzialmente in due modi: invia richieste SNMP e riceve
notifiche SNMP.
Porte utilizzate
Viene utilizzata la porta UDP 161 per le interrogazioni e le risposte, e la porta UDP 162 come destinazione dei
messaggi trap SNMP generate dagli agent SNMP.
Richieste
Alcuni esempi di richieste sono:
1.
2.
3.
4.
GET, usata per leggere uno o più dati di MIB;
GETNEXT, usata per leggere iterativamente una sequenza di dati di MIB;
GETBULK, usata per leggere con una sola richiesta grandi porzioni di MIB;
SET, usata per scrivere (modificare) uno o più dati di MIB.
Notifiche
Le notifiche sono messaggi asincroni inviati dall'agent per segnalare eventi occorsi nel sistema gestito (p.es. allarmi
in caso di guasti). Le notifiche SNMP senza acknowledgement vengono comunemente chiamate trap, anche se la
terminologia esatta varia a seconda della versione di SNMP in questione. Le notifiche SNMP con acknowledgment
vengono invece chiamate inform.
Autenticazione ed autorizzazione
Per motivi di sicurezza, i sistemi facenti parte di una rete SNMP vengono raggruppati in una cosiddetta comunità. La
comunità è identificata da una stringa di 32 byte e ciascun sistema può appartenere a più di una di queste comunità.
L'agent SNMP accetta richieste solo da un manager della stessa comunità che si identifica e autentica con la suddetta
stringa ottenendo l'autorizzazione o meno a procedere nel controllo remoto di gestione. L'autorizzazione dei membri
di una comunità ad operare su un oggetto può essere di tre tipi:
19
Simple Network Management Protocol
• read: il manager può interrogare l'agent solo per conoscere lo stato del sistema (solo GET o modalità di sola
lettura);
• write: dove il manager può anche variarne l'impostazione (GET e SET, o modalità lettura/scrittura);
• trap: l'agent può inviare trap al manager.
Trasporto
Tipicamente, SNMP utilizza le porte UDP 161 per l'agent e 162 per il manager.
Voci correlate
• Amministratore di sistema
• Amministratore di rete
Collegamenti esterni
• SimpleWeb [1]
• http://www.henrys.de/daniel/download/SNMP.HTM
• SNMP FAQ part 1 [2]
• SNMP FAQ part 2 [3]
• RFC:
•
•
•
•
RFC 1157 - A Simple Network Management Protocol (SNMP)
RFC 1441 - Introduction to version 2 of the Internet-standard Network Management Framework
RFC 3410 - Introduction and Applicability Statements for Internet Standard Management Framework
RFC 3411 - Standard 62 - An Architecture for Describing Simple Network Management Protocol (SNMP)
Management Frameworks
• RFC 3412 - Standard 62 - Message Processing and Dispatching for the Simple Network Management Protocol
(SNMP)
• RFC 3413 - Standard 62 - Simple Network Management Protocol (SNMP) Application
• RFC 3414 - Standard 62 - User-based Security Model (USM) for version 3 of the Simple Network
Management Protocol (SNMPv3)
• RFC 3415 - Standard 62 - View-based Access Control Model (VACM) for the Simple Network Management
Protocol (SNMP)
• RFC 3416 - Standard 62 - Version 2 of the Protocol Operations for the Simple Network Management Protocol
(SNMP)
• RFC 3417 - Standard 62 - Transport Mappings for the Simple Network Management Protocol (SNMP)
• RFC 3418 - Standard 62 - Management Information Base (MIB) for the Simple Network Management
Protocol (SNMP)
• RFC 3584 - Coexistence between Version 1, Version 2, and Version 3 of the Internet-standard Network
Management Framework
• RFC 3512 - Configuring Networks and Devices with Simple Network Management Protocol (SNMP)
• Implementazioni:
• Net-SNMP: Open source SNMP implementation [4]
• Netsnmpj: Open source SNMP for Java [5]
• OpenSNMP: multi-threaded SNMPv3 engine [6]
• Cisco:
• Configuring SNMP Support [7]
• Cisco SNMP command reference [8]
20
Simple Network Management Protocol
• Cisco IOS MIB Tools [9]
Note
[1]
[2]
[3]
[4]
[5]
[6]
[7]
[8]
[9]
http:/ / www. simpleweb. org
http:/ / www. snmp. com/ FAQs/ snmp-faq-part1. txt
http:/ / www. snmp. com/ FAQs/ snmp-faq-part2. txt
http:/ / www. net-snmp. org/
http:/ / netsnmpj. sourceforge. net/
http:/ / sourceforge. net/ projects/ opensnmp/
http:/ / www. cisco. com/ univercd/ cc/ td/ doc/ product/ software/ ios122/ 122cgcr/ ffun_c/ fcfprt3/ fcf014. htm
http:/ / www. cisco. com/ univercd/ cc/ td/ doc/ product/ software/ ios123/ 123cgcr/ fun_r/ cfr_1g11. pdf
http:/ / www. cisco. com/ go/ mibs
File Transfer Protocol
Il File Transfer Protocol (FTP) (protocollo di trasferimento file), è un protocollo per la trasmissione di dati tra host
basato su TCP.
FTP è uno dei primi protocolli definiti ed ha subito una lunga evoluzione negli anni. La prima specifica, sviluppata
presso il MIT, risale al 1971 (RFC-114 [1]). L'attuale specifica fa riferimento all'RFC-959 [2].
Gli obiettivi principali di FTP descritti nella sua RFC ufficiale sono:
•
•
•
•
Promuovere la condivisione di file (programmi o dati)
Incoraggiare l'uso indiretto o implicito di computer remoti.
Risolvere in maniera trasparente incompatibilità tra differenti sistemi di stoccaggio file tra host.
Trasferire dati in maniera affidabile ed efficiente.
Altro protocollo usato per il trasporto dati in Internet è il protocollo HTTP.
21
File Transfer Protocol
Il modello
Dove:
• PI (protocol interpreter) è l'interprete del protocollo, utilizzato da client (User-PI) e server (Server-PI) per lo
scambio di comandi e risposte. In gergo comune ci si riferisce ad esso come "canale comandi".
• DTP (data transfer process) è il processo di trasferimento dati, utilizzato da client (User-DTP) e server
(Server-DTP) per lo scambio di dati. In gergo comune ci si riferisce ad esso come "canale dati".
Funzionamento generale
FTP, a differenza di altri protocolli come ad esempio HTTP, utilizza due connessioni separate per gestire comandi e
dati. Un server FTP rimane tipicamente in ascolto sulla porta 21 TCP a cui si connette il client. La connessione da
parte del client determinerà l'inizializzazione del canale comandi attraverso il quale client e server si scambieranno
comandi e risposte. Lo scambio effettivo di dati (come ad esempio file) richiederà l'apertura del canale dati il quale
può essere di due tipi.
In un canale dati di tipo attivo il client apre una porta tipicamente random, tramite il canale comandi rende noto il
numero di tale porta al server e attende che esso si connetta. Una volta che il server ha attivato la connessione dati al
client FTP, quest'ultimo effettua il binding della porta sorgente alla porta 20 del server FTP. A tale scopo possono
venire impiegati i comandi PORT o EPRT, a seconda del protocollo di rete utilizzato (tipicamente IPv4 o IPv6).
In un canale dati di tipo passivo il server apre una porta tipicamente random (> 1023), tramite il canale comandi
rende noto il numero di tale porta al client e attende che esso si connetta. A tale scopo possono venire impiegati i
comandi PASV o EPSV, a seconda del protocollo di rete utilizzato (tipicamente IPv4 o IPv6).
Sia il canale comandi sia il canale dati sono delle connessioni TCP; FTP crea un nuovo canale dati per ogni file
trasferito all'interno della sessione utente, mentre il canale comandi rimane aperto per l'intera durata della sessione
utente, in altre parole il canale comandi è persistente mentre il canale dati è non persistente.
22
File Transfer Protocol
23
Un server FTP offre svariate funzioni che permettono al client di interagire con il suo filesystem e i file che lo
popolano, tra cui:
•
•
•
•
•
Download/upload di file.
Resume di trasferimenti interrotti.
Rimozione e rinomina di file.
Creazione di directory.
Navigazione tra directory.
FTP fornisce inoltre un sistema di autenticazione (N.B. in chiaro) degli accessi. Il client che si connette potrebbe
dover fornire delle credenziali a seconda delle quali gli saranno assegnati determinati privilegi per poter operare sul
filesystem. L'autenticazione cosiddetta "anonima" prevede che il client non specifichi nessuna password di accesso e
che lo stesso abbia privilegi che sono tipicamente di "sola lettura".
Comandi
Lista dei comandi definiti nella RFC-959 [2].
Comandi
Nome
Comando
Parametri
Descrizione
Abort
ABOR
Interrompe trasferimento dati.
Account
ACCT
<account-information> Informazioni account (raramente usato).
Allocate
ALLO
<decimal-integer>
Alloca spazio sufficiente per ricevere un file (raramente usato).
Append (with
create)
APPE
<pathname>
Appende dati ad un file esistente.
Change to parent
directory
CDUP
Change working
directory
CWD
<pathname>
Cambia directory corrente.
Delete
DELE
<pathname>
Cancella file.
Help
HELP
<command>
Ritorna la lista dei comandi accettati dal server. Con argomento fornisce
spiegazioni riguardo al comando specificato.
List
LIST
<pathname>
Lista il contenuto di una directory o le proprietà di un singolo file.
Trasfer mode
MODE
<mode-type>
Imposta la modalità di trasferimento (S=stream, B=block,
C=compressed).
Make directory
MKD
<pathname>
Crea directory.
Name list
NLST
<pathname>
Ritorna il nome dei file della directory specificata.
Noop
NOOP
Password
PASS
Passive
PASV
Data port
PORT
Print working
directory
PWD
Ritorna nome della directory corrente.
Logout
QUIT
Disconnette. Se un trasferimento è ancora in corso attende che termini prima di
chiudere la sessione.
Reinitialize
REIN
Effettua il log-off dell'utente loggato.
Va alla parent directory.
Non fa nulla (usato prevalentemente per prevenire disconnessioni per inattività
prolungata).
<password>
Specifica la password dell'utente.
Inizializza connessione dati passiva.
<host-port>
Inizializza connessione dati attiva.
File Transfer Protocol
24
Restart
REST
<marker>
Riprende il trasferimento dall'offset indicato.
Retrieve
RETR
<pathname>
Preleva file (da server a client).
Remove directory
RMD
<pathname>
Rimuove directory.
Rename from
RNFR
<pathname>
Rinomina (sorgente).
Rename to
RNTO
<pathname>
Rinomina (destinazione).
Site parameters
SITE
<command>
Manda comando specifico per il server (non standardizzato; varia tra
implementazioni).
Structure mount
SMNT
<pathname>
Monta struttura (raramente usato).
Status
STAT
<pathname>
Ritorna statistiche riguardo al server. Con argomento lista il contenuto di una
directory utilizzando il canale comandi.
Store
STOR
<pathname>
Spedisce un file (da client a server).
Store unique
STOU
<pathname>
Spedisce un file (da client a server) utilizzando un nome univoco.
File structure
STRU
<structure-code>
Imposta la struttura dati (F=file, R=record, P=page). Praticamente
inutilizzato. Il valore di default è F.
System
SYST
Representation
type
TYPE
<type>
Imposta la modalità di trasferimento (A=ASCII, E=EBCDIC, I=Binary,
L=Local). Il valore di default è A. EBCDIC e Local sono raramente usati
(esempio: unicamente su sistemi mainframe).
User Name
USER
<username>
Specifica nome utente.
Ritorna tipo di sistema operativo.
Codici di risposta
• 1xx: Risposta positiva preliminare. L'azione richiesta è iniziata ma ci sarà un'altra risposta ad indicare che essa è
effettivamente completata.
• 2xx: Risposta positiva definitiva. L'azione richiesta è completata. Il client può ora mandare altri comandi.
• 3xx: Risposta positiva intermedia. Il comando è stato accettato ma è necessario mandarne un secondo affinché la
richiesta sia completata definitivamente.
• 4xx: Risposta negativa temporanea. Il comando non è andato a buon fine ma potrebbe funzionare in un secondo
momento.
• 5xx: Risposta negativa definitiva. Il comando non è andato a buon fine e il client non dovrebbe più ripeterlo.
• x0x: Errore di sintassi.
• x1x: Risposta ad una richiesta informativa.
• x2x: Risposta relativa alla connessione.
• x3x: Risposta relativa all'account e/o ai permessi.
• x4x: Non meglio specificato.
• x5x: Risposta relativa al file-system.
File Transfer Protocol
Problemi relativi alla sicurezza
La specifica originale di FTP non prevede alcuna cifratura per i dati scambiati tra client e server. Questo comprende
nomi utenti, password, comandi, codici di risposta e file trasferiti i quali possono essere "sniffati" o visionati da
malintenzionati in determinate situazioni (esempio: ambienti intranet).
Il problema è comune a diversi altri protocolli utilizzati prima della diffusione di SSL quali HTTP, TELNET e
SMTP. Per ovviare al problema è stata definita una nuova specifica che aggiunge al protocollo FTP originale un
layer di cifratura SSL/TLS più una nuova serie di comandi e codici di risposta. Il protocollo prende il nome di FTPS
ed è definito nella RFC-4217 [3]. Da non confondersi con SFTP che è comunque una valida alternativa per ovviare al
problema descritto.
Applicazioni che svolgono il ruolo di trasferimento dati per il tramite di FTP
FileZilla, Fire Downloader, JDownloader sono alcuni dei tanti gestori di download che permettono di trasferire i dati
mediante connessione FTP.
Tuttavia nei sistemi operativi, in genere, si può effettuare l'accesso anche tramite riga di comando.
Collegamenti esterni
•
•
•
•
(EN) RFC 959 FTP (traduzione in italiano [4])
(EN) RFC 2228 FTP Security Extensions
(EN) RFC 2640 Internationalization of FTP
(EN) RFC 4217 Securing FTP with TLS
Note
[1]
[2]
[3]
[4]
http:/ / www. networksorcery. com/ enp/ protocol/ ftp. htm
http:/ / www. faqs. org/ rfcs/ rfc959. html
http:/ / www. faqs. org/ rfcs/ rfc4217. html
http:/ / www. rfc. altervista. org/ rfctradotte/ rfc959_tradotta. txt
25
Domain Name System
Domain Name System
Il sistema dei nomi a dominio, in inglese Domain Name System (spesso indicato con l'acronimo DNS), è un
sistema utilizzato per la risoluzione di nomi dei nodi della rete (in inglese host) in indirizzi IP e viceversa. Il servizio
è realizzato tramite un database distribuito, costituito dai server DNS.
Descrizione
Il nome DNS denota anche il protocollo che regola il funzionamento del servizio, i programmi che lo implementano,
i server su cui questi girano, l'insieme di questi server che cooperano per fornire il servizio.
I nomi DNS, o "nomi di dominio", sono una delle caratteristiche più visibili di Internet.
C'è confusione in merito alla definizione dell'acronimo: la S spesso viene interpretata come service, ma la
definizione corretta è system.
L'operazione di convertire un nome in un indirizzo è detta risoluzione DNS, convertire un indirizzo IP in nome è
detto risoluzione inversa.
Motivazioni ed utilizzi
• La possibilità di attribuire un nome testuale facile da memorizzare a un server (ad esempio un sito world wide
web) migliora di molto l'uso del servizio, in quanto noi esseri umani troviamo più facile ricordare nomi testuali
(mentre gli host e i router sono raggiungibili utilizzando gli indirizzi IP numerici). Per questo, il DNS è
fondamentale per l'ampia diffusione di internet anche tra utenti non tecnici, ed è una delle sue caratteristiche più
visibili.
• È possibile attribuire più nomi allo stesso indirizzo IP (o viceversa) per rappresentare diversi servizi o funzioni
forniti da uno stesso host (o più host che erogano lo stesso servizio). Questa flessibilità risulta utile in molti casi:
• Nel caso in cui si debba sostituire il server che ospita un servizio, o si debba modificare il suo indirizzo IP, è
sufficiente modificare il record DNS, senza dover intervenire sui client.
• Un utilizzo molto popolare di questa possibilità è il cosiddetto virtual hosting basato sui nomi, una tecnica per
cui un web server dotato di una singola interfaccia di rete e di singolo indirizzo IP può ospitare più siti web,
usando l'indirizzo alfanumerico trasmesso nell'header HTTP per identificare il sito per cui viene fatta la
richiesta.
• Utilizzando nomi diversi per riferirsi ai diversi servizi erogati da un host, è possibile spostare una parte dei
servizi su un altro host, e spostare i client su questo nuovo host modificando il suo record nel DNS.
• Facendo corrispondere più indirizzi IP a un nome, il carico dei client viene distribuito su diversi server,
ottenendo un aumento delle prestazioni complessive del servizio e una tolleranza ai guasti (ma è necessario
assicurarsi che i diversi server siano sempre allineati, ovvero offrano esattamente lo stesso servizio ai client).
• La risoluzione inversa è utile per identificare l'identità di un host, o per leggere il risultato di un traceroute.
• Il DNS viene usato da numerose tecnologie in modo poco visibile agli utenti, per organizzare le informazioni
necessarie al funzionamento del servizio.
26
Domain Name System
Storia
Il DNS fu ideato il 23 giugno 1983 da Paul Mockapetris, Jon Postel e Craig Partrige; le specifiche originali sono
descritte nello standard RFC 882. Nel 1987 vennero pubblicati commenti allo standard RFC del DNS, con i nomi
RFC 1034 e RFC 1035 rendendo obsolete le specifiche precedenti.
Nomi DNS
Un nome di dominio è costituito da una serie di stringhe separate da punti, ad esempio it.wikipedia.org. A differenza
degli indirizzi IP, dove la parte più importante del numero è la prima partendo da sinistra, in un nome DNS la parte
più importante è la prima partendo da destra. Questa è detta dominio di primo livello (o TLD, Top Level Domain),
per esempio .org o .it.
Un dominio di secondo livello consiste in due parti, per esempio wikipedia.org, e così via. Ogni ulteriore
elemento specifica un'ulteriore suddivisione. Quando un dominio di secondo livello viene registrato all'assegnatario,
questo è autorizzato a usare i nomi di dominio relativi ai successivi livelli come it.wikipedia.org (dominio
di terzo livello) e altri come some.other.stuff.wikipedia.org (dominio di quinto livello) e così via.
Record DNS
Tipi di record
Ad
un
nome
DNS
possono
corrispondere
diversi
tipi
di
informazioni. Per questo motivo,
esistono diversi tipi di record DNS.
Ogni voce del database DNS deve
essere caratterizzata da un tipo. I
principali tipi sono:
• Record A - Indica la corrispondenza
tra un nome ed uno (o più) indirizzi IP (per la precisione indirizzi IPv4, ovvero la versione attualmente in uso).
• Record MX - (Mail eXchange) indica a quali server debba essere inviata la posta elettronica per un certo dominio.
• Record CNAME - Sono usati per creare un alias, ovvero per fare in modo che lo stesso host sia noto con più
nomi. Uno degli utilizzi di questo tipo di record consiste nell'attribuire ad un host che offre più servizi un nome
per ciascun servizio. In questo modo, i servizi possono poi essere spostati su altri host senza dover riconfigurare i
client, ma modificando solo il DNS.
• Record PTR - Il DNS viene utilizzato anche per realizzare la risoluzione inversa, ovvero per far corrispondere ad
un indirizzo IP il corrispondente nome di dominio. Per questo si usano i record di tipo "PTR" (e una apposita zona
dello spazio dei nomi in-addr.arpa).
• Record AAAA - È come il Record A ma lavora con l'IPv6 e restituisce un indirizzo IPv6.
• Record SRV - Identificano il server per un determinato servizio all'interno di un dominio. Possono essere
considerati una generalizzazione dei record MX.
• Record TXT - Associano campi di testo arbitrari ad un dominio. Questi campi possono contenere una descrizione
informativa oppure essere utilizzati per realizzare servizi.
Vi sono anche tipi di record "di servizio", necessari al funzionamento del database distribuito:
• Record NS - Utilizzato per indicare quali siano i server DNS autorevoli per un certo dominio, ovvero per
delegarne la gestione.
• Record SOA - (Start of Authority) usato per la gestione delle zone DNS.
27
Domain Name System
Nel DNS possono essere immessi altri tipi di record, alcuni folcloristici, come "LOC", usato (poco) per riportare le
coordinate geografiche di un sito, altri aggiungono funzioni di sicurezza per evitare manomissioni. Per avere
riferimenti su tutti questi record vedi Tipi di record DNS.
Record multipli
Ad uno stesso nome di dominio, possono essere associati contemporaneamente record di tipo diverso, o più record
dello stesso tipo. Questo generalmente viene fatto per suddividere il carico di un server molto frequentato su più
computer che offrono lo stesso servizio.
Time to live
I record associati ad un nome di
dominio possono cambiare nel tempo,
permettendo ad esempio di assegnare
un nuovo indirizzo IP ad un server,
facendo in modo che questo continui a
rispondere al nome già noto agli utenti.
A ciascun record DNS è associato un
parametro detto "time to live" o TTL
(tempo di vita), che indica per quanto
tempo questo record può venire memorizzato in un sistema di cache DNS prima che venga considerato scaduto.
Quando un server risponde ad una richiesta con un record preso dalla propria cache, assegna alla risposta il time to
live residuo del record. Quindi se il record originariamente ha un TTL di 12 ore, e un server risponde ad una richiesta
con un dato che ha ottenuto due ore prima, nella risposta metterà un TTL di 10 ore.
Utilizzo dei nomi DNS
Un nome di dominio, come per esempio it.wikipedia.org, può essere parte di un URL, come
http://it.wikipedia.org/wiki/Treno, o di un indirizzo e-mail, come per esempio [email protected].
Questi sono gli strumenti più utilizzati per identificare una risorsa su Internet, il che spiega la pervasività dei nomi di
dominio.
Molti nomi di dominio utilizzati per server web hanno nella parte sinistra la stringa di caratteri "www", ma non è
sempre necessario averla. In molti casi, ma non sempre, il nome privato del prefisso "www." porta comunque alla
stessa pagina, come per esempio "ns.nl" e "www.ns.nl".
Realizzazione
I DNS implementano uno spazio gerarchico dei nomi, per permettere che parti di uno spazio dei nomi, conosciute
come "zone", possano essere delegate da un name server ad un altro name server che si trova più in basso nella
gerarchia.
I nomi di dominio sono soggetti a determinate restrizioni: per esempio ogni parte del nome (quella cioè limitata dai
punti nel nome) non può superare i 63 caratteri e il nome complessivo non può superare i 255 caratteri.
I nomi di dominio sono anche limitati ad un sottoinsieme di caratteri ASCII; in questo modo si impedisce di scrivere
nomi e parole con caratteri che non tutti hanno sulla propria tastiera. Per superare questa limitazione, il sistema di
IDNA e basato sul modello Punycode, rileva stringhe Unicode in un insieme di caratteri DNS validi, venne
approvato dall'ICANN e adottato da alcuni registri.
28
Domain Name System
Zone, deleghe e repliche
Una zona DNS è una parte dello
spazio dei nomi, costituita da un
dominio e i suoi sottodomini che non
sono a loro volta delegati, che è sotto
una stessa gestione amministrativa e
quindi è gestita da uno o più server.
La gestione di una zona è delegata
dalla zona superiore tramite dei record
di tipo NS. Ad esempio, nella zona
.org ci sarà una delega per la zona
wikipedia.org ai server DNS che la
gestiscono. Per ragioni di ridondanza,
ciascuna zona è replicata su più
server, e di conseguenza la delega è
costituita da più record NS, che
indicano che ciascuno dei server
indicati contiene le informazioni per
quella zona (ovvero è autoritativo per la zona). All'interno di una zona possono essere delegate delle zone di livello
inferiore, ad esempio in wikipedia.org potrebbero esistere deleghe per devel.wikipedia.org o per
accounting.admin.wikipedia.org.
I diversi server che sono delegati per una zona dovrebbero contenere le stesse informazioni, in modo che uno
qualsiasi di questi possa rispondere ad una query per un record della zona.
Lo schema di replica tipicamente prevede che ci sia un server master (primario), che è quello sul quale vengono
aggiornate le informazioni, e uno o più server slave (secondari), che copiano le informazioni dal master quando
necessario. Per tener traccia delle diverse "versioni" di una zona che possono esserci in circolazione, ed in particolare
per permettere ad un secondario di decidere se deve trasferire la zona dal primario, ogni zona ha un numero di serie,
che deve essere aumentato ogni volta che vengono fatte modifiche sul primario. Per ottenere il numero di serie di
una zona presente su un server, si effettua una interrogazione di tipo SOA. Il secondario confronta il proprio numero
di serie con quello del primario, e se quello del primario è superiore trasferisce la zona.
L'operazione di copia di tutti i record di una zona dal master ad uno slave è detta zone transfer, e può essere
completo (tutto il contenuto della zona viene copiato) o incrementale (vengono copiati solo i record modificati
rispetto alla versione già presente).
Alcune implementazioni di DNS permettono di modificare le zone da qualsiasi server autorevole, propagando le
modifiche sugli altri server.
La radice (root) dell'albero dei nomi DNS è la zona . (punto), che è gestita da un insieme di server chiamati appunto
root servers.
29
Domain Name System
Ricorsione
In generale, per ottenere la risoluzione di un nome è necessario partire dalla radice, interrogare uno dei root server
nel dominio di primo livello, ottenere il server che lo gestisce, interrogarlo nel dominio di secondo livello, fino a
raggiungere il server autorevole per il nome desiderato. Questa tecnica è detta "ricorsione".
Caching
Alcuni server si prestano ad effettuare query ricorsive per conto di alcuni client. Una volta che hanno ottenuto una
risposta, memorizzano in una cache tutte le informazioni che hanno imparato, fino alla loro scadenza. Alcune
implementazioni del servizio DNS permettono di realizzare i cosiddetti servers caching only, ovvero privi di
database proprio, ma utili per reindirizzare ad un server autorevole le query di risoluzione. Tale caratteristica è utile
soprattutto quando la risoluzione deve essere effettuata attraverso collegamenti lenti (con velocità inferiore a 500
kbps) o firewall.
Funzioni dei server
Un server DNS può essere configurato per assolvere ad una o più delle seguenti funzioni:
• server autorevole per una o più zone, ovvero il server su cui sono configurati i dati di una zona, e che è delegato
a gestirla tramite record NS inseriti nella zona superiore. Normalmente sono presenti più server autorevoli per una
zona. Molte implementazioni permettono di modificare i dati di una zona solo su un server:
• primario - server autorevole su cui vengono modificati i dati di una zona
• secondario - server autorevole che copia i dati di zona da un primario
• server ricorsivo - il server che viene configurato in una popolazione di client, che si occupa di risolvere le query
che riceve interrogando i server originali, e mantenendo una cache delle risposte ricevute
• query forwarder - un server che viene configurato in una popolazione di client, che risolve le loro query non
direttamente ma interrogando un server ricorsivo
Origine dei dati
I dati contenuti in una zona possono essere configurati da uno o più operatori, oppure possono essere alimentati da
meccanismi automatici:
• nelle implementazioni più semplici, i dati di zona sono memorizzati in uno o più file sul server primario
• implementazioni più raffinate immagazzinano i dati in un database. In alcuni casi, questo è accessibile non solo
agli operatori del servizio ma anche direttamente ai clienti (è il caso dei servizi DNS commerciali)
DNS dinamico
Il termine DNS dinamico, o DDNS, indica un insieme di tecnologie che permettono di inserire automaticamente in
una zona DNS gli indirizzi di calcolatori che ottengono un indirizzo non predefinito, tipicamente attraverso il
protocollo DHCP o PPP. A questo scopo, sono definite query DNS di "UPDATE".
In una rete locale, questa funzionalità può essere utilizzata direttamente dai client, è presente nei servizi Active
Directory di windows, o può essere configurata usando BIND e il server DHCP di Internet Systems Consortium
(ISC).
Il DDNS viene inoltre utilizzato da servizi commerciali per permettere agli utenti dial-up (modem, ADSL) di
registrare un nome corrispondente all'indirizzo che viene loro assegnato di volta in volta dal loro provider. In questo
modo, un host con indirizzo IP dinamico è sempre raggiungibile. Esistono client DDNS sia sotto forma di
applicazioni che all'interno di router destinati al mercato domestico.
30
Domain Name System
Utilizzo
Per utilizzare il servizio, è necessario configurare su ciascun client uno o più server DNS di riferimento. Questi sono
predisposti a effettuare query ricorsive e che effettuano servizi di caching.
Quando un sistema ha la necessità di comunicare con un altro sistema, chiede al server DNS di riferimento di
effettuare il processo detto di "risoluzione" del nome in un indirizzo IP. Il server effettua una ricerca all'interno del
suo database per ottenere l'indirizzo IP corrispondente al sistema ricercato.
Se il server interrogato possiede l'informazione richiesta, il processo di ricerca termina con l'invio dell'indirizzo IP al
richiedente. Se la ricerca ha esito negativo il server effettua una richiesta "ricorsiva".
Implementazione
Il protocollo DNS è implementato da diversi software. Di seguito alcuni dei più diffusi:
•
•
•
•
•
BIND (Berkeley Internet Name Domain), il nome del più comune demone DNS usato sui sistemi Unix.
DJBDNS (Dan J Bernstein's DNS implementation)
Unbound, un server DNS progettato modularmente e con un riguardo particolare verso DNSSEC.
MaraDNS
NSD (Name Server Daemon)
• PowerDNS
• DDNS (Dynamic Domain Name System) Il servizio DNS alla base dei servizi di directory Microsoft incluso nelle
versioni server da Windows 2000 in poi.
Il DNS utilizza il protocollo di trasporto UDP e la porta 53 per soddisfare le richieste di risoluzione provenienti dagli
host.
I server DNS effettuano gli zone transfer usando il protocollo di trasporto TCP e la porta 53. Questa porta viene
usata anche quando una query ha una risposta molto lunga.
Il lato client del servizio DNS è normalmente implementato tramite librerie di sistema, che spesso lo integrano con
altri servizi di risoluzione, come ad esempio WINS, NIS, o con la consultazione di file locali, in modo che un utente
possa utilizzare un nome simbolico in un'applicazione ed ottenere la sua risoluzione in un indirizzo IP senza
preoccuparsi di quale strumento è stato utilizzato per ottenere la risoluzione.
Il sistema DNS in Internet
Qualsiasi rete IP può usare il DNS per implementare un suo sistema di nomi privato. Tuttavia, il termine "nome di
dominio" è più comunemente utilizzato quando esso si riferisce al sistema pubblico dei DNS su Internet. Questo è
basato su 13 "root server" universali, i cui indirizzi IP sono distribuiti indipendentemente dal DNS tramite un file
detto "root hints" (letteralmente: indizi per la radice). Da questi server principali, il DNS viene poi delegato ad altri
server DNS che si occupano dei nomi all'interno di parti specifiche dello spazio dei nomi DNS.
Dieci dei tredici root server sono, almeno nominalmente, situati negli USA. Tuttavia, dato l'accesso a molti di essi è
realizzato tramite indirizzamento anycast, che permette di assegnare a più computer lo stesso indirizzo IP per fornire
un servizio uniforme su vaste aree geografiche, la maggior parte dei server sono in effetti localizzati al di fuori degli
Stati Uniti.
Il proprietario di un nome di dominio è rintracciabile in un database chiamato Whois: per molti domini di primo
livello un Whois base è gestito dalla IANA, con il Whois dettagliato mantenuto dall'autorità di registrazione che
controlla quel dominio. Per i più di 240 domini nazionali l'autorità di registrazione gestisce in esclusiva il Whois per
il dominio di competenza.
31
Domain Name System
Politica
Allocazione delle zone di primo livello
L'attuale modalità di controllo del sistema DNS offre spesso alcune criticità. Alcuni root servers appartengono a
società private (esempio Verisign) anche se la maggior parte sono controllati da università o altri enti (ad esempio la
NASA)[1]. Non è possibile aggiungere altri root servers, o almeno, non in maniera fisica: a causa di un problema di
compatibilità con il protocollo UDP devono essere visibili solo 13 zone di root servers, ma ogni zona può avere più
server[2].
Utilizzi impropri
Nel 2009, Paul Vixie, presidente dell'Internet Systems Consortium, ha pubblicato sul sito della Association for
Computing Machinery un articolo riguardante pratiche che derivano da interpretazioni sbagliate del concetto di DNS
o lo violano deliberatamente.[3]
Manipolazione delle risposte
Quando un client inoltra una query DNS ad un server ricorsivo, si aspetta di ottenere la risposta "corretta", ovvero il
valore del record DNS richiesto oppure un messaggio di errore se il nome richiesto non esiste. Questo messaggio è
noto come "NXDOMAIN" o anche come "RCODE=3".
Tuttavia, alcuni gestori di server ricorsivi manipolano le risposte fornite ai propri clienti, eliminandone alcune
selettivamente, oppure restituendo un indirizzo IP diverso da quello corretto.
Questa tecnica può essere usata con diversi scopi:
• protezione da abusi: il server DNS può filtrare le query relative a siti pericolosi per gli utenti, ad esempio a causa
della distribuzione di malware, o perché usati per operazioni di phishing;
• censura: vengono filtrate le query relative a siti che si vogliono rendere inaccessibili per decisione politica (del
gestore della rete o di una autorità pubblica). In caso la visita o il tentativo di visita a siti "proibiti" venga
qualificata come indizio di reato, la redirezione del traffico su un server diverso da quello richiesto dall'utente può
permettere la raccolta degli indirizzi IP dei client, o anche in alcuni casi il furto di credenziali;
• man-in-the-middle: le query vengono modificate in modo da reindirizzare tutto o parte del traffico verso un
server che agisce da proxy trasparente, intercettando il traffico degli utenti. Questo permette il monitoraggio del
traffico degli utenti, e quindi anche il furto di informazioni sensibili e/o credenziali;
• redirezione degli errori: alle query per nomi inesistenti viene risposto con l'indirizzo IP di un server, che
tipicamente ospita un motore di ricerca e tenta di aiutare gli utenti a trovare il sito cercato.[3]
Queste tecniche possono essere adottate anche dai gestori di rete, redirigendo le query DNS dirette verso l'esterno su
propri server mediante meccanismi di destination NAT (Network address translation).
Il DNS non è stato progettato per questi utilizzi, pertanto le implicazioni sulla sicurezza degli utenti possono essere
negative, in quanto le informazioni personali condivise tra un utente ed il sito che sta visitando vengono scambiate
anche con siti di terzi, non autorizzati.[3]
32
Domain Name System
Note
[1] Sito ufficiale dei root servers - http:/ / www. root-servers. org/
[2] There are not 13 root servers (http:/ / blog. icann. org/ 2007/ 11/ there-are-not-13-root-servers/ )
[3] Paul Vixie. What DNS is Not. DNS is many things to many people - perhaps too many things to too many people (http:/ / dl. acm. org/ citation.
cfm?id=1647302). novembre 2009
Articolo disponibile anche sul sito (http:/ / queue. acm. org/ detail. cfm?id=1647302) della ACM.
Voci correlate
•
•
•
•
•
•
•
•
Risoluzione DNS inversa
Record DNS
Dynamic DNS
DNSSEC
ICANN
Nslookup
Cybersquatting
Nome di dominio internazionalizzato
Collegamenti esterni
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
DNS Security Extensions (DNSSEC) (http://www.dnssec.net/)
root-servers.org (http://www.root-servers.org/)
(EN) RFC 882, Domain Names - Concepts and Facilities (resa obsoleta da RFC 1034)
(EN) RFC 883, Domain Names - Implementation and Specification (resa obsoleta da RFC 1035)
(EN) RFC 920, Domain Requirements - Specified original top-level domains
(EN) RFC 1032, Domain Administrators Guide
(EN) RFC 1033, Domain Administrators Operations Guide
(EN) RFC 1034, Domain Names - Concepts and Facilities
(EN) RFC 1035, Domain Names - Implementation and Specification
(EN) RFC 1101, DNS Encodings of Network Names and Other Types
(EN) RFC 1123, Requirements for Internet Hosts—Application and Support
(EN) RFC 1178, Choosing a Name for Your Computer (FYI 5)
(EN) RFC 1183, New DNS RR Definitions
(EN) RFC 1591, Domain Name System Structure and Delegation (Informational)
(EN) RFC 1912, Common DNS Operational and Configuration Errors
(EN) RFC 1995, Incremental Zone Transfer in DNS
(EN) RFC 1996, A Mechanism for Prompt Notification of Zone Changes (DNS NOTIFY)
(EN) RFC 2100, The Naming of Hosts (Informational)
(EN) RFC 2136, Dynamic Updates in the domain name system (DNS UPDATE)
(EN) RFC 2181, Clarifications to the DNS Specification
(EN) RFC 2182, Selection and Operation of Secondary DNS Servers
(EN) RFC 2308, Negative Caching of DNS Queries (DNS NCACHE)
(EN) RFC 2317, Classless IN-ADDR.ARPA delegation (BCP 20)
(EN) RFC 2671, Extension Mechanisms for DNS (EDNS0)
(EN) RFC 2672, Non-Terminal DNS Name Redirection
(EN) RFC 2845, Secret Key Transaction Authentication for DNS (TSIG)
• (EN) RFC 3225, Indicating Resolver Support of DNSSEC
• (EN) RFC 3226, DNSSEC and IPv6 A6 aware server/resolver message size requirements
• (EN) RFC 3597, Handling of Unknown DNS Resource Record (RR) Types
33
Domain Name System
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
(EN) RFC 3696, Application Techniques for Checking and Transformation of Names (Informational)
(EN) RFC 4033, DNS Security Introduction and Requirements
(EN) RFC 4034, Resource Records for the DNS Security Extensions
(EN) RFC 4035, Protocol Modifications for the DNS Security Extensions
(EN) RFC 4343, Domain Name System (DNS) Case Insensitivity Clarification
(EN) RFC 4470, Minimally Covering NSEC Records and DNSSEC On-line Signing
(EN) RFC 4509, Use of SHA-256 in DNSSEC Delegation Signer (DS) Resource Records
(EN) RFC 4592, The Role of Wildcards in the Domain Name System
(EN) RFC 4635, HMAC SHA TSIG Algorithm Identifiers
(EN) RFC 4892, Requirements for a Mechanism Identifying a Name Server Instance (Informational)
(EN) RFC 5001, DNS Name Server Identifier (NSID) Option
(EN) RFC 5011, Automated Updates of DNS Security (DNSSEC) Trust Anchors
(EN) RFC 5155, DNS Security (DNSSEC) Hashed Authenticated Denial of Existence
(EN) RFC 5395, Domain Name System (DNS) IANA Considerations (BCP 42)
(EN) RFC 5452, Measures for Making DNS More Resilient against Forged Answers'
(EN) RFC 5625, DNS Proxy Implementation Guidelines (BCP 152)
(EN) RFC 5702, Use of SHA-2 Algorithms with RSA in DNSKEY and RRSIG Resource Records for DNSSEC
• Accesso alle funzioni DNS in .NET (http://www.giuseppesicari.it/articoli/framework-dot-net/
domain-name-system)
Telnet
In informatica e telecomunicazioni Telnet è un protocollo di rete utilizzato su Internet. I documenti IETF STD 8
(RFC 854 [1] e RFC 855 [2]) dicono:
L'obiettivo del protocollo TELNET è fornire un supporto per le comunicazioni sufficientemente generalizzato,
bidirezionale ed orientato ai byte (otto bit).
È solitamente utilizzato per fornire all'utente sessioni di login remoto di tipo riga di comando tra host su internet.
Per estensione, telnet è anche il nome di un programma che un utente può usare per avviare una sessione Telnet
ad un host remoto; il programma telnet implementa la parte client del protocollo. I client Telnet sono stati
disponibili sulla maggior parte dei sistemi Unix per parecchi anni e sono disponibili per qualsiasi tipo di computer.
In inglese to telnet è usato come verbo e significa stabilire una connessione Telnet.
Caratteristiche
Telnet è un protocollo client-server basato su TCP; i client solitamente si connettono alla porta 23 sul server
(nonostante la porta possa essere differente, come per parecchi protocolli internet). In parte a causa della
progettazione del protocollo e in parte per la flessibilità tipicamente fornita dai programmi Telnet, è possibile
utilizzare un programma Telnet per stabilire una connessione interattiva ad un qualche altro servizio su un server
internet. Un utilizzo classico è collegarsi col Telnet alla porta 25 (sulla quale tipicamente si trova un server SMTP)
per effettuare il debugging di un server di posta.
Il protocollo Telnet può essere diviso in una parte principale ed in un set di estensioni. La parte principale è descritta
dalle RFC 854 e RFC 855 dell'IETF, che sono anche unite nell'STD 8, e definiscono le caratteristiche base del
protocollo ed il modo di implementare le estensioni. Tra le tante estensioni, alcune sono state adottate come Standard
Internet. I documenti STD dal 27 al 32 definiscono varie estensioni di Telnet, la maggior parte delle quali sono molto
diffuse. Tra le estensioni rimanenti, le più importanti sono quelle proposte dall'IETF come standard; ulteriori dettagli
possono esser trovati nella STD 1.
34
Telnet
Come spiegato più avanti, Telnet non è sicuro e dovrebbe esser generalmente evitato. Il suo uso sulle reti pubbliche
comporta seri rischi di sicurezza.
Usi
I client Telnet sono ancora usati occasionalmente per "parlare" ad altri servizi. Telnet è usato ogni tanto nel debug di
servizi di networking come i server SMTP e HTTP, in quanto rappresenta un modo semplice per mandare comandi
al server ed esaminare le risposte. Telnet può anche essere usato come un rudimentale client IRC se si possiede una
conoscenza adeguata.
Telnet è molto usato per i giochi Multi User Dungeon giocati in rete.
Nel campo della posta elettronica Telnet ha molti validi usi, per esempio è possibile leggere la corrispondenza sulla
propria mailbox, cancellarla oppure spedire missive elettroniche [3]. Visto che normalmente l'accesso alla propria
casella di posta elettronica viene fatto in modo non sicuro oppure a volte da un computer pubblico, i problemi di
sicurezza di Telnet non sono di ostacolo.
A volte con le webmail si hanno problemi di accesso alla propria mailbox che con Telnet si possono risolvere, per
esempio nel caso di superamento della memoria concessa alcune caselle si bloccano e Telnet permette di risolvere il
problema.
Altro particolare interessante di Telnet e la posta elettronica è la possibilità di invio di email anonime oppure email
false (fake email). Se non vengono utilizzati proxy la magistratura tramite la polizia postale è in grado di individuare
il mittente tramite il suo indirizzo IP.
Telnet può essere utilizzato da un comune browser web, in presenza di una connessione (generalmente HTTP) già
attiva ad un Internet Service Provider: Telnet è un protocollo di livello più alto di quelli del livello di trasporto dei
dati, e richiede che una sessione sia già iniziata.
Sicurezza
Ci sono tre problemi principali legati a Telnet, che lo rendono una cattiva scelta per sistemi moderni dal punto di
vista della sicurezza informatica:
• Nei daemon Telnet comunemente usati sono state trovate nel corso degli anni molte vulnerabilità, e
probabilmente altre esistono tuttora.
• Telnet manca di uno schema di autenticazione che renda sicura le comunicazione tra due host e non intercettabile.
• Telnet non cripta i dati inviati tramite la connessione (nemmeno le password) ed è quindi banale catturare i dati
scambiati ed usare la password per scopi malevoli.
In ambienti dove la sicurezza è importante, come la rete pubblica Internet, Telnet non dovrebbe esser usato in quanto
le sessioni telnet non sono criptate. Ciò significa che chiunque abbia accesso ad un router, uno switch o un gateway
posizionato sulla rete tra i due host che stanno comunicando tramite Telnet, può intercettare i pacchetti che lo
attraversano e facilmente ottenere qualsiasi cosa venga scambiata (compresi nomi utente e password) con programmi
di sniffing come tcpdump e Wireshark (precedentemente chiamato Ethereal).
Queste falle han fatto sì che l'uso del protocollo Telnet cadesse rapidamente a favore del più sicuro protocollo SSH,
rilasciato nel 1998. SSH offre tutte le funzioni di Telnet più una sicura criptazione, che previene l'intercettazione dei
dati scambiati, ed un'autenticazione a chiave pubblica, che assicura l'identità del server remoto.
Gli esperti di sicurezza informatica, come l'Istituto SANS ed i membri del newsgroup di comp.os.linux.security,
consigliano di interrompere l'uso di Telnet per login remoti in circostanze normali.
Quando Telnet è stato sviluppato all'inizio degli anni ottanta, secondo alcune fonti [4] addirittura nel 1969, la maggior
parte degli utenti delle reti appartenevano a dipartimenti di istituti accademici o a centri di ricerca privati o
governativi. In quest'ambiente, la sicurezza non era così importante quanto lo è oggi, con l'espansione della banda
35
Telnet
36
larga e la rete globale. Con la crescita esponenziale del numero di persone che accedono ad Internet, e quindi del
numero di coloro che vogliono entrare in sistemi altrui con intenzioni malevoli, Telnet non dovrebbe essere usato in
reti Internet.
Note
[1]
[2]
[3]
[4]
http:/ / www. ietf. org/ rfc/ rfc854. txt
http:/ / www. ietf. org/ rfc/ rfc855. txt
Spedire o ricevere posta con Telnet (http:/ / www. kensan. it/ articoli/ Telnet. php)
http:/ / philip. greenspun. com/ ancient-history/ history-of-computer-science
rsync
rsync
Sviluppatore
Wayne Davison
Ultima versione 3.0.9 (23 settembre 2011)
S.O.
Multipiattaforma
Genere
Strumenti di sistema
Licenza
GPL
(Licenza libera)
Sito web
http:/ / rsync. samba. org
[1]
rsync è un software per Unix che sincronizza file e cartelle da una posizione all'altra minimizzando il trasferimento
di dati utilizzando quando possibile la codifica delta.
Un'importante caratteristica di rsync che non trova riscontri in programmi/protocolli simili è che il mirroring avviene
attraverso una sola trasmissione di dati per ogni direzione di comunicazione.
rsync può copiare o visualizzare il contenuto delle directory e copiare i file, utilizzando opzionalmente la
compressione dei dati e la ricorsione. Per default, rsync effettua la copia attraverso una connessione TCP sulla porta
873.
Algoritmo
L'algoritmo usato da rsync per la trasmissione efficiente di dati (tipicamente, i contenuti di un file) a un altro
computer che dispone di una versione precedente degli stessi dati è stato inventato dal programmatore Australiano
Andrew Tridgell, ed è descritto brevemente nel seguito.
Il ricevente spezza la sua copia del file in blocchi contigui di dimensione fissata
, e per ciascuno dei blocchi
calcola due checksum: la funzione hash MD4 e un checksum ciclico (meno preciso della MD4). Entrambi i valori
vengono inviati al mittente.
Il mittente calcola invece il checksum per tutti i possibili blocchi di lunghezza
della sua versione del file, anche
sovrapposti. Il calcolo può essere svolto efficientemente grazie a una proprietà del checksum ciclico: sia
checksum ciclico del blocco che va dal byte
valore dei byte alle posizioni
e
al byte
, allora
dipende solo da
, senza che sia necessario riesaminare i byte da
il
e dal
a
. Per grandi, il risparmio è notevole.
A questo punto il mittente compara i suoi checksum ciclici con quelli inviati dal ricevente, per verificare se ci sono
delle corrispondenze. Se ci sono, viene calcolato e controllato anche il corrispondente hash MD4 (più costoso) per
rsync
verificare se i blocchi sono effettivamente identici. A questo punto, il mittente invia al ricevente solo le parti del file
per cui non sono stati trovati blocchi corrispondenti, insieme a istruzioni su come ricomporre i blocchi già presenti e
le parti nuove in modo da ottenere una copia esatta del file originale. Se le due versioni del file hanno molte sezioni
in comune, com'è spesso il caso quando si tratta di versioni diverse dello stesso file, rsync può effettuare la
sincronizzazione trasmettendo molti meno dati rispetto alla dimensione dell'intero file.
Altre caratteristiche
L'algoritmo descritto sopra costituisce la base del funzionamento di rsync, ma l'applicazione fornisce varie altre
funzioni utili per ottimizzare il trasferimento e semplificare la creazione di copie di backup. Fra le altre, possiamo
citare l'uso di algoritmi di compressione per ridurre ulteriormente la dimensione dei dati trasferiti, e il supporto al
protocollo ssh per realizzare trasferimenti crittografati e quindi sicuri. In combinazione con utility UNIX standard
quali cron, rsync può essere usato per implementare facilmente backup centralizzati dei dati degli utenti su un server
centrale, oppure un sistema di mirroring di grandi quantità di dati.
Varianti
rdiff e rdiff-backup
Esiste un programma di utilità chiamato rdiff che usa l'algoritmo di rsync per generare un file delta contenente la
differenza fra due file A e B, nel formato usato da rsync. Il file delta può poi essere applicato in un secondo tempo al
file A, trasformandolo nel file B. L'operazione svolta è analoga a quella dei comandi UNIX diff e patch, ma
utilizzando un formato più efficiente per memorizzare le differenze.
A differenza di diff, la creazione del file delta richiede due fasi: dapprima viene generato un piccolo file firma da A,
quindi il file firma e B vengono usati per generare il file delta. Inoltre, rdiff funziona egregiamente con file binari,
per cui invece non è possibile usare diff.
Appoggiandosi a rdiff, un altro programma di utilità chiamato rdiff-backup mantiene un backup di un file o
directory su un server remoto, memorizzando i file delta per ogni versione dei dati archiviati. Usando i delta
memorizzati, si può poi ricostruire lo stato esatto dei dati in un qualunque momento fissato.
rsyncX e rsyncXCD
Una versione speciale di rsync per il file system del Mac OS X, rsyncX, trasferisce anche le cosiddette resource fork
(dati addizionali contenuti nei file del Mac), che non sono supportate da rsync (né da altri programmi UNIX). Con
Mac OS 10.4, la Apple ha inserito delle modifiche nella propria versione di rsync per fornire funzionalità analoghe.
rsyncXCD è una versione di rsyncX che consente di creare partizioni di boot.
Interfaccia grafica
rsync non possiede una propria interfaccia grafica, ma solo quella testuale. Esiste tuttavia il programma Grsync,
rilasciato sotto licenza GPL, che implementa una interfaccia grafica per rsync. Degno di nota è inoltre il progetto
FlyBack che si prefigge il compito di portare il programma di backup Time Machine di Apple MacOS X 10.5
Leopard in ambiente GNU/Linux proprio utilizzando rsync come applicazione di copia dati e gli hard link in un
singolo file system.
37
rsync
38
Windows
Come per altre utilità UNIX, per eseguire rsync su Microsoft Windows è necessario avere installato il pacchetto
Cygwin, che fornisce ai programmi una emulazione di ambiente UNIX su Windows. Sono disponibili alcuni
pacchetti che includono rsync, cygwin e un programma di installazione, rendendo rsync accessibile agli utenti
Windows. Fra gli altri:
•
•
•
•
cwRsync [2] (Licenza MIT)
NasBackup [3] (GNU General Public License), che fornisce anche un'interfaccia grafica
DeltaCopy [4] (GNU General Public License), che include un'interfaccia grafica e dei servizi di programmazione.
Unison file Synchronzer [5] (GNU General Public License), che fornisce anche un'interfaccia grafica
Tuttavia, va notato che si possono verificare dei piccoli problemi usando rsync fra macchine con diversi sistemi
operativi, in particolare per quanto riguarda le date di modifica dei file, l'accuratezza con cui vengono trasmesse
alcune informazioni ausiliarie sui file (proprietario, diritti, ecc.) e le possibili ambiguità fra nomi di file in maiuscolo
e minuscolo su Windows.
Collegamenti esterni
• (EN) La home page di rsync [6]
•
•
•
•
•
•
•
•
(EN) Tutorial: Using rsync [7]
Usare rsync+SSH per il backup [8]
Usare rsync per il backup [9]
(EN) L'algoritmo di rsync [10]
(EN) La versione di rsync per [[Mac OS X [11]]]
(EN) Unison, un altro tool di sincronizzazione bidirezionale [5]
(EN) Grsync, interfaccia grafica per rsync basata su GTK [12]
(EN) flyback, programma grafico che usa hard link ed rsync per il backup di propri file [13]
Note
[1] http:/ / rsync. samba. org/
[2] http:/ / itefix. no/ cwrsync
[3] http:/ / sourceforge. net/ projects/ nasbackup/
[4] http:/ / www. aboutmyip. com/ AboutMyXApp/ DeltaCopy. jsp
[5] http:/ / www. cis. upenn. edu/ ~bcpierce/ unison/
[6] http:/ / rsync. samba. org
[7] http:/ / everythinglinux. org/ rsync/
[8] http:/ / www. unixware. it/ wiki/ ssh-rsync
[9] http:/ / openskills. info/ infobox. php?ID=193
[10] http:/ / rsync. samba. org/ tech_report/ node2. html
[11] http:/ / archive. macosxlabs. org/ rsyncx/ rsyncx. html
[12] http:/ / www. opbyte. it/ grsync/
[13] http:/ / code. google. com/ p/ flyback/
Real-time Transport Protocol
39
Real-time Transport Protocol
In telecomunicazioni l' RTP o Real-time Transport Protocol è un protocollo del livello applicazioni utilizzato per
servizi di comunicazione in tempo reale su Internet.
Descrizione
È stato sviluppato da un gruppo di ricerca noto come Audio-Video Transport Working Group, facente capo alla
IETF (Internet Engineering Task Force). Il corrispondente RFC è stato pubblicato nel 1996.
RTP doveva inizialmente essere un protocollo multicast, ma viene più spesso impiegato in applicazioni unicast. È
basato sul protocollo UDP e viene usato in congiunzione con RTCP (RTP Control Protocol) che monitora la qualità
del servizio e trasporta le informazioni riguardo ai partecipanti ad una sessione. RTCP è sufficiente per sessioni
“loosely controlled”, in cui cioè non c’è un reale controllo dei partecipanti e set-up della sessione, e non è necessario
che tutti i requisiti di controllo siano soddisfatti. Per questo RTP può essere coadiuvato da un protocollo apposito per
la gestione delle sessioni (come SIP o H.323). Rappresenta una delle tecnologie fondamentali nell'industria della
telefonia su IP.
Questo protocollo permette distribuzione di servizi che necessitano di trasferimento in tempo reale, come
l'interattività audio e video. Fra questi servizi si trovano anche:
•
•
•
•
l'identificazione del payload type
la numerazione sequenziale
la marcazione temporale (timestamp)
la monitorazione.
Solitamente le applicazioni pongono l'RTP sopra l'UDP per le operazioni di multiplexing e checksum, anche se può
essere usato con altri protocolli di rete e trasporto sottostanti.
I numeri di sequenza (sequence numbers) che troviamo nel protocollo RTP permettono all'utente che riceve i dati di
ricostruire la sequenza dei pacchetti del mittente. Le conferenze multicast multimediali non sono però la sua unica
capacità, anche se è stato implementato inizialmente per tale scopo. Ad esempio, trovano posto in questo protocollo
la memorizzazione di un flusso dati continuo, le simulazioni interattive distribuite, le misurazioni e i controlli.
Header
bit offset 0-1 2 3 4-7 8 9-15
0
Ver. P X CC M
PT
16-31
Sequence Number
32
Timestamp
64
SSRC identifier
96
CSRC identifiers (optional)
...
I pacchetti RTP sono formati da un header di minimo 12 byte seguiti da un payload che dipende dalla specifica
applicazione. L’header RTP è formato da:
•
•
•
•
•
Ver. (Version): (2bit) indica la versione del protocollo. La versione corrente è la numero 2.
P (Padding): (1 bit) indica se è presente un byte di padding alla fine del pacchetto.
X (Extension): (1 bit) indica la presenza di un Extension header tra l’header standard e il payload.
CC (CSRC Count): (4 bit) contiene il numero di CSRC identifiers (definiti sotto) che seguono l’header minimo.
M (Marker): (1 bit) Usato dal livello applicativo e quindi definito dal profilo specifico. Se è settato, significa che
il pacchetto ha una qualche speciale rilevanza per il livello applicativo.
Real-time Transport Protocol
• PT (Payload Type): (7 bit) indica il formato del payload e determina la sua interpretazione dall’applicazione.
Questo è specifico per ogni profilo RTP.
• Sequence Number: (16 bit) il sequence number viene incrementato di uno per ogni pacchetto RTP inviato e
permette al ricevente di identificare perdite di pacchetti e ripristinare l’ordine corretto. Il protocollo RTP non
prende provvedimenti quanto un pacchetto viene perduto, ma lascia campo libero all’applicazione. In accordo con
l’RFC 3550, il valore iniziale deve essere casuale per rendere attacchi di tipo known-plaintext più difficili.
• Timestamp: (32 bit) utilizzato per permettere al ricevente di riprodurre il media ricevuto all’intervallo
appropriato. La granularità dipende dall’applicazione ed è definita dallo specifico profilo RTP.
• SSRC: (32 bit) il synchronization source identifier identifica in modo univoco la fonte dello stream all’interno
della sessione RTP.
• CSRC: (da 0 a 15, 32 bit ciascuno) gli identificatori contributing source enumerano le fonti di uno stream
generato da più fonti. Il numero di identificatori CSRC è dato dal valore del campo CC.
Collegamenti esterni
• RFC 3550 Real-time Transport Protocol
• RFC 1889
Livello di trasporto
In telecomunicazioni e informatica nell'ambito delle reti di calcolatori, il livello di trasporto è il quarto dei livelli nel
modello OSI. Il suo compito è di fornire servizi al soprastante livello 5 (livello sessione) e per raggiungere tale scopo
sfrutta i servizi offerti dal sottostante livello 3 (livello rete). Lo scopo del livello di trasporto è fornire un canale
logico-affidabile di comunicazione end-to-end per pacchetti.
Funzionalità
Di seguito vengono riportati i servizi che vengono, in genere, offerti dal livello di trasporto; è bene ricordare che
nessuno di tali servizi è obbligatorio. Di conseguenza, per ciascuna applicazione è possibile scegliere il protocollo
più adatto allo scopo.
• Servizio orientato alla connessione. In genere il livello rete non stabilisce una connessione persistente verso l'host
di destinazione. Il livello di trasporto si incarica, quindi, di realizzare una connessione persistente che viene poi
chiusa quando non è più necessaria.
• Corretto ordine di consegna. Poiché i pacchetti possono seguire percorsi diversi all'interno della rete, non c'è
alcuna garanzia che i dati vengano recapitati nello stesso ordine in cui sono stati inviati. Il livello di trasporto
verifica che i pacchetti vengano riordinati nella giusta sequenza in ricezione prima di passarli al livello superiore.
• Trasferimento affidabile. Il protocollo si occupa di garantire che tutti i dati inviati vengano ricevuti; nel caso il
servizio di rete utilizzato perda pacchetti, il protocollo di trasporto si occupa di ritrasmetterli.
• Controllo di flusso. Se gli host coinvolti nella comunicazione hanno prestazioni molto differenti può capitare che
un pc più veloce "inondi" di dati uno più lento portando alla perdita di pacchetti. Mediante il controllo di flusso,
un host in "difficoltà" può chiedere di abbassare il tasso di trasmissione in modo da poter gestire le informazioni
in ingresso.
• Controllo di Congestione: il protocollo riconosce uno stato di congestione della rete e adatta di conseguenza la
velocità di trasmissione.
• Orientamento al Byte. Invece che gestire i dati in base ai pacchetti, viene fornita la possibilità di vedere la
comunicazione come uno stream di byte, in modo da semplificarne l'utilizzo.
40
Livello di trasporto
• Multiplazione. Il protocollo permette di stabilire diverse connessioni contemporanee tra gli stessi due host,
tipicamente utilizzando l'astrazione delle porte. Nell'uso comune diversi servizi utilizzano porte logiche di
comunicazione diverse.
Il nome trasporto per tale livello può quindi trarre in inganno in quanto non implementa alcun meccanismo di
trasferimento logico e fisico dei dati sul canale (multiplazione/accesso multiplo, indirizzamento e commutazione) cui
ovviano i livelli architetturali inferiori attraverso i meccanismi propri del particolare modo di trasferimento adottato,
bensì al contrario si occupa di supplire alle mancanze delle funzionalità del trasferimento in termini di affidabilità
implementando le suddette funzioni come garanzie sul trasporto stesso cioè chiudendo il cerchio su tutto ciò che il
trasporto in toto dovrebbe fare e garantire.
Livello di trasporto in Internet
Nello stack protocollare Internet, i protocolli di trasporto più utilizzati sono TCP e UDP. TCP è il più complicato fra
i due e fornisce un servizio end-to-end orientato alla connessione e al byte, con verifica del corretto ordine di
consegna, controllo di errore e di flusso. Il nome è un acronimo per Transmission Control Protocol. UDP, invece, è
un protocollo più snello e fornisce un servizio a datagrammi, senza connessione, con un meccanismo di riduzione
degli errori e con porte multiple. Il nome è un acronimo per User Datagram Protocol.
Esempi
Di seguito sono elencati alcuni protocolli di trasporto. In genere questi protocolli si basano su IP.
•
•
•
•
•
•
•
•
•
•
•
•
AEP, AppleTalk Echo Protocol
AMTP [1]
ATP, AppleTalk Transaction Protocol
NBP, Name Binding Protocol
NetBEUI, NetBIOS Extended User Interface
RSVP, Resource Reservation Protocol
RTMP, Routing Table Maintenance Protocol
SMB, Server Message Block
SPX, Sequenced Packet Exchange
SCTP, Stream Control Transmission Protocol
TCP, Transmission Control Protocol
UDP, User Datagram Protocol
Note
[1] http:/ / amtp. bw. org
41
Transmission Control Protocol
Transmission Control Protocol
In telecomunicazioni e informatica il Transmission Control Protocol (TCP), anche chiamato Transfer Control
Protocol, è un protocollo di rete a pacchetto di livello di trasporto, appartenente alla suite di protocolli Internet, che
si occupa di controllo di trasmissione. È definito nella RFC 793 e su di esso si appoggiano gran parte delle
applicazioni della rete Internet. È presente solo sui terminali di rete (host) e non sui nodi interni di commutazione
della rete di trasporto, implementato all'interno del rispettivo sistema operativo e vi si accede automaticamente dal
browser attraverso l'uso di opportune chiamate di sistema definite nelle API di sistema.
Descrizione
Il TCP può essere classificato al livello trasporto (OSI level 4) del modello di riferimento OSI, e di solito è usato in
combinazione con il protocollo di livello rete (OSI level 3) IP. La corrispondenza con il modello OSI non è perfetta,
in quanto il TCP e l'IP nascono prima del suddetto modello. La loro combinazione è indicata come TCP/IP e, alle
volte, è erroneamente considerata un unico protocollo. Da qui, la difficoltà di una classificazione univoca per un
protocollo che comprende, a pieno titolo, due livelli dello stack OSI (o pila ISO/OSI in italiano).
In linea con i dettami del livello di trasporto stabiliti dal modello ISO-OSI e con l'intento di superare il problema
della mancanza di affidabilità e controllo della comunicazione sorto con l'interconessione su vasta scala di reti locali
in un'unica grande rete geografica, TCP è stato progettato e realizzato per utilizzare i servizi offerti dai protocolli di
rete di livello inferiore (IP e protocolli di livello fisico e livello datalink) che definiscono efficacemente il modo di
trasferimento sul canale di comunicazione, ma che non offrono alcuna garanzia di affidabilità sulla consegna in
termini di ritardo, perdita ed errore dei pacchetti informativi trasmessi, sul controllo di flusso tra terminali e sul
controllo della congestione di rete, supplendo quindi ai problemi di cui sopra e costruendo così un canale di
comunicazione affidabile tra due processi applicativi di rete. Il canale di comunicazione così costruito è costituito
da un flusso bidirezionale di byte a seguito dell'instaurazione di una connessione agli estremi tra i due terminali in
comunicazione. Inoltre alcune funzionalità di TCP sono vitali per il buon funzionamento complessivo di una rete IP.
Sotto questo punto di vista TCP può essere considerato come un elemento di rete che si occupa di garantire una
qualità di servizio minima su una rete IP sotto che è di tipo best-effort.
Il TCP nacque nel 1970 come frutto del lavoro di un gruppo di ricerca del dipartimento di difesa statunitense. I suoi
punti di forza sono l'alta affidabilità e robustezza. La sua popolarità si deve anche grazie ad una sua implementazione
diffusa dalla Università di Berkeley, rilasciata in California sotto forma di sorgenti (TCP Berkeley). Molte tuttavia
sono le implementazioni e sviluppi che si sono succedute nel tempo come evoluzioni e miglioramenti (es. TCP
Tahoe, TCP Reno, TCP New Reno).
Caratteristiche principali
• TCP è un protocollo orientato alla connessione, ovvero prima di poter trasmettere dati deve stabilire la
comunicazione, negoziando una connessione tra mittente e destinatario, che viene esplicitamente chiusa quando
non più necessaria. Esso quindi possiede le funzionalità per creare, mantenere e chiudere/abbattere una
connessione.
• Il servizio offerto da TCP è il trasporto di un flusso di byte bidirezionale tra due applicazioni in esecuzione su
host differenti. Il protocollo permette alle due applicazioni di trasmettere contemporaneamente nelle due
direzioni, quindi il servizio può essere considerato "Full-Duplex" anche se non tutti i protocolli applicativi basati
su TCP utilizzano questa possibilità.
• Il flusso di byte viene frazionato in blocchi per la trasmissione dall'applicazione a TCP (che normalmente è
implementato all'interno del sistema operativo), per la trasmissione all'interno di segmenti TCP, per la consegna
all'applicazione che lo riceve, ma questa divisione in blocchi non è necessariamente la stessa nei diversi passaggi.
42
Transmission Control Protocol
43
• TCP garantisce che i dati trasmessi, se giungono a destinazione, lo facciano in ordine e una volta sola ("at most
once"). Più formalmente, il protocollo fornisce ai livelli superiori un servizio equivalente ad una connessione
fisica diretta che trasporta un flusso di byte. Questo è realizzato attraverso vari meccanismi di acknowledgment e
di ritrasmissione su timeout.
• TCP offre funzionalità di controllo di errore sui pacchetti pervenuti grazie al campo checksum contenuto nella sua
PDU.
• TCP possiede funzionalità di controllo di flusso tra terminali in comunicazione e controllo della congestione sulla
connessione, attraverso il meccanismo della finestra scorrevole. Questo permette di ottimizzare l'utilizzo della rete
anche in caso di congestione, e di condividere equamente la capacità disponibile tra diverse sessioni TCP attive su
un collegamento.
• TCP fornisce un servizio di multiplazione delle connessioni su un host, attraverso il meccanismo delle porte.
Confronto con UDP
Le principali differenze tra TCP e UDP (User Datagram Protocol), l'altro principale protocollo di trasporto della
suite di protocolli Internet, sono:
• mentre TCP è un protocollo orientato alla connessione, pertanto per stabilire, mantenere e chiudere una
connessione, è necessario inviare pacchetti di servizio i quali aumentano l'overhead di comunicazione. Al
contrario, UDP invece è senza connessione ed invia solo i datagrammi richiesti dal livello applicativo;
• UDP non offre nessuna garanzia sull'affidabilità della comunicazione ovvero sull'effettivo arrivo dei datagrammi,
sul loro ordine in sequenza in arrivo, al contrario il TCP tramite i meccanismi di acknowledgement e di
ritrasmissione su timeout riesce a garantire la consegna dei dati, anche se al costo di un maggiore overhead
(raffrontabile visivamente confrontando la dimensione delle intestazioni dei due protocolli);
• l'oggetto della comunicazione di TCP è il flusso di byte mentre quello di UDP è il singolo datagramma.
L'utilizzo del protocollo TCP rispetto a UDP è, in generale, preferito quando è necessario avere garanzie sulla
consegna dei dati o sull'ordine di arrivo dei vari segmenti (come per esempio nel caso di trasferimenti di file). Al
contrario UDP viene principalmente usato quando l'interazione tra i due host è idempotente o nel caso si abbiano
forti vincoli sulla velocità e l'economia di risorse della rete (es. instant messaging).
Segmento TCP
La PDU di TCP è detta segmento. Ciascun segmento viene normalmente imbustato in un pacchetto IP, ed è costituito
dall'intestazione (header) TCP e da un carico utile (in inglese payload), ovvero dati di livello applicativo. I dati
contenuti nell'intestazione costituiscono un canale di comunicazione tra le due entità TCP, che viene utilizzato per
realizzare le funzionalità dello strato di trasporto e non è accessibile agli strati dei livelli superiori.
Un segmento TCP è così strutturato:
TCP Header
Bit offset
0
Bits 0–3
4–7
8–15
Source port
16–31
Destination port
32
Sequence number
64
Acknowledgment number
96
Data offset Reserved CWR ECE URG ACK PSH RST SYN FIN
Window Size
128
Checksum
Urgent pointer
160
Options (optional)
160/192+
Data
Transmission Control Protocol
• Source port [16 bit] - Identifica il numero di porta sull'host mittente associato alla connessione TCP.
• Destination port [16 bit] - Identifica il numero di porta sull'host destinatario associato alla connessione TCP.
• Sequence number [32 bit] - Numero di sequenza, indica lo scostamento (espresso in byte) dell'inizio del
segmento TCP all'interno del flusso completo, a partire dall' Initial Sequence Number (ISN), negoziato all'apertura
della connessione.
• Acknowledgment number [32 bit] - Numero di riscontro, ha significato solo se il flag ACK è impostato a 1, e
conferma la ricezione di una parte del flusso di dati nella direzione opposta, indicando il valore del prossimo
Sequence number che l'host mittente del segmento TCP si aspetta di ricevere.
• Data offset [4 bit] - Indica la lunghezza (in word da 32 bit) dell'header del segmento TCP; tale lunghezza può
variare da 5 word (20 byte) a 15 word (60 byte) a seconda della presenza e della lunghezza del campo facoltativo
Options.
• Reserved [4 bit] - Bit non utilizzati e predisposti per sviluppi futuri del protocollo; dovrebbero essere settati a
zero.
• Flags [8 bit] - Bit utilizzati per il controllo del protocollo:
• CWR (Congestion Window Reduced) - se settato a 1 indica che l'host sorgente ha ricevuto un segmento TCP
con il flag ECE settato a 1 (aggiunto all'header in RFC 3168).
•
•
•
•
•
• ECE (ECN-Echo) - se settato a 1 indica che l'host supporta ECN (Explicit Congestion Notification) durante il
3-way handshake (aggiunto all'header in RFC 3168).
• URG - se settato a 1 indica che nel flusso sono presenti dati urgenti alla posizione (offset) indicata dal campo
Urgent pointer. Urgent Pointer punta alla fine dei dati urgenti;
• ACK - se settato a 1 indica che il campo Acknowledgment number è valido;
• PSH - se settato a 1 indica che i dati in arrivo non devono essere bufferizzati ma passati subito ai livelli
superiori dell'applicazione;
• RST - se settato a 1 indica che la connessione non è valida; viene utilizzato in caso di grave errore; a volte
utilizzato insieme al flag ACK per la chiusura di una connessione.
• SYN - se settato a 1 indica che l'host mittente del segmento vuole aprire una connessione TCP con l'host
destinatario e specifica nel campo Sequence number il valore dell' Initial Sequence Number (ISN); ha lo scopo
di sincronizzare i numeri di sequenza dei due host. L'host che ha inviato il SYN deve attendere dall'host
remoto un pacchetto SYN/ACK.
• FIN - se settato a 1 indica che l'host mittente del segmento vuole chiudere la connessione TCP aperta con
l'host destinatario. Il mittente attende la conferma dal ricevente (con un FIN-ACK). A questo punto la
connessione è ritenuta chiusa per metà: l'host che ha inviato FIN non potrà più inviare dati, mentre l'altro host
ha il canale di comunicazione ancora disponibile. Quando anche l'altro host invierà il pacchetto con FIN
impostato la connessione, dopo il relativo FIN-ACK, sarà considerata completamente chiusa.
Advertise Window [16 bit] - Indica la dimensione della finestra di ricezione dell'host mittente, cioè il numero di
byte che il mittente è in grado di accettare a partire da quello specificato dall'acknowledgment number.
Checksum [16 bit] - Campo di controllo utilizzato per la verifica della validità del segmento. È ottenuto facendo
il complemento a 1 della somma complemento a uno a 16 bit dell'intero header TCP (con il campo checksum
messo a zero),dell'intero payload, con l'aggiunta di uno pseudo header composto da: indirizzo IP
sorgente(32bit),indirizzo IP destinazione(32bit), un byte di zeri, un byte che indica il protocollo e due byte che
indicano la lunghezza del pacchetto TCP (header + dati).
Urgent pointer [16 bit] - Puntatore a dato urgente, ha significato solo se il flag URG è settato a 1 ed indica lo
scostamento in byte a partire dal Sequence number del byte di dati urgenti all'interno del flusso.
Options - Opzioni (facoltative) per usi del protocollo avanzati.
Data - rappresenta il carico utile o payload da trasmettere cioè la PDU proveniente dal livello superiore.
44
Transmission Control Protocol
Connessione
Prima ancora del trasferimento dei dati su canale di comunicazione e delle operazioni di controllo di trasmissione sul
flusso dei dati in ricezione, in trasmissione TCP si occupa di instaurare la connessione agli estremi tra i processi
applicativi dei terminali in comunicazione attraverso la definizione del socket ovvero coppia indirizzo IP, porta sia
del mittente che del destinatario. Si ricorda invece che la commutazione interna nei nodi della rete di trasporto dati
segue invece tipicamente la commutazione di pacchetto ovvero senza circuito o connessione fissa dedicata tipica
invece della commutazione di circuito. Il fine della connessione TCP è in ogni caso il riservamento di risorse tra
processi applicativi che si scambiano informazioni o servizi tra loro (es. server e client). Al termine della
connessione, TCP attua la fase dell'abbattimento della connessione. Le due procedure sono distinte e descritte a
seguito. L'implementazione di applicazioni di connessione di rete a pacchetto ricade nell'ambito della cosiddetta
programmazione socket.
Apertura di una connessione - Three-way handshake
La procedura utilizzata per instaurare in
modo affidabile una connessione TCP tra
due host è chiamata three-way handshake
(stretta di mano in 3 passaggi), indicando la
necessità di scambiare 3 messaggi tra host
mittente e host ricevente affinché la
connessione sia instaurata correttamente.
Consideriamo ad esempio che l'host A
intenda aprire una connessione TCP con
l'host B; i passi da seguire quindi sono:
1. A invia un segmento SYN a B - il flag
SYN è impostato a 1 e il campo Sequence
number contiene il valore x che specifica
l' Initial Sequence Number di A;
2. B invia un segmento SYN/ACK ad A i flag SYN e ACK sono impostati a 1, il
campo Sequence number contiene il
valore y che specifica l' Initial Sequence Number di B e il campo Acknowledgment number contiene il valore x+1
confermando la ricezione del ISN di A;
3. A invia un segmento ACK a B - il campo Acknowledgment number contiene il valore y+1 confermando la
ricezione del ISN di B.
Il terzo segmento non sarebbe, idealmente, necessario per l'apertura della connessione in quanto già dopo la
ricezione da parte di A del secondo segmento, entrambi gli host hanno espresso la loro disponibilità all'apertura della
connessione. Tuttavia esso risulta necessario al fine di permettere anche all'host B una stima del timeout iniziale,
come tempo intercorso tra l'invio di un segmento e la ricezione del corrispondente ACK.
Il flag SYN risulta utile nell'implementazione pratica del protocollo, e nella sua analisi da parte dei firewall: nel
traffico TCP i segmenti SYN stabiliscono nuove connessioni, mentre quelli con il flag non attivo appartengono a
connessioni già instaurate.
I segmenti utilizzati durante l'handshake sono solitamente 'solo header', ossia hanno il campo Data vuoto essendo
questa una fase di sincronizzazione tra i due host e non di scambio di dati.
45
Transmission Control Protocol
Chiusura di una connessione - Four-way handshake
Dopo che è stata stabilita, una connessione TCP non è considerata
una singola connessione bidirezionale, ma piuttosto come
l'affasciamento di due connessioni monodirezionali. Pertanto,
ognuna delle parti deve terminare la sua connessione, e possono
esistere anche connessioni aperte a metà, in cui solo uno dei due
terminali ha chiuso la connessione e non può più trasmettere, ma
può (e deve) ricevere i dati dall'altro terminale.
Di conseguenza, la chiusura della connessione si può effettuare in
due modi: con un handshake a tre vie, in cui le due parti chiudono
contemporaneamente le rispettive connessioni, o con uno a quattro
vie, in cui le due connessioni vengono chiuse in tempi diversi.
L'handshake a 3 vie è omologo a quello usato per l'apertura della
connessione, con la differenza che il flag utilizzato è il FIN invece
del SYN. Un terminale invia un pacchetto con la richiesta FIN,
l'altro risponde con un FIN + ACK, ed infine il primo manda
l'ultimo ACK, e l'intera connessione viene terminata.
L'handshake a 4 vie invece viene utilizzato quando la disconnessione non è contemporanea tra i due terminali in
comunicazione. In questo caso uno dei due terminali invia la richiesta di FIN, e attende l'ACK. L'altro terminale farà
poi altrettanto, generando quindi un totale di 4 pacchetti.
Multiplazione e porte
Ciascuna connessione TCP attiva è associata a un socket aperto da un processo (il socket è lo strumento offerto dal
sistema operativo alle applicazioni per usare le funzionalità della rete). TCP si occupa di smistare i dati tra le
connessioni attive ed i relativi processi. Per questo, a ciascuna connessione tra due host viene associato un numero di
porta su ciascuno dei due host, che è un intero senza segno a 16 bit (0-65535), contenuto nell'apposito campo
dell'header.
Una connessione TCP sarà quindi identificata dagli indirizzi IP dei due host e dalle porte utilizzate sui due host.
In questo modo, un server può accettare connessioni da più client contemporaneamente attraverso una o più porte, un
client può stabilire più connessioni verso più destinazioni, ed è anche possibile che un client stabilisca
contemporaneamente più connessioni indipendenti verso la stessa porta dello stesso server.
Server e Client
I due processi che comunicano attraverso una connessione TCP hanno ruoli diversi:
• Il processo che avvia una nuova connessione TCP è detto client, ed invia una richiesta di connessione verso una
determinata porta.
• Affinché la connessione venga stabilita, su quella porta deve esserci un processo server "in ascolto", che accetta di
stabilire una connessione TCP.
Le porte conosciute e registrate sono quindi utilizzate dai processi server, e sono convenzionalmente associate a
particolari servizi, in modo che un client sappia a quale porta connettersi per raggiungere un determinato server.
Il processo server, che è in ascolto su una certa porta, rimane bloccato in attesa che un client si colleghi. Il processo
client richiede di stabilire una connessione verso un determinato server su una determinata porta. Normalmente la
porta sorgente usata dal client viene allocata dinamicamente dal sistema operativo del client. Quando il TCP
stabilisce la connessione, a entrambi i processi viene assegnato un socket tramite cui essi possono comunicare tra
46
Transmission Control Protocol
loro. Tipicamente il processo server effettua una fork, affida al figlio il compito di comunicare con il nuovo client e
si rimette in ascolto. Da questo punto in poi, client e server hanno ruoli simmetrici, e utilizzano gli stessi strumenti
per comunicare attraverso il socket.
Affidabilità della comunicazione
Consegna ordinata ed eliminazione di duplicati
Il Sequence number, o numero di sequenza, serve a identificare e posizionare in maniera ordinata il carico utile del
segmento TCP all'interno del flusso di dati. Con la trasmissione tipica a commutazione di pacchetto delle rete dati
infatti ciascun pacchetto può seguire percorsi diversi in rete e giungere fuori sequenza in ricezione.
In ricezione TCP si aspetta di ricevere il segmento successivo all'ultimo segmento ricevuto in ordine ovvero quello il
cui numero di sequenza è pari al numero di sequenza dell'ultimo pervenuto in ordine più la dimensione del carico
utile del segmento in attesa (cioè del suo campo Data).
In relazione al numero di sequenza TCP ricevente attua le seguenti procedure:
• se il numero di sequenza ricevuto è quello atteso invia direttamente il carico utile del segmento al processo di
livello applicativo e libera i propri buffer.
• se il numero di sequenza ricevuto è maggiore di quello atteso deduce che uno o più segmenti ad esso precedenti
sono andati persi, ritardati dal livello di rete sottostante o ancora in transito sulla rete. Pertanto, memorizza
temporaneamente in un buffer il carico utile del segmento ricevuto fuori sequenza per poterlo consegnare al
processo applicativo solo dopo aver ricevuto e consegnato anche tutti i segmenti precedenti non ancora pervenuti
passenti anch'essi per il buffer, aspettandone l'arrivo fino ad un tempo limite prefissato (time-out). All'istante di
consegna del blocco ordinato di segmenti tutto il contenuto del buffer viene liberato. Dal punto di vista del
processo applicativo, quindi, i dati arriveranno in ordine anche se la rete ha per qualsiasi motivo alterato questo
ordine realizzando così il requisito della consegna ordinata dei dati.
• se il numero di sequenza ricevuto è inferiore a quello atteso, il segmento viene considerato un duplicato di uno già
ricevuto e già inviato allo strato applicativo e dunque scartato. Questo permette di realizzare l'eliminazione dei
duplicati di rete.
Riscontro dei pacchetti e ritrasmissione
Per ogni segmento ricevuto in sequenza inoltre TCP lato ricevente invia un Acknowledgment Number o numero di
riscontro dell'avvenuta ricezione. Il numero di riscontro presente in un segmento riguarda il flusso di dati nella
direzione opposta. In particolare, il numero di riscontro inviato da A a B è pari al numero di sequenza atteso da A e,
quindi, riguarda il flusso di dati da B ad A.
In particolare il protocollo TCP adotta la politica di Conferma cumulativa, ovvero l'arrivo di numero di riscontro
indica al TCP trasmittente che il ricevente ha ricevuto e correttamente inoltrato al proprio processo applicativo il
segmento avente numero di sequenza pari al numero di riscontro indicato (-1) ed anche tutti i segmenti ad esso
precedenti. Per tale motivo TCP lato trasmittente mantiene temporaneamente in un buffer una copia di tutti i dati
inviati, ma non ancora riscontrati: quando questi riceve un numero di riscontro per un certo segmento, deduce che
tutti i segmenti precedenti a quel numero sono stati ricevuti correttamente liberando il proprio buffer dai dati. La
dimensione massima dei pacchetti riscontrabili in maniera cumulativa è specificata dalle dimensioni della cosiddetta
finestra scorrevole.
Per evitare tempi di attesa troppo lunghi o troppo corti per ciascun segmento inviato TCP lato trasmittente avvia un
timer, detto timer di ritrasmissione RTO (Retransmission Time Out): se questi non riceve un ACK di riscontro per il
segmento inviato prima che il timer scada, TCP assume che tutti i segmenti trasmessi a partire da questo siano andati
persi e quindi procede alla ritrasmissione.
47
Transmission Control Protocol
Si noti che, in TCP, il meccanismo dei numeri di riscontro non permette al ricevitore di comunicare al trasmettitore
che un segmento è stato perso, ma alcuni dei successivi sono stati ricevuti (meccanismo ad Acknowledgment Number
negativi), quindi è possibile che per un solo pacchetto perso ne debbano essere ritrasmessi molti. Questo
comportamento non ottimale è compensato dalla semplicità del protocollo. Questa tecnica è detta Go-Back-N (vai
indietro di N segmenti); l'alternativa, ovvero progettare il protocollo in modo tale che solo i pacchetti effettivamente
persi vengano ritrasmessi, è detta Selective Repeat (ripetizione selettiva); l'utilizzo però di alcuni campi opzionali
appositi permette l'utilizzo della ripetizione selettiva.
I numeri di riscontro e i relativi timer di ritrasmissione permettono quindi di realizzare la consegna affidabile,
ovvero di garantire che tutti i dati inviati siano comunque consegnati nel caso in cui qualche pacchetto possa essere
perso nel transito attraverso la rete (controllo di errore in termini di riscontro di trasmissione).
Controllo di flusso
L'affidabilità della comunicazione in TCP è garantita anche dal cosiddetto controllo di flusso ovvero far in modo che
il flusso di dati in trasmissione non superi le capacità di ricezione ovvero di memorizzazione del ricevente con
perdita di pacchetti e maggior peso e latenze nelle successive richieste di ritrasmissione. Viene attuato attraverso la
specifica da parte del destinatario di un opportuno campo noto come RCW_WND (finestra di ricezione) il quale
specifica il numero massimo di segmenti ricevibile dal destinatario.
Controllo di congestione
Infine l'ultimo tipo di controllo effettuato da TCP per garantire affidabilità alla comunicazione è il cosiddetto
controllo della congestione ovvero far in modo che si limitino il più possibile fenomeni di congestione all'interno
della rete per eccessivo traffico sui dispositivi di rete con perdita di pacchetti in transito e maggior peso e latenze
nelle successive richieste di ritrasmissione, modulando nel tempo la quantità di dati in trasmissione in funzione dello
stato interno di congestione. La particolarità di tale controllo è che viene effettuato agendo sulla trasmissione agli
estremi cioè sui terminali di rete e non attraverso la commutazione interna alla rete grazie alle informazioni
deducibili dal terminale stesso sullo stato della trasmissione dei pacchetti. Nello specifico, una volta "stimato" lo
stato di congestione interno della rete avendo scelto come parametro di riferimento la perdita di pacchetti trasmessi
desunta dai mancati ACK di riscontro dei pacchetti stessi, tale controllo viene poi attuato attraverso la definizione da
parte del mittente di un opportuno campo noto come C_WND (finestra di congestione) la quale assegna,
dinamicamente nel tempo, il numero massimo di segmenti da trasmettere al destinatario.
I timer del TCP
Timer di ritrasmissione
Come descritto sopra, il timer di ritrasmissione serve a verificare che ciascun segmento trasmesso venga riscontrato.
La corretta impostazione di questo timer è difficile ma molto importante, in quanto un timer troppo breve comporta
ritrasmissioni inutili (il timer scatta mentre il riscontro o il pacchetto sono ancora in viaggio), mentre un timer troppo
lungo comporta attese in caso di effettiva perdita di pacchetti. Ovviamente tale intervallo dovrà essere almeno pari al
Round Trip Time cioè al tempo di percorrenza a due vie di un pacchetto per tornare al mittente sotto forma di ACK.
Tale RTT, per la natura intrinseca della commutazione di pacchetto interna alla rete, è tipicamente variabile in
maniera aleatoria. TCP allora aggiusta continuamente il timer di ritrasmissione basandosi su una stima a media
mobile del Round Trip Time.
48
Transmission Control Protocol
Timer di persistenza
Come spiegato sopra, il TCP utilizza il metodo della finestra scorrevole per gestire il controllo di flusso di dati che il
ricevente è in grado di accettare dal mittente. Tra i valori validi di questo campo vi è anche lo zero, a significare che
il ricevente richiede l'interruzione momentanea dell'invio di dati.
Nel malaugurato caso in cui il pacchetto che riapre la finestra venga perso, il mittente del canale TCP rimarrà però in
attesa indefinita. Per evitare questo, il TCP avvia un timer, detto timer di persistenza, ogni qual volta il ricevente
chiude la finestra. Quando questo timer scade, il mittente invia un pacchetto sonda al ricevente, provocandone una
risposta: in questo modo il mittente potrà essere sicuro che la finestra sia chiusa (ricevendo un altro pacchetto con
campo Window a 0) o sbloccarsi dallo stallo (ricevendo un pacchetto con campo Window diverso da zero).
Timer di keepalive
La RFC 793 che definisce il protocollo TCP non prevede particolari azioni da intraprendere quando non ci sono dati
da trasmettere sulla connessioni. Alcune implementazioni però consentono di trasmettere periodicamente segmenti
vuoti, detti keepalive, per evitare di mantenere indefinitamente in memoria connessioni con sistemi che potrebbero
anche non essere più attivi. In molti sistemi il software applicativo ha la possibilità di scegliere se abilitare o meno i
keepalive per ogni connessione.
Quando si usano i keepalive, è presente dunque il timer di keepalive: esso viene reimpostato alla ricezione o alla
trasmissione di ogni segmento, e quando scade viene trasmesso un keepalive. Un valore tipico è di due ore.
Timed wait
L'ultimo timer utilizzato da TCP è il timed wait. In pratica, prima di disconnettere effettivamente una connessione, i
due estremi del canale attendono un tempo pari al doppio del tempo di vita di un comune pacchetto: questo evita che
dei pacchetti possano rimanere circolanti per la rete anche dopo la chiusura.
Voci correlate
•
•
•
•
•
•
•
•
Internet Protocol
Porta (reti)
Finestra scorrevole
User Datagram Protocol (UDP)
SCTP
Controllo di errore
Controllo di flusso
Controllo della congestione in TCP
49
Transmission Control Protocol
Collegamenti esterni
• (EN) RFC 793 - Transmission Control Protocol Specifications [1]
• Traduzione in italiano dell'RFC [2]
• (EN) Porte di comunicazione TCP [3]
Note
[1] http:/ / tools. ietf. org/ html/ rfc0793
[2] http:/ / www. rfc. altervista. org/ rfctradotte/ rfc793_tradotta. txt
[3] http:/ / www. answersthatwork. com/ Download_Area/ ATW_Library/ Networking/ Network__2-List_of_Common_TCPIP_port_numbers.
pdf
User Datagram Protocol
In telecomunicazioni lo User Datagram Protocol (UDP) è uno dei principali protocolli di rete della suite di
protocolli Internet. È un protocollo di livello di trasporto a pacchetto, usato di solito in combinazione con il
protocollo IP.
Funzionamento
A differenza del TCP, l'UDP è un protocollo di tipo connectionless, inoltre non gestisce il riordinamento dei
pacchetti né la ritrasmissione di quelli persi, ed è perciò generalmente considerato di minore affidabilità. È in
compenso molto rapido ed efficiente per le applicazioni "leggere" o time-sensitive. Ad esempio, è usato spesso per la
trasmissione di informazioni audio o video. Dato che le applicazioni in tempo reale spesso richiedono un ritmo
minimo di spedizione, non vogliono ritardare eccessivamente la trasmissione dei pacchetti e possono tollerare
qualche perdita di dati, il modello di servizio TCP può non essere particolarmente adatto alle loro caratteristiche.
L'UDP fornisce soltanto i servizi basilari del livello di trasporto, ovvero:
• multiplazione delle connessioni, ottenuta attraverso il meccanismo delle porte
• verifica degli errori mediante una checksum, inserita in un campo dell'intestazione del pacchetto.
mentre TCP garantisce anche il trasferimento affidabile dei dati, il controllo di flusso e il controllo della congestione.
L'UDP è un protocollo stateless, ovvero non tiene nota dello stato della connessione dunque ha, rispetto al TCP,
informazioni in meno da memorizzare. Un server dedicato ad una particolare applicazione che scelga UDP come
protocollo di trasporto può supportare molti più client attivi.
Struttura di un datagramma UDP
Un datagramma (o pacchetto) UDP è così strutturato:
50
User Datagram Protocol
51
+
Bit 0-15
16-31
0
Source Port (optional)
Destination Port
32
Length
Checksum (optional)
64+
Data
•
•
•
•
Source port [16 bit] - Identifica il numero di porta sull'host del mittente del datagramma;
Destination port [16 bit] - Identifica il numero di porta sull'host del destinatario del datagramma;
Length [16 bit] - contiene la lunghezza totale in bytes del datagramma UDP (header+dati);
Checksum [16 bit] - contiene il codice di controllo del datagramma (header+dati+pseudo-header,quest'ultimo
comprendente gli indirizzi IP di sorgente e destinazione). L'algoritmo di calcolo è definito nell'RFC del
protocollo;
• Data - contiene i dati del messaggio
Applicazioni che utilizzano UDP
Le applicazioni che hanno la necessità di un trasferimento affidabile dei loro dati si affidano ovviamente a TCP. Le
applicazioni più elastiche riguardo alla perdita dei dati e dipendenti dal tempo si affidano invece a UDP. Inoltre si
utilizza UDP per comunicazioni in broadcast (invio a tutti i terminali in una rete locale) e multicast (invio a tutti i
terminali iscritti ad un servizio).
Di seguito è proposto un elenco dei principali servizi internet e dei protocolli che adottano:
Applicazione
Protocollo strato applicazione
Protocollo strato trasporto
Posta elettronica
SMTP
TCP
Accesso a terminale remoto
telnet
TCP
Trasferimento file
FTP
TCP
Web
HTTP
TCP
Streaming Audio/Video
RTSP/RTP
TCP (comandi) + UDP (flusso)
Server di file remoto
NFS
tipicamente UDP
Telefonia su internet (VoIP)
SIP, H.323, altri
tipicamente UDP
Gestione della rete
SNMP
tipicamente UDP
Protocollo di routing
RIP
tipicamente UDP
Risoluzione dei nomi
DNS
tipicamente UDP
Collegamenti esterni
• RFC 768 User Datagram Protocol (traduzione in italiano [1])
Note
[1] http:/ / www. rfc. altervista. org/ rfctradotte/ rfc768_tradotta. txt
Livello di rete
Livello di rete
In telecomunicazioni e informatica nell'ambito delle reti di calcolatori il livello rete (Network layer) è il livello 3
della pila ISO/OSI. Questo livello riceve segmenti dal soprastante livello di trasporto e forma pacchetti che vengono
passati al sottostante Livello datalink.
Il compito del livello di rete è la trasmissione logica di pacchetti tra due host arbitrari, che in generale non sono
direttamente connessi (ovvero non hanno un collegamento diretto tra di loro) cioè in sostanza si occupa di
indirizzamento e instradamento verso la giusta destinazione attraverso il percorso di rete più appropriato. Nel
modello ISO/OSI il livello di rete è l'ultimo livello presente nei commutatori della rete ovvero nei nodi interni,
mentre i livelli architetturali superiori sono presenti solo nei nodi terminali.[1][2]
Funzioni del livello di rete
• inoltro, ovvero ricevere un pacchetto su una porta, immagazzinarlo e ritrasmetterlo su un'altra. Questa funzione è
presente in tutti i nodi della rete, e può comportare l'utilizzo di protocolli di livello collegamento differenti;
• frammentazione e riassemblaggio: se un pacchetto ricevuto ha una dimensione eccessiva per la rete su cui deve
essere trasmesso, il livello di rete lo divide in frammenti e, in maniera complementare, si occupa di riassemblare i
frammenti ricevuti al momento della consegna;
• instradamento (routing), ovvero determinare il percorso ideale per la trasmissione dei dati attraverso la rete a
partire dall'indirizzo IP del destinatario. Nella maggior parte dei casi, questa funzione viene svolta dinamicamente
tramite appositi algoritmi, che utilizzano le informazioni provenienti dai protocolli di routing sulle condizioni
della rete, le tabelle di instradamento, la priorità del servizio e altri elementi secondari;
• alcuni protocolli di rete forniscono un servizio di gestione delle connessioni (x.25, Frame Relay, Asynchronous
Transfer Mode), ovvero richiedono che venga stabilito un canale di comunicazione fisso e dedicato prima che due
host possano iniziare a scambiarsi dati; altri protocolli invece trasportano semplicemente i datagrammi a
destinazione (IP, IPX) senza connessione. I protocolli orientati alla connessione possono offrire garanzie di
consegna in ordine dei pacchetti, mentre questo non avviene normalmente nei protocolli senza connessione;
• funzioni talvolta presenti nel livello di rete sono il controllo della congestione, o garanzie di qualità di servizio,
tipicamente basate sulla prenotazione delle risorse su tutti i nodi della rete;
• nelle reti geografiche (WAN o MAN) può venire gestita la tariffazione, calcolata sulla base dei tempi di
connessione e/o di altri parametri.
Livello rete in IP
Nel modello TCP/IP, il livello 3 viene detto livello internet oppure livello di internetworking, in quanto
interconnette reti eterogenee, che possono essere basate su protocolli di livello collegamento (ad esempio ethernet,
PPP) o su protocolli di rete (ad esempio Frame Relay, Asynchronous Transfer Mode), per realizzare un'unica rete in
modo trasparente agli utilizzatori. La forza di IP sta proprio in questo agnosticismo rispetto al livello di rete, che
permette di usare o riusare tecnologie già disponibili, e di adattarsi con naturalezza a nuove tecnologie.
Osservando una rete IP costruita con tecnologie eterogenee, si può notare che alcuni nodi della rete eseguono IP (e
sono detti router); altri nodi instradano pacchetti IP usando altre tecnologie di rete (che stanno sotto IP nello stack dei
protocolli). Questi nodi sono normalmente detti switch o commutatori, anche se il termine per antonomasia indica
specificamente lo switch ethernet.
IP determina il miglior cammino (detto routing ovvero instradamento) per l’inoltro dei pacchetti, attraverso la
consultazione delle tabelle di instradamento. Tali tabelle possono essere di tipo statico (realizzate manualmente dai
gestori della rete) o dinamico (composte con l'utilizzo di protocolli di routing tipo l'OSPF, il RIP o il BGP che
servono a popolare tali tabelle scambiando tra i vari apparati le informazioni sulle rotte conosciute).
52
Livello di rete
53
Note
[1] (EN) Network Layer Definition (http:/ / www. linfo. org/ network_layer. html). linfo.org, 16-9-2005. URL consultato il 13-5-2012.
[2] (EN) Bradley Mitchell. Visual Networking Overview - The OSI Model - Network Layer (http:/ / compnetworking. about. com/ od/
basicnetworkingconcepts/ l/ blbasics_osi3. htm). about.com. URL consultato il 13-5-2012.
IPv4
IPv4 (Internet Protocol version 4) è la quarta revisione dell'Internet Protocol. Il protocollo è descritto nell'RFC 791,
pubblicato dalla IETF nel settembre 1981, ed è il più usato a livello di rete, poiché fa parte della suite di protocolli
Internet.
Nel 1998 è stata suggerita una nuova versione del protocollo Internet, denominata IPv6, a causa del problema della
saturazione di IPv4. Al 2011 l'IPv6 risulta tuttavia meno utilizzato rispetto alla versione 4.[1]
Il pacchetto IPv4
L'header del pacchetto IPv4 consiste in 13 campi di cui 1 opzionale (segnalato nello schema con sfondo rosso) e
chiamato con l'ovvio nome di Options. I campi sono inseriti col byte più significativo messo per primo (notazione
big-endian) e all'interno dei singoli byte il bit più significativo è il primo (quello di indice 0).
+
Bits 0–3
0
Version
4–7
Internet
Type of Service
Header length (now DiffServ and ECN)
32
64
8–15
Identification
Time to Live
16–18
19–31
Total Length
Flags Fragment Offset
Protocol
96
Source Address
128
Destination Address
160
Options (optional)
160
o
192+
Data
Header Checksum
• Versione [4 bit] - Indica la versione del datagramma IP: per IPv4, ha valore 4 (da qui il nome IPv4).
• Internet Header Length (IHL) [4 bit] - Indica la lunghezza (in word da 32 bit) dell'header del datagramma IP
ovvero l'offset del campo dati; tale lunghezza può variare da 5 word (20 byte) a 15 word (60 byte) a seconda della
presenza e della lunghezza del campo facoltativo Options;
• Type of Service (TOS) [8 bit] - Nelle specifiche iniziali del protocollo (RFC 791), questi bit servivano all'host
mittente per specificare il modo e in particolare la precedenza con cui l'host ricevente doveva trattare il
datagramma:
•
•
•
•
•
bit 0-2 : Precedenza
bit 3: Latenza (0 = normale, 1 = bassa)
bit 4: Throughput (0 = normale, 1 = alto)
bit 5: Affidabilità (0 = normale, 1 = alta)
bit 6-7: Riservati per usi futuri
ad esempio un host poteva scegliere una bassa latenza, mentre un altro preferire un'alta affidabilità. Nella
pratica questo uso del campo TOS non ha preso largamente piede.
IPv4
54
Dopo molte sperimentazioni e ricerche, recentemente questi 8 bit sono stati ridefiniti ed hanno la funzione di
Differentiated services (DiffServ nell'IETF e Explicit Congestion Notification (ECN) codepoints (vedi RFC
3168), necessari per le nuove tecnologie basate sullo streaming dei dati in tempo reale, come per il esempio il
Voice over IP (VoIP) usato per lo scambio interattivo dei dati vocali.
• Total Length [16 bit] - Indica la dimensione (in byte) dell'intero datagramma, comprendendo header e dati; tale
lunghezza può variare da un minimo di 20 byte (header minimo e campo dati vuoto) ad un massimo di 65535
byte. In ogni momento, ad ogni host è richiesto di essere in grado di gestire datagrammi aventi una dimensione
minima di 576 byte mentre sono autorizzati, se necessario, a frammentare datagrammi di dimensione maggiore.
• Identification [16 bit] - Utilizzato, come da specifiche iniziali, per identificare in modo univoco i vari frammenti
in cui può essere stato "spezzato" un datagramma IP. Alcune sperimentazioni successive hanno però suggerito di
utilizzare questo campo per altri scopi, come aggiungere la funzionalità di tracciamento dei pacchetti.
• Flags [3 bit] - Bit utilizzati per il controllo del protocollo e della frammentazione dei datagrammi:
• Reserved - sempre settato a 0. Come pesce d'Aprile, in RFC 3514 si è proposto di utilizzarlo come "Evil bit".
• DF (Don't Fragment) - se settato a 1 indica che il datagramma non deve essere frammentato; se tale
datagramma non può essere inoltrato da un host senza essere frammentato, viene semplicemente scartato.
Questo può risultare utile per "ispezionare" la capacità di gestione dei vari host del percorso di routing.
• MF (More Fragments) - se settato a 0 indica che il datagramma è l'ultimo frammento o il solo frammento del
datagramma originario, pertanto tutti gli altri suoi frammenti hanno il bit MF settato a 1. Naturalmente, questo
bit sarà sempre 0 anche in tutti i datagrammi che non sono stati frammentati.
• Fragment Offset [13 bit] - Indica l'offset (misurato in blocchi di 8 byte) di un particolare frammento
relativamente all'inizio del datagramma IP originale: il primo frammento ha offset 0. L'offset massimo risulta
pertanto pari a
65528 byte che, includendo l'header, potrebbe eccedere la dimensione
massima di 65535 byte di un datagramma IP.
• Time To Live (TTL) [8 bit] - Indica il tempo di vita (time to live) del datagramma, necessario per evitarne la
persistenza indefinita sulla rete nel caso in cui non si riesca a recapitarlo al destinatario. Storicamente il TTL
misurava i "secondi di vita" del datagramma, mentre ora esso misura il numero di "salti" da nodo a nodo della
rete: ogni router che riceve il datagramma prima di inoltrarlo ne decrementa il TTL (modificando di conseguenza
anche il campo Header Checksum), quando questo arriva a zero il datagramma non viene più inoltrato ma
scartato. Tipicamente, quando un datagramma viene scartato per esaurimento del TTL, viene automaticamente
inviato un messaggio ICMP al mittente del datagramma, specificando il codice di Richiesta scaduta; la ricezione
di questo messaggio ICMP è alla base del meccanismo di traceroute.
• Protocol [8 bit] - Indica il codice associato al protocollo utilizzato nel campo dati del datagramma IP: per
esempio al protocollo TCP è associato il codice 6, ad UDP il codice 17, mentre ad IPv6 è associato il codice 41.
La lista dei codici dei vari protocolli, inizialmente definita in RFC 790, è mantenuta e gestita dalla Internet
Assigned Numbers Authority.
• Header Checksum [16 bit] - È un campo usato per il controllo degli errori dell'header. Ad ogni hop, il checksum
viene ricalcolato (secondo la definizione data in RFC 791) e confrontato con il valore di questo campo: se non c'è
corrispondenza il pacchetto viene scartato. È da notare che non viene effettuato alcun controllo sulla presenza di
errori nel campo Data deputandolo ai livelli superiori.
• Source address [32 bit] - Indica l'indirizzo IP associato all'host del mittente del datagramma.
Da notare che questo indirizzo potrebbe non essere quello del "vero" mittente nel caso di traduzioni mediante
NAT. Infatti, qualora un host intermedio effettui questa traduzione, sostituisce l'indirizzo del mittente con uno
proprio, procurandosi poi di ripristinare l'indirizzo originario su tutti i messaggi di risposta che gli arrivano
destinati al mittente originario.
• Destination address [32 bit] - Indica l'indirizzo IP associato all'host del destinatario del datagramma e segue le
medesime regole del campo Source address.
IPv4
55
• Options - Opzioni (facoltative e non molto usate) per usi più specifici del protocollo.
Si ricorda che il valore del campo IHL deve essere sufficientemente grande da includere anche tutte le opzioni
e, nel caso queste siano più corte di una word, il padding necessario a completare i 32 bit. Inoltre, nel caso in
cui la lista di opzioni non coincida con la fine dell'header, occorre aggiungere in coda ad essa un marcatore
EOL (End of Options List).
C'è da notare infine che, potendo causare problemi di sicurezza, l'uso delle opzioni LSSR e SSRR (Loose e
Strict Source and Record Route) è scoraggiato e molti router bloccano i datagrammi che contengono queste
opzioni.
Di seguito è riportata la struttura contenuta nell'header ip.h della libreria GNU C:
struct iphdr
{
#if __BYTE_ORDER == __LITTLE_ENDIAN
unsigned int ihl:4;
unsigned int version:4;
#elif __BYTE_ORDER == __BIG_ENDIAN
unsigned int version:4;
unsigned int ihl:4;
#else
# error "Please fix <bits/endian.h>"
#endif
u_int8_t tos;
u_int16_t tot_len;
u_int16_t id;
u_int16_t frag_off;
u_int8_t ttl;
u_int8_t protocol;
u_int16_t check;
u_int32_t saddr;
u_int32_t daddr;
/*The options start here. */
};
Indirizzamento IPv4
L'indirizzo IPv4 è formato da 32 bit, esso è univoco sulla rete di cui fa parte. Tale indirizzo, inoltre, non va assegnato
all'host, ma alle connessioni fisiche alla rete che l'host possiede (nel cast di host multicollegati o di dispositivi di
rete). Si è però verificato che i primi paesi in cui si è diffuso Internet e all'interno di essi i primi provider, si sono
"accapparrati" un numero di Ip proporzionalmente sbilanciato. Gli ultimi provider hanno pertanto dovuto ricorrere ad
un sistema per ovviare alla scarsità degli IP a loro attribuiti. Hanno pertanto considerato gli utenti a loro connessi di
una intera città come un'unica LAN e pertanto tutti dotati dello stesso IP.
Concettualmente l'indirizzo IP si compone di due parti:
1. identificatore di rete e precisamente della sottorete
2. identificatore di host
IPv4
56
Notazione decimale puntata
Per semplificarne la lettura, ogni indirizzo IP viene descritto con 4 numeri in base decimale, in modo che ognuno
rappresenti un byte (il valore di un byte varia da 0 a 255 quando lo consideriamo in base dieci), separati dal simbolo
"punto"; un esempio di indirizzo IPv4 è 192.0.34.166.
Indirizzi particolari
Ogni indirizzo in cui l'identificativo host presenta tutti 0 si riferisce alla rete, mentre se tutti i bit di questo
identificativo sono a 1, l'indirizzo si riferisce ad una trasmissione broadcast diretta.
In pratica quando ad un router arriva un pacchetto in cui la parte di host dell'indirizzo presenta tutti i bit a 1, esso
esegue un broadcast a tutti i nodi della sotto-rete. Questo comportamento è stato sfruttato dai cracker per creare
attacchi di tipo denial of service, pertanto è buona norma disabilitare nei router l'inoltro del broadcast diretto.
Indirizzamento a classi
Se un host deve comunicare con un altro host della stessa sottorete, userà il protocollo di livello 2 della rete a cui è
collegato, altrimenti dovrà inviare i pacchetti ad un gateway o router, che sarà connesso ad altre reti e si occuperà di
inoltrare i pacchetti ricevuti.
La comunicazione tra i router avviene mediante indirizzi IP utilizzando delle tecniche particolari di indirizzamento
per individuare la sottorete e l'host.
Originariamente lo schema delle suddivisioni delle due componenti era a classi per cui un indirizzo IP apparteneva
una classe (classfull) in base ai primi 4 bit dell'IP.
Con questo schema l'indirizzo è ad autoidentificazione perché il confine tra le due componenti si può determinare
con i bit più significativi.
Limiti
Il numero di indirizzi univoci disponibili in IPv4 è
, ma bisogna
tener presente che non vengono usati tutti, perché alcuni sono riservati a un particolare utilizzo (ad esempio gli
indirizzi 0.0.0.0, 127.0.0.1, 255.255.255.255, 192.0.34.166 e la classe 192.168.0.1/16) e perché certe classi non
vengono sfruttate interamente per via della suddivisione interna in classi più piccole.
L'indirizzamento a classi, proprio per questo, presenta diversi limiti dovuti soprattutto al numero di host gestibili
dalle diverse classi.
In pratica se si esauriscono gli indirizzi univoci resi disponibili da una classe, ad esempio la C connettendo più di
255 host, occorre fare ricorso ad un indirizzo di classe superiore.
Il cambiamento di indirizzo non è indolore con questa tecnica perché il software di rete va aggiornato con i nuovi
indirizzi e non consente una transizione graduale.
In pratica l'indicatore di rete univoco non poteva adempiere alle esigenze della crescita che negli anni '80 ebbero le
reti LAN. Quindi per risparmiare i prefissi di rete si dovettero escogitare altre tecniche come quella del
mascheramento (vedi NAT) per continuare a fare in modo che IPv4 potesse adempiere al suo ruolo prima dell'entrata
di IPv6.
IPv4
57
Indirizzamento senza classi
L'indirizzamento in classi è considerato obsoleto, e per permettere un migliore sfruttamento degli indirizzi IP
disponibili, è stato introdotto l'indirizzamento senza classi (classless), o CIDR.
La modifica introdotta dal CIDR consiste essenzialmente nell'utilizzare maschere di sottorete (subnet mask) di
lunghezza arbitraria, mentre l'indirizzamento con classi ammetteva solo tre lunghezze della maschera di sottorete: /8,
/16 e /24. La maschera della vecchia classe C (/24) è ancora popolare, ma si usano anche maschere più corte per reti
grandi (/23 o /22) o più lunghe per reti piccole (/25, /26, fino a /30 per reti punto-punto).
I bit che nella maschera di sottorete sono a 1 fanno parte dell'indirizzo della sottorete, gli altri sono l'indirizzo
dell'host. Normalmente, la maschera di sottorete è costituita da N bit a 1 seguiti da (32-N) bit a 0, e può essere
abbreviata nella forma /N.
In questo modo non si è vincolati a un numero fisso di bit per determinare l'indirizzo di rete, ma i bit utili a
rappresentare la rete, piuttosto che l'host, sono fissati liberamente.
Vedi anche Saturazione di IPv4.
Enti di gestione
Gli indirizzi IP sono univoci a livello mondiale, e vengono assegnati in modo centralizzato da una gerarchia di enti
appositi. Sono considerati una risorsa preziosa da gestire con cura. Per rafforzare questo concetto, si parla di
"indirizzi IP pubblici".
Inizialmente l'autorità preposta era la IANA (Internet Assigned Number Authority), dopo il 1998 venne creato
l'ICANN (Internet corporation for Assigned Names and Numbers) che opera tuttora. Essa è responsabile della
gestione degli indirizzi IP in base alle direttive dell'RFC 2050.
Note
[1] (EN) IPv6: IPv6 / IPv4 Comparative Statistics (http:/ / bgp. potaroo. net/ v6/ v6rpt. html)
Voci correlate
•
•
•
•
•
Internet Protocol
IPv6
Classi di indirizzi IP
Saturazione di IPv4
Transizione IPV4/IPV6
Collegamenti esterni
• (EN) RFC 791 - Internet Protocol (http://www.ietf.org/rfc/rfc0791.txt)
• (EN) RFC 3168 - Explicit congestion notification (http://tools.ietf.org/html/rfc3168)
• (EN) RFC 2050 - Internet Registry IP Allocation Guidelines (http://www.ietf.org/rfc/rfc2050.txt)
IPsec
58
IPsec
In telecomunicazioni e informatica IPsec, abbreviazione di IP Security, è uno standard per reti a pacchetto che si
prefigge di ottenere connessioni sicure su reti IP. La sicurezza viene raggiunta attraverso funzionalità di
autenticazione, cifratura e controllo di integrità dei pacchetti IP (datagrammi). La capacità di fornire protezione o
sicurezza viene fornita quindi a livello di rete (diversamente da HTTPS, SSL/TLS) cui IP appartiene e questo fatto
rende questo protocollo trasparente al livello delle applicazioni che non devono quindi essere modificate.
Panoramica dello standard
Scopo del progetto
IPsec è stato progettato per rendere sicure sia comunicazioni portal-to-portal sia comunicazioni end-to-end. Nella
prima configurazione il traffico viene reso "sicuro" a diversi computer (in alcuni casi ad un'intera LAN); nella
seconda solo i peer che stabiliscono la connessione scambiano pacchetti protetti. Tuttavia l'uso predominante di
IPsec è la creazione di VPN (virtual private network); per conseguire tale scopo possono essere utilizzati entrambi i
metodi prima esposti.
Introduzione
IPsec è una collezione di protocolli formata da:
• Protocolli che implementano lo scambio delle chiavi per realizzare il flusso crittografato.
• Protocolli che forniscono la cifratura del flusso di dati;
Per quanto riguarda il primo aspetto, esistono due protocolli: Authentication Header (AH) e Encapsulating Security
Payload (ESP).
AH fornisce autenticazione e integrità del messaggio, ma non offre la confidenzialità ed è il protocollo IP 51.
ESP fornisce invece autenticazione, confidenzialità e controllo di integrità del messaggio ed è il protocollo IP 50.
Per questi motivi ESP è molto più usato di AH.
Attualmente esiste un solo protocollo per lo scambio delle chiavi, il protocollo IKE. IPsec è parte integrante di IPv6,
mentre è opzionale in IPv4. Di conseguenza, ci si aspetta che sarà maggiormente utilizzato quando IPv6 acquisterà
popolarità. Il protocollo è definito negli RFC 2401-2412. Dal 2004, sono in corso studi per l'aggiornamento dei
protocolli.
Dettagli tecnici
IPsec supporta due modalità di funzionamento:
• Transport mode
1. connessione host-to-host
2. usato dagli end-point non dai gateway
3. viene cifrato solo il payload dei datagrammi IP, non l'header
4. computazionalmente leggero
5. ogni host che vuole comunicare deve avere tutto il software necessario ad implementare IPsec
6. si aggiunge solo l'header IPsec; mittente e destinazione si vedono
• Tunnel mode
1. connessione gateway-to-gateway
2. viene cifrato tutto il pacchetto IP originale
3. utilizzato per realizzare le VPN
IPsec
59
4.
5.
6.
7.
computazionalmente oneroso
solo i gateway devono avere il software Ipsec
si hanno punti di centralizzazione quindi single point of failure
si ha un doppio incapsulamento, aggiungendo l'header del gateway e l'header IPsec; mittente e destinazione
non si vedono
Le due modalità sono supportate sia da AH che da ESP.
IPsec può essere utilizzato anche per connessioni tra gateway e host.
Security Association e Security Policy
Il concetto di Security Association (in breve SA) è alla base del funzionamento di IPsec. Una SA è un "contratto"
fra le due entità coinvolte nella comunicazione; in essa vengono stabiliti i meccanismi di protezione e le chiavi da
utilizzare durante il successivo trasferimento dei dati. Nell'ambito di IPsec, stabilire le security association è compito
del protocollo IKE, sebbene sia possibile anche impostarle manualmente; ovviamente la procedura manuale è
sconsigliata in quanto può introdurre errori che indeboliscono il tunnel.
Una peculiarità delle SA è che individuano una comunicazione unidirezionale; quindi durante la creazione della
connessione le entità coinvolte creano e gestiscono una SA per ognuno dei versi della comunicazione, quindi 2 SA
individuano un canale full-duplex. Al fine di semplificare la gestione delle SA, viene utilizzato un apposito database
detto SAD (Security Association Database), dove viene tenuta traccia delle SA attive. In particolare una SA è
costituita dai seguenti parametri:
•
•
•
•
Gli indirizzi IP dei peer coinvolti nella comunicazione;
Il protocollo che verrà utilizzato per il tunnel (AH o ESP);
le tecniche di cifratura utilizzate e le relative chiavi;
Un intero a 32 bit chiamato SPI, acronimo per Security Parameter Index.
Dall'esame dei parametri di una SA si deducono quindi tutte le informazioni necessarie per stabilire le modalità in
cui il traffico debba essere protetto; il passo successivo è definire quale traffico debba essere protetto: di questo si
occupa la Security Policy (in breve SP). Una SP è una regola che stabilisce che tipo di traffico deve essere
instradato nel tunnel e quindi essere coperto da IPsec; in modo analogo alle SA, le SP sono contenute in un SPD
(Security Policy Database). La security policy contiene:
• Indirizzo sorgente e indirizzo destinazione del pacchetto. Tale informazione è già contenuta nella SA e quindi può
sembrare ridondante. In realtà questa informazione ha senso quando viene utilizzato il Tunnel mode.
• Il protocollo e la relativa porta da instradare nel tunnel. Questa opzione dipende dall'implementazione del
protocollo e non è sempre contemplata; nel caso non sia disponibile, tutto il traffico prodotto viene veicolato nel
tunnel.
• Un identificativo della SA da utilizzare per processare i dati.
Una volta stabilita la security association e la security policy, può cominciare la comunicazione che sfrutterà il
protocollo AH o il protocollo ESP cui verrà passato il parametro SPI, che permetterà di risalire alle tecniche
crittografiche da utilizzare per la trasmissione.
IPsec
60
Protocolli di IPsec
IKE
Descrizione
IKE è un acronimo per Internet key exchange ed è il protocollo usato per stabilire una security association nella
suite di protocolli IPsec. Questo protocollo è definito in RFC 4306. È un protocollo di livello applicazione e utilizza
il protocollo UDP come protocollo di trasporto; la porta su cui viene stabilita la connessione è 500.
L'obiettivo di IKE è stabilire uno shared session secret, ossia una chiave condivisa corrispondente alla sessione da
instaurare e a tal fine utilizza l'algoritmo di Diffie-Hellman; dallo shared secret vengono successivamente derivate le
chiavi crittografiche che verranno utilizzate per la successiva comunicazione. Al fine di autenticare le entità
coinvolte nella comunicazione possono essere utilizzate tecniche a chiave simmetrica o, alternativamente, a chiave
asimmetrica; in quest'ultimo caso si fa ricorso a infrastrutture a chiave pubblica (PKI) e all'uso di certificati digitali.
Authentication Header (AH)
Descrizione
L''Authentication Header (abbreviato AH), è un protocollo che fa parte della suite IPsec. Il suo compito è quello
di fornire un controllo di integrità pacchetto per pacchetto, verifica dell'autenticità del mittente e protezione
contro i replay attack. AH non garantisce in alcun modo la confidenzialità del messaggio.
L'autenticità è garantita tramite funzioni di hash a chiave simmetrica, ossia tramite il meccanismo delle pre-shared
keys. Per poter comunicare, due entità devono condividere la medesima chiave; tale chiave viene combinata con il
messaggio originale e quindi viene calcolato il checksum tramite una funzione di hash crittografico(MD5 o SHA). Il
messaggio e il checksum vengono, infine, inviati al peer remoto. Il peer remoto riceve il messaggio; dato che questo
è in chiaro, lo può leggere, combinare con la chiave di cui è a conoscenza e calcolare il checksum. Se il checksum
corrisponde a quello inviato, il messaggio è autentico e viene accettato altrimenti viene scartato in quanto è stato
modificato in un modo non consentito dallo standard.
Il protocollo AH è progettato per proteggere l'intero pacchetto IP inviato; tuttavia bisogna considerare che alcuni
campi dell'header IP, come il TTL, variano durante la trasmissione; queste modifiche devono essere necessariamente
consentite, per cui prima di calcolare il checksum, i campi cui è permesso variare vengono posti a 0.
Formato del pacchetto
Di seguito viene illustrata la struttura del pacchetto AH (ogni casella rappresenta 1 byte).
0
1
2
3
Header successivo Dimensione Payload RISERVATO
Security Parameter Index (SPI)
Numero di Successione
Dati per l'autenticazione (lunghezza variable)
Header successivo
Indica che tipo di protocollo verrà dopo.
Dimensione Payload (8 bit)
La lunghezza dell'AH in word (1 word = 32 bit) meno 2. Per esempio , 96 sono i bit di default del campo
Authentication Data, più altri 96 bit per i campi di lunghezza fissa di AH fanno 6 word ( 96+96 = 192 bit ,
diviso per 32 = 6). Sottraendo 2 risulta quindi 4 il valore contenuto della dimensione del payload standard.
IPsec
61
RISERVATO
Spazio lasciato per sviluppi futuri. Tutti i bit di questo campo vengono impostati a 0.
Security Parameter Index
Questo campo identifica i parametri di sicurezza in combinazione con l'indirizzo IP. In genere è un numero
pseudo-casuale che identifica la security association cui fa parte questo pacchetto.
Numero di successione
Una successione di numeri monotonicamente crescenti. Per imperdire i replay attack, il numero di successione
quando raggiunge il valore massimo (2^{32}-1) non deve ritornare a 0, ma una nuova SA deve essere creata.
Dati per l'autenticazione
Contiene l'Integrity Check Value (ICV) è rappresenta l'HMAC calcolato dall'originatore del messaggio.
L'HMAC viene calcolato utilizzando i campi dell'header IP (con il TTL originario), i campi dell'header AH
tranne i dati dell'autenticazione (viene considerato a 0) e infine tutti i dati degli header di livello superiore,
compresi quelli applicativi, che non vengono modificati durante il trasporto.
Transport mode e Tunnel mode
AH supporta nativamente sia il transport mode che il tunnel mode. In transport mode vengono protetti solo i
protocolli di livello superiore a quello di rete (TCP, UDP, etc); in tunnel mode il pacchetto IP originale viene
incapsulato in un nuovo pacchetto IP, dopo essere stato elaborato da AH. Ne spieghiamo il funzionamento con
l'ausilio di alcuni disegni. Il metro di confronto è senza dubbio il pacchetto IP originale; in presenza di un
collegamento basato su IPsec il pacchetto viene, ovviamente, alterato.
Header IP Header TCP Dati
Pacchetto IP originale
A seconda della modalità di funzionamento di IPsec (tunnel mode o transport mode), il pacchetto originale viene
alterato in modo diverso.
Header IP Header
AH
Header TCP Dati
dati autenticati
AH in transport mode
Header IP esterno Header
AH
Header IP Header TCP Dati
dati autenticati
AH in tunnel mode
La linea azzurra indica le zone del pacchetto che sono autenticate. Dal punto di vista della protezione, in entrambi i
casi, i pacchetti vengono protetti completamente. Notiamo che nell'header IP, alcuni campi variano durante il transito
nella rete, ad esempio il TTL. Questi campi vengono posti a 0 prima di calcolare la funzione di hash, necessaria per
la protezione del pacchetto. Da quanto appena detto si evince subito che il protocollo AH è incompatibile con le
varie tecniche di NAT; difatti se vengono alterati i campi indirizzo nell'header IP (in entrambe le modalità), in
ricezione la checksum fallisce subito.
IPsec
62
Encapsulating Security Payload (ESP)
Descrizione
Encapsulating Security Payload, denotato con l'acronimo ESP, è un protocollo che fa parte della suite IPsec. Il suo
obiettivo è fornire autenticità, confidenzialità e controllo di integrità alla comunicazione. Contrariamente a quanto fa
AH, l'header IP non viene coperto dai controlli. Al pari di AH, però, supporta sia il tunnel mode che il transport
mode.
Formato del pacchetto
Di seguito viene riportato il formato del pacchetto ESP (ogni casella rappresenta 1 byte).
0
1
2
3
Security Parameters Index (SPI)
Sequence Number
Payload * (variable)
Padding (0-255 byte)
Pad Length Next Header
Authentication Data (variable)
Security Parameters Index (SPI)
Al pari di quanto avviene in AH, questo campo, in combinazione con l'indirizzo IP, individua la Security
Association cui appartiene il pacchetto.
Sequence Number
Una successione di numeri monotonicamente crescente, che identifica il pacchetto all'interno delle Security
Association e previene da replay attack.
Payload
I dati che devono essere trasferiti
Padding
È un campo di riempimento. È necessario in quanto alcuni codici di cifratura lavorano su blocchi di lunghezza
fissa. Serve a far crescere la dimensione dei dati fino a divenire multiplo del blocco che l'algoritmo in uso
riesce a gestire.
Pad Length
Rappresenta, in ottetti, la dimensione dei dati di padding aggiunti.
Next Header
Identifica il protocollo dei dati trasferiti
Authentication Data
Contiene i dati usati per autenticare il pacchetto.
Come si può vedere dalla struttura del pacchetto (ma sarà illustrato meglio in seguito), ESP "avvolge" i dati dei
protocolli di livello superiore, contrariamente a quanto fa AH che antepone un header.
IPsec
63
Tunnel mode e Transport mode
Essendo un protocollo per il trasferimento dati della suite IPsec, ESP supporta sia il Tunnel mode che il Transport
mode. A seconda della modalità tratta i dati in modo differente. Prima di descrivere l'incapsulamento dei dati
mostriamo il pacchetto IP originale, che transiterebbe sulla rete in assenza di IPsec
Header IP Header TCP Dati
Pacchetto IP originale
Header IP Header
ESP
Header TCP Dati Trailer
ESP
ESP
auth
Dati autenticati
ESP in Transport mode
Header IP Header
ESP
Header IP interno Header TCP Dati Trailer
ESP
ESP
auth
Dati autenticati
ESP in Tunnel mode
Le linee azzurre sottendono la parte di pacchetto che viene sottoposta a controllo di autenticità e integrità; le zone
verdi indicano le zone di pacchetto che vengono protette tramite algoritmi crittografici. Per quanto riguarda gli
algoritmi di cifratura possono essere utilizzati Data Encryption Standard (DES), 3DES, AES e Blowfish. Il controllo
di integrità e autenticità viene eseguito tramite HMAC (funzioni di hash); l'hash viene calcolato tramite una funzione
di hash (MD5 o SHA1), utilizzando una chiave condivisa; l'hash ottenuto viene allegato al messaggio e inviato. In
ricezione viene controllata l'integrità del messaggio. Dagli schemi visti prima si nota che l'indirizzo IP più esterno
non viene coperto dal controllo di integrità. Tale opzioni rende il protocollo ESP adatto ad essere utilizzato in alcuni
tipi di NAT, in particolare in quelli statici. Tuttavia esistono soluzioni ad-hoc per il funzionamento congiunto di
IPsec e NAT come il NAT Traversal.
NAT Traversal
Descrizione
NAT traversal (o più in breve NAT-T) è il nome di un protocollo facente parte della suite IPsec e standardizzato in
diversi RFC, di cui quello ufficiale è RFC 3947. L'obiettivo di questo protocollo è fornire la possibilità di stabilire un
tunnel IPsec anche quando uno dei due peer coinvolti subisce un'operazione di nat per raggiungere l'altra entità
coinvolta nella comunicazione.
Scenario
Il NAT è una tecnica molto utilizzata per il riuso degli indirizzi IP. Tuttavia gli host dietro un router (o un firewall)
che effettua operazioni di NAT non godono di connettività end-to-end. Sebbene esistano diversi tipi di NAT,
l'obiettivo generale è l'alterazione degli header del pacchetto. Questo comportamento è in netto contrasto con IPsec
che ha tra i suoi obiettivi il controllo dell'integrità del pacchetto. In particolare il NAT è incompatibile con AH sia
in tunnel mode che in transport mode, in quanto AH verifica l'integrità di tutto il pacchetto IP. ESP, invece, non
copre l'header IP con controlli di sorta né in Tunnel mode né in Transport mode, per cui risulta adatto nel caso in cui
il NAT eseguito sia di tipo SNAT; in altre parole, la modifica apportata dal router deve coinvolgere solamente
l'header IP e non anche la porta del livello superiore.
IPsec
64
Il NAT crea problemi anche con IKE e soprattutto con IKE in main mode. Il main mode usato congiuntamente al
metodo delle preshared-keys richiede l'autenticazione degli host coinvolti nella comunicazione e tale autenticazione
prevede un controllo sugli indirizzi IP; per cui l'alterazione dell'indirizzo da parte di un'apparecchiatura di NAT
provoca il fallimento dell'autenticazione.
In genere, nei dispositivi preposti alla gestione dei tunnel IPsec e nei client VPN, il NAT-T non è abilitato di default
ma deve essere impostato a mano; tuttavia il suo utilizzo rimane opzionale: difatti durante la creazione della security
association, i peer determinano se uno dei due subisce operazioni di NAT e solo in questo caso viene usato il
NAT-T; questa operazione viene fatta durante la prima fase della negoziazione IKE. In prima battuta, i peer
verificano che entrambi siano in grado di supportare in NAT-T; questa verifica è eseguita nella primissima fase del
protocollo IKE, per mezzo di un pacchetto con un campo Vendor-ID, che contiene un valore hash noto.
Una volta stabilito che entrambi supportano il NAT-T, vengono inviate delle frame "NAT-Discovery" (NAT-D), in
modo da verificare chi dei due subisca il NAT, o al limite se lo subiscano entrambi.
Una volta stabilito chi subisce il NAT, la comunicazione si sposta su una nuova coppia di porte UDP e l'entità
"nat-tata" comincia a inviare delle frame keepalive; queste frame servono a mantenere fisse le porte di
comunicazione sul router e ad impedirgli di riassegnarle ad una nuova comunicazione.
Descriviamo come viene incapsulato il pacchetto originale ESP.
Header IP Header ESP Header IP interno Header TCP Dati Trailer ESP ESP auth
ESP in Tunnel mode
Header IP
Header UDP
Header NAT-T
Header ESP
Header IP interno
Header TCP
Dati
Trailer ESP
ESP auth
ESP in Tunnel mode con incapsulamento UDP per NAT-T
I campi segnati in verde scuro sono quelli relativi al NAT-T; questi campi vengono inseriti subito dopo l'header IP
esterno, che non viene alterato, così come non vengono alterati i campi successivi. In ricezione viene fatta
l'operazione inversa.
Elenco degli RFC relativi ad IPsec
RFC 4301
Security Architecture for the Internet Protocol
RFC 2402
Authentication Header
RFC 2406
Encapsulating Security Payload
RFC 2407
IPsec Domain of Interpretation for ISAKMP (IPsec DoI)
RFC 2408
Internet Security Association and Key Management Protocol (ISAKMP)
RFC 2409
Internet Key Exchange (IKE)
RFC 2410
The NULL Encryption Algorithm and Its Use With IPsec
RFC 2411
IPsec
65
IP Security Document Roadmap
RFC 2412
The OAKLEY Key Determination Protocol
RFC 3947
Negotiation of NAT-Traversal in the IKE
Voci correlate
•
•
•
•
•
Sicurezza informatica
HTTPS
SSL
TLS
SSH
Collegamenti esterni
• http://www.ipsec-howto.org/italian/x151.html
• IPsec e TLS a confronto: funzioni, prestazioni ed estensioni [1]
• How to pass IPSec traffic through ISA Server [2]
Note
[1] http:/ / www. linux. it/ ~davide/ doc/ tesi_html/ index. html
[2] http:/ / www. isaserver. org/ articles/ IPSec_Passthrough. html
Livello datalink
Il livello datalink è il secondo livello dei protocolli del modello ISO/OSI per l'interconnessione di sistemi aperti.
Questo livello in trasmissione riceve pacchetti dal livello di rete e forma i frame che vengono passati al sottostante
livello fisico con l'obiettivo di permettere il trasferimento affidabile dei dati attraverso il sottostante canale.
Il livello datalink deve quindi svolgere diverse funzioni specifiche:
• in trasmissione raggruppare i bit provenienti dallo strato superiore e destinati al livello fisico in pacchetti chiamati
frame (framing);
• in ricezione controllare e gestire gli errori di trasmissione (controllo di errore);
• regolare il flusso della trasmissione fra sorgente e destinatario (controllo di flusso).
Tutto ciò consente di far apparire in ricezione, al livello superiore, il mezzo fisico come una linea di trasmissione
esente da errori.[1][2]
Trasmissione sincrona e asincrona
La trasmissione seriale può avvenire in modo sincrono o asincrono.
Nella trasmissione asincrona ogni carattere trasmesso viene preceduto e seguito da segnali che indicano appunto
l'inizio e la fine del carattere; tali segnali vengono detti segnali di start e stop. La trasmissione asincrona perciò viene
detta anche trasmissione start-stop. Con tale metodo ogni carattere può essere considerato indipendente dagli altri,
l'intervallo di tempo tra l'invio di due caratteri è imprecisato.
Nella trasmissione sincrona i caratteri da inviare vengono raggruppati in messaggi (frame). Ogni frame viene fatto
precedere da caratteri di sincronizzazione che servono a far sì che la stazione ricevente si sincronizzi sulla velocità di
Livello datalink
trasmissione della stazione che invia il messaggio. La trasmissione sincrona è più veloce perché i tempi morti di
trasmissione vengono ridotti, ma un errore anche in un singolo bit può danneggiare l'intero messaggio inviato. I
protocolli di trasmissione sincrona si suddividono in BCP Byte Control Protocol) o orientati al byte, in cui viene
mantenuta la suddivisione in caratteri del messaggio da trasmettere, e BOP (Bit Oriented Protocol) o orientati al bit,
in cui i messaggi sono visti come una successione di bit (in questo modo non si è legati alla codifica ASCII a 8 bit).
Un'operazione importante nella trasmissione sincrona è il framing, cioè la suddivisione in frame delle informazioni
da trasmettere.
Framing
Al fine di fornire servizi al livello di rete, il livello data link deve usufruire dei servizi fornitigli dal livello fisico.
L'approccio consueto del livello data link è quello di dividere il flusso dei bit in pacchetti (adattatti appunto ad una
trasmissione su una rete a pacchetto), e calcolarne la Checksum. Vari metodi vengono utilizzati per la suddivisione
dei bit in pacchetti o frame:
• Conteggio dei caratteri.
• Caratteri di inizio e fine.
• Indicatori (flag) di inizio e fine.
Il metodo del conteggio di caratteri (ottenuto specificando nel campo d’intestazione del pacchetto il numero di
caratteri del frame) è raramente utilizzabile poiché, se il campo che contiene il numero di caratteri si rovina (altera)
durante la trasmissione, non si può più individuare dove comincia il frame successivo; vengono quindi utilizzate le
altre tecniche.
Nella trasmissione orientata al byte (il frame mantiene la suddivisione in byte) il frame viene preceduto dalla
sequenza di caratteri ASCII DLE STX (Data Link Escape Start of TeXt) e finisce con la sequenza DLE ETX (Data
Link Escape End of TeXt). Se un frame si rovina e la destinazione perde la sincronizzazione basta trovare il
successivo DLE STX o DLE ETX. Il carattere DLE però può comparire casualmente dentro al frame quando
vengono trasmessi dati binari come programmi oggetto o numeri in virgola mobile; perché questi caratteri non
interferiscano viene aggiunto un ulteriore DLE (che viene rimosso a destinazione prima di passare al frame al livello
di rete) in modo che solo i DLE singoli vengano interpretati come delimitatori; questa tecnica si chiama character
stuffing.
Nella trasmissione orientata al bit (il frame può contenere un numero qualsiasi di byte) ogni frame inizia e finisce
con la sequenza 01111110 chiamata flag: questa sequenza può comparire casualmente nei dati, perciò in
trasmissione dopo cinque 1 consecutivi viene sempre inserito uno 0 nel flusso di bit, indipendentemente dal fatto che
il bit successivo sia 1 o 0, mentre in ricezione bisogna provvedere ad eliminare i bit inseriti, rimuovendo sempre uno
0 dopo cinque 1; questa tecnica è chiamata bit stuffing.
Controllo di errore
Come detto, la stazione mittente del livello data-link riceve i dati dal livello superiore e li suddivide in frame prima
di affidarli al livello fisico per la trasmissione su canale, aggiungendo ad esso un codice per il controllo degli errori
(integrità dati) di trasmissione in ricezione (checksum).
Quando un pacchetto arriva a destinazione, la checksum viene ricalcolata dallo stesso livello data-link del sistema
ricevente. Se il risultato è diverso da quello contenuto nel pacchetto, il livello data-link riconosce che è stato
commesso un errore e prende adeguati provvedimenti (come ad esempio scartare il pacchetto e spedire un messaggio
di errore in risposta al mittente).
In generale si hanno due tipi di codici di controllo, i codici rilevatori che permettono soltanto di capire che il frame
non è corretto ed eventualmente richiedere la ritrasmissione del pacchetto (ARQ Automatic Repeat-reQuest) e i
codici correttori che permettono non solo di capire se si è verificato un errore, ma anche di individuare la posizione
66
Livello datalink
dell'errore e di conseguenza correggerlo (FEC Forward Error Correction). Questi ultimi codici richiedono molti più
bit dei codici rilevatori e quindi sprecano ampiezza di banda; di solito perciò vengono usati i codici a sola
rilevazione.
In caso di errore, se il servizio è inaffidabile il frame può essere semplicemente scartato; se la linea deve essere
affidabile bisogna che tutti i frame arrivino correttamente; se si usa un codice rilevatore il ricevente deve richiedere
la ritrasmissione dei frame errati.
La scelta tra codici rilevatori e correttori può dipendere anche dalla velocità delle linee (per linee a bassa velocità,
aspettare la ritrasmissione potrebbe richiedere troppo tempo) o affidabilità (se il tasso di errore sulla linea è molto
basso non vale la pena sprecare molta banda per un codice correttore) o dal tipo di servizio richiesto (real-time o
meno).
Il modo consueto per assicurare una consegna affidabile è quello di fornire al mittente un riscontro di quello che sta
accadendo all'altro capo della linea. Tipicamente il protocollo richiede che il ricevente rispedisca alcuni speciali
pacchetti di controllo con valore positivo o negativo a seconda dei pacchetti ricevuti. Se il mittente riceve un
riscontro positivo su di un pacchetto spedito, sa che esso è arrivato correttamente. Se invece ottiene un riscontro
negativo significa che qualcosa è andata male e che occorre ritrasmettere il pacchetto.
Una complicazione aggiuntiva potrebbe derivare dalla possibilità che i problemi hardware causino la sparizione
totale del pacchetto. Se un pacchetto non arriva a destinazione, il mittente non aspetterà all'infinito, infatti viene
utilizzato un timer, che viene avviato quando i dati vengono trasmessi, se il timer supera la soglia limite
(programmata) senza ricevere l'ACK (Acknowledgment o conferma), rimanderà di nuovo i pacchetti. Tuttavia, se il
pacchetto o il messaggio di riscontro vengono persi, il timer scade (time-out), e la stazione mittente, non ricevendo
conferma, è costretta a reinviare i dati, ma a questo punto il mittente potrebbe ricevere due o più volte lo stesso
pacchetto. Per risolvere questo problema, i pacchetti inviati vengono numerati, così il sistema ricevente, nel caso in
cui riceva un numero di pacchetto uguale al precedente, cioè una copia del pacchetto, lo scarta. Questa tecnica è nota
come Stop and wait; le altre tecniche maggiormente utilizzate per il controllo degli errori sono il Codice di Hamming
e il CRC (Controllo a Ridondanza Ciclica). Di fatto però funzionalità di controllo dell'errore sui singoli pacchetti
vengono espletate non solo a livello datalink, ma in ogni altro strato del protocollo per garantire la correttezza dei
dati di servizio (header) dei protocolli destinati ai rispettivi strati.
Controllo di flusso
Un altro importante problema di progettazione che si ritrova nel livello di data link è quello di gestire una linea
condivisa quando più nodi vogliono inviare messaggi nello stesso tempo e inoltre deve decidere cosa fare di un
mittente che sistematicamente tende a trasmettere pacchetti più velocemente di quanto il ricevente possa accettarli.
Questa situazione può facilmente essere riscontrata quando il mittente è dislocato su una macchina veloce e il
ricevente su una macchina lenta. Il mittente continua a spedire pacchetti ad alta velocità, fino a quando il ricevente
non è completamente sopraffatto. Anche se la trasmissione è esente da errori, a un certo punto il ricevente non sarà
in grado di gestire i pacchetti in arrivo e inizierà a perderli (buffer overflow).
La tipica soluzione è quella di introdurre un controllo di flusso per obbligare il mittente a rispettare la velocità del
ricevente nello spedire i pacchetti. Questa imposizione solitamente richiede un certo tipo di meccanismo di riscontro
(feedback) in modo che il mittente possa essere avvisato se il ricevente è in grado di ricevere o meno.
Nel caso in cui invece più nodi vogliono inviare contemporaneamente dei messaggi, si tende ad introdurre un
controllo centralizzato, creando un singolo nodo di controllo, responsabile di determinare chi ottiene la priorità
all'interno della rete; il nodo successivo quindi, controllerà quando la rete non sarà più occupata, così da poter inviare
il messaggio appena questa diventerà libera. Può accadere però, che più nodi monitorizzano la rete e che appena
questa sia libera, inviano immediatamente i messaggi, in questo caso si avranno dei problemi di collisione; per
ovviare a questo problema, i nodi che monitorano la rete saranno regolati da un protocollo di accesso multiplo
attendendo ad esempio un tempo casuale prima di inviare i messaggi, poiché è improbabile che i nodi scelgano lo
67
Livello datalink
stesso istante per inviare i dati.
Protocolli
Nello stack IP, in alcuni casi, il livello datalink consiste nell'utilizzo di una rete realizzata con un altro protocollo per
il trasporto di pacchetti IP. Questo avviene ad esempio con X.25, Frame Relay, Asynchronous Transfer Mode. Sono
protocolli del livello datalink Ethernet (per le LAN) e PPP, HDLC e ADCCP per le connessioni punto a punto (cioè
tra due stazioni collegate tra loro fisicamente).
Può essere o non essere affidabile: molti protocolli di data link non utilizzano conferme e alcuni potrebbero
addirittura non controllare se sono stati commessi errori di trasmissione. In questo caso devono essere i livelli
superiori ad effettuare il controllo di flusso, il controllo degli errori e gestire le conferme (e relative ritrasmissioni).
In alcune reti, come le LAN IEEE 802, questo livello è diviso nei sottolivelli MAC e LLC. Quest'ultimo è comune a
tutti i livelli MAC, come token ring e IEEE 802.11 ma anche a livelli MAC che non fanno parte dello standard 802,
come FDDI.
Sottolivello LLC
Il sottolivello superiore è Logical link control (LLC), e può fornire servizi di controllo di flusso, conferma,
rilevazione (o correzione) degli errori. I protocolli PPP e HDLC fanno parte di questo sottolivello.
I protocolli di sottolivello LLC che forniscono il servizio di conferma di o garanzia di ricezione dei dati devono
prevedere messaggi di conferma avvenuta ricezione (acknowledge, o ACK). Il trasmittente può attendere il riscontro
di ciascun messaggio prima di trasmettere il successivo, oppure può continuare a trasmettere fino al raggiungimento
di un numero massimo di messaggi non ancora confermati dal ricevente, nei cosiddetti protocolli finestrati.
Nei protocolli con finestra ciascun pacchetto trasmesso è identificato con un numero progressivo all'interno della
finestra, detto numero di sequenza (sequence number); i messaggi di conferma devono riportare il numero di
sequenza del pacchetto che riscontrano.
I messaggi di conferma possono essere cumulativi ("ricevuti i pacchetti fino a N"), o richiedere la ritrasmisione
cumulativa ("ritrasmettere i pacchetti fino a N") o selettiva dei soli pacchetti non ricevuti correttamente. In alcuni
casi il riscontro dei messaggi ricevuti utilizza un messaggio dedicato, in altri casi il riscontro viene inserito in campi
specifici dei messaggi trasmessi in direzione opposta (piggyback) diminuendo le latenze di ritrasmissione.
Sottolivello MAC
Il sottolivello inferiore è Media Access Control o Medium Access Control. Il suo scopo è quello di disciplinare
l'accesso multiplo di molteplici nodi ad un canale di comunicazione condiviso evitando o gestendo l'occorrenza di
collisioni. Una collisione si verifica quando due o più nodi trasmettono simultaneamente dati sul canale condiviso.
Ciò comporta l'inevitabile perdita dei dati trasmessi con conseguente spreco di banda. Esistono molteplici algoritmi e
protocolli standard per il controllo dell'accesso multiplo. Ad esempio, il MAC IEEE 802.3 adotta l'algoritmo
CSMA/CD mentre il MAC IEEE 802.11 si basa sull'algoritmo CSMA/CA. Il primo è comunemente adottato in LAN
cablate il secondo in WLAN. Due sono le principali tipologie di algoritmi di accesso multiplo: casuale e ordinato.
Nell'accesso multiplo casuale è possibile che si verifichino delle collisioni ma vengono implementati degli opportuni
meccanismi per ridurne la probabilità di occorrenza e per ritrasmettere le trame collise. Nell'accesso ordinato, invece,
l'evenienza di una collisione è del tutto impossibile poiché i nodi seguono un preciso ordine di accesso al canale
(stabilito nella fase di inizializzazione della rete) che li rende utilizzatori esclusivi del mezzo trasmissivo (a meno di
guasti o malfunzionamenti). A livello MAC, inoltre, si definisce il formato della trama, che tipicamente conterrà i
campi di inizio/fine, i campi di indirizzo MAC mittente/destinatario, il pacchetto incapsulato di livello LLC, il codice
per la rilevazione degli errori (FEC), ed opzionalmente dei byte di padding per garantire che la dimensione della
trama non scenda al di sotto di una soglia minima.
68
Livello datalink
Interfacce
Il livello di data link è spesso implementato come un driver della scheda di rete. Il sistema operativo avrà una certa
interfaccia software tra questo livello e quello superiore (di rete). Questa interfaccia non è un livello, ma più uno
standard per la comunicazione tra livelli. Alcuni esempi:
• ODI
• NDIS
• SANA II - Standard Amiga Networking Architecture, versione 2
Note
[1] (EN) Data Link Layer Definition (http:/ / www. linfo. org/ data_link_layer. html). linfo.org, 16-10-2005. URL consultato il 13-5-2012.
[2] (EN) Bradley Mitchell. Visual Networking Overview - The OSI Model - Data Link Layer (http:/ / compnetworking. about. com/ od/
basicnetworkingconcepts/ l/ blbasics_osi2. htm). about.com. URL consultato il 13-5-2012.
Bibliografia
A. Tanenbaum, Reti di Computer. Fabrizia Scorzoni, Reti e protocolli.
Voci correlate
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
Management di rete
Protocollo di rete
Organizzazione Internazionale per le Standardizzazioni
ISO/OSI
Ethernet
WiFi
Point-to-Point Protocol
Token ring
ARP
ATM
FDDI
Serial Line Internet Protocol (SLIP)
ARCnet
Cisco Discovery Protocol (CDP)
Controller Area Network (CAN)
Econet
Frame Relay
High-Level Data Link Control (HDLC)
IEEE 802.2 (comprende le funzioni LLC per tutti i livelli MAC IEEE 802)
IEEE 802.11 wireless LAN
LocalTalk
Multiprotocol Label Switching (MPLS)
StarLan
Comunicazioni seriali.
69
Secure shell
Secure shell
In informatica e telecomunicazioni SSH (Secure SHell, shell sicura) è un protocollo di rete che permette di stabilire
una sessione remota cifrata tramite interfaccia a riga di comando con un altro host di una rete informatica. È il
protocollo che ha sostituito l'analogo ma insicuro Telnet.
Descrizione
Il client SSH ha una interfaccia a riga di comando simile a quella di telnet e rlogin, ma l'intera comunicazione
(ovvero sia l'autenticazione (mutua) che la sessione di lavoro) avviene in maniera cifrata. Per questo motivo, SSH è
diventato uno standard di fatto per l'amministrazione remota di sistemi unix e di dispositivi di rete, rendendo
obsoleto il protocollo telnet, giudicato troppo pericoloso per la sua mancanza di protezione contro le intercettazioni.
Il client ed il server SSH sono installati o installabili su molte versioni di UNIX, GNU/Linux, Mac OS X e Microsoft
Windows. Inoltre è disponibile come strumento di amministrazione su alcuni apparati di rete
La sintassi su sistemi UNIX-like è la seguente:
$ ssh [opzioni] nomeutente@host [comando]
dove con "$" si intende il prompt della shell utilizzata
La prima versione dell'SSH era completamente Open Source, mentre la seconda è diventata commerciale; esiste
comunque una versione libera detta OPEN SSH che si basa sulla prima versione, ma che fornisce supporto alla
seconda versione.
Autenticazione
SSH prevede un'autenticazione mutua sia per il client che per il server.
Autenticazione del client
Esistono principalmente due metodi di autenticazione per controllare l'accesso ad un server ssh:
Username/Password
L'utente fornisce un nome utente ed una password, che vengono validati dal server. Questo scambio avviene
all'interno di un canale cifrato, per cui non è a rischio di intercettazione.
Procedura:
1.
2.
3.
4.
A ⇒ B: SSH_MSG_USERAUTH_REQUEST, pappy, ssh-userauth, keyboard-interactive
B ⇒ A: SSH_MSG_USERAUTH_INFO_REQUEST, pappy, password-authentication, 1, "Enter Password"
A ⇒ B: SSH_MSG_USERAUTH_INFO_RESPONSE, 1, "love"
B ⇒ A: SSH_MSG_USERAUTH_SUCCESS.
Per prevenire attacchi brute force si può utilizzare un tool DenyHosts o Fail2ban.
70
Secure shell
Chiave pubblica
Questo metodo di autenticazione è basato sulla crittografia asimmetrica. Per utilizzarlo l'utente genera una coppia di
chiavi. La chiave pubblica è copiata sul server, tipicamente in un apposito file nella home directory dell'utente; la
chiave privata deve essere conservata dall'utente, ed è bene che sia protetta con una parola chiave (passphrase).
Nella fase di accesso, il client ssh prova al server di essere in possesso della chiave privata, e in caso di successo
viene consentito l'accesso. In questo modo, all'utente non è richiesto di fornire la propria password ad ogni
connessione.
Autenticazione del Server
L'autenticazione del server serve ad evitare che un utente maligno "impersoni" il server, facendosi fornire le
credenziali dell'utente (attacco man in the middle). A questo scopo, per ciascun server viene generata una coppia di
chiavi asimmetriche. La chiave privata rimane sul server. La chiave pubblica deve essere installata sui client.
Quando un client si collega ad un server di cui conosce la chiave pubblica, verifica che il server sia ancora in
possesso della chiave privata. Se questa verifica fallisce, la connessione viene abbattuta, evitando di fornire
credenziali al server.
Nella pratica, quando ci si collega ad un server per la prima volta, il client chiede se si vuole accettare la chiave
pubblica di questo server, e se l'utente risponde positivamente memorizza questa chiave e prosegue nella
connessione. Alle connessioni successive con lo stesso server, il client ne verifica l'autenticità, e in caso la chiave
privata non corrisponda impedisce di proseguire la connessione.
Port forwarding
La sicurezza della comunicazione tramite SSH è assicurata grazie alla realizzazione di tunnel criptati che,
trasportando sessioni TCP arbitrarie all'interno della connessione criptata, permettono di proteggere da
intercettazione protocolli non sicuri, o di aggirare limitazioni di routing.
Questa funzionalità è detta port forwarding, e permette di aprire un socket TCP sul client SSH (local port
forwarding) o sul server (remote port forwarding). Le connessioni ricevute su questa porta vengono inoltrate
dall'altro capo della connessione SSH, verso un host e una porta specificata.
Ad esempio, con questo comando ci si collega ad host1, inoltrando la porta 10022 della macchina in cui
lanciamo il client ssh alla porta 22 di host2 attraverso un canale sicuro tra client e host1:
ssh host1 -L 10022:host2:22
Mentre questa connessione è attiva, collegandosi alla porta 10022 del client si viene rediretti verso la porta
22 di host2.
X forwarding
Il port forwarding è utile anche per trasportare applicazioni X Window attraverso una connessione SSH. SSH
imposta anche automaticamente le opportune variabili d'ambiente, in modo che le applicazioni X lanciate da un
terminale remoto vengano visualizzate sul display da cui è stata avviata la connessione.
L'X forwarding dal lato client deve essere abilitato passando l'opzione "-X" mentre dal lato server va modificato il
file di configurazione /etc/ssh/sshd_config abilitando la direttiva X11Forwarding (ricordatevi di riavviare il
server una volta apportata la modifica al file di configurazione).
71
Secure shell
Esempio di uso del port forwarding
Il port forwarding è utile ad esempio per fare assistenza remota a macchine prive di un sistema di gestione remota
sicuro. È possibile creare un tunnel sicuro tra una porta del client e una porta del server remoto o di qualsiasi terza
macchina dietro al sever remoto, a patto che la macchina server abbia abilitato il forwarding. Questo è normalmente
possibile senza installare nessun pacchetto aggiuntivo.
Ad esempio, nel seguente scenario
CLIENT --[rete sicura]--> ssh server --[rete insicura]--> TERZA MACCHINA
Se vogliamo utilizzare un desktop remoto sulla terza macchina basta che ci connettiamo al server ssh includendo un
tunnel tra una porta locale della macchina dove lavoriamo e la porta 3389 della TERZA MACCHINA. Dopo di che
basterà avviare il client RDP e connettersi a localhost:(porta scelta).
Il client ssh locale stabilirà una connessione criptata con il server, creerà un tunnel all'interno di questa connessione
criptata, ed invierà la connessione RDP su questo tunnel. Il server a sua volta stabilirà una normale sessione TCP con
la terza macchina sulla porta richiesta.
Come risultato, il client RDP verrà messo in comunicazione con la terza macchina. La connessione tra ssh server e
terza macchina non sarà criptata, per cui è opportuno che la comunicazione tra queste due macchine non sia a rischio
di intercettazione. La terza macchina vedrà la connessione TCP provenire dal server ssh invece che dal client.
Voci correlate
•
•
•
•
•
•
OpenSSH
PuTTY
WinSCP
Transport Layer Security
Secure copy
SFTP
Collegamenti esterni
•
•
•
•
•
•
•
•
Configurazione dei Virtual Hosts con Apache2 [1]
Esempio di tunnel SSh usando Putty [2]
Uso e configurazione di SSH [3]
(EN) Sito di Openssh [4]
(EN) Pagina di manuale di Openssh [5] via OpenBSD
(EN) HOWTO: Five steps to a more secure SSH [6]
(EN) DenyHosts: script intended to help thwart SSH server attacks [7]
(EN) SSH via HTTP [8]
72
Secure shell
Note
[1]
[2]
[3]
[4]
[5]
[6]
[7]
[8]
http:/ / www. oscene. net/ site/ sysadmin/ web-server/ howto-configurazione-dei-virtual-hosts-con-apache2
http:/ / www. compago. it/ index. php/ it/ manuali/ 39-windows/ 169-tunnel-ssh-con-putty
http:/ / www. cert. garr. it/ documenti/ ssh/
http:/ / www. openssh. org/
http:/ / www. openbsd. org/ cgi-bin/ man. cgi?query=ssh
http:/ / thinkhole. org/ wp/ 2006/ 10/ 30/ five-steps-to-a-more-secure-ssh
http:/ / denyhosts. sourceforge. net/
http:/ / webssh. cz. cc/
73
Fonti e autori delle voci
Fonti e autori delle voci
Suite di protocolli Internet Fonte:: http://it.wikipedia.org/w/index.php?oldid=49493820 Autori:: Abisys, Amux, Ary29, AttoRenato, Braccobaldo92, Castagna, Daniele Forsi, Davide,
Domenico De Felice, Giovannigobbin, Guarracino, Hce, Ilario, KeyboardSpellbounder, Lukius, M1CH3L3, Misakiforever, Moongateclimber, NicFer, Nitya Dharma, Ricercatorew76, Tank00,
Vdfn, Vulkano, 50 Modifiche anonime
Livello applicazioni Fonte:: http://it.wikipedia.org/w/index.php?oldid=49560578 Autori:: Abisys, Ary29, Avesan, Buggia, Daniele Forsi, FrAnCiS, Hce, Mar.pollo, Neustradamus, Pietrodn,
Rotpunkt, Taueres, 11 Modifiche anonime
HTTPS Fonte:: http://it.wikipedia.org/w/index.php?oldid=48770924 Autori:: Abisys, Antonio Felaco, Archiegoodwinit, Avesan, Azrael555, Bla, Davide21, DnaX, Frack, Frieda, Gvf, Hellis,
Hydra2005, IlMatte, Joana, LapoLuchini, Luifiora, Lukius, Marcuscalabresus, Orso della campagna, Panairjdde, Phantomas, Quatar, Roneda, Salvatore Ingala, Salvorapi, Samuele, Sbisolo,
Sedlex, Spinot, Template namespace initialisation script, Toobaz, Vulkano, Ylebru, 40 Modifiche anonime
Hypertext Transfer Protocol Fonte:: http://it.wikipedia.org/w/index.php?oldid=49640948 Autori:: %Pier%, .anaconda, .mau., 5Y, A7N8X, Abisys, Al Pereira, Alfio, Anotherhacktivist, Ary29,
Avesan, Azrael555, Brownout, Buggia, Caulfield, Davide21, Derfel74, Elbloggers, Eumolpo, Fabexplosive, Filemon, FollowTheMedia, Frieda, Giacomo Ritucci, Gioppe, Guidomac, Gvf,
Harlock81, Hashar, Hellis, Iron Bishop, Iskander, L736E, Lorenzor, M.Costantino, M7, Madaki, Mamo139, Marius, MaxDel, Maxferrario, Mfprimo, Miklee, Moongateclimber, Napy84, Ninja,
Phantomas, Rojelio, Rollopack, Salvatore Ingala, Sbisolo, Sentruper, Simone, Suisui, Taueres, Ticket 2010081310004741, TierrayLibertad, Toobaz, Twice25, Unriccio, Vulkano, Wfra, 82
Modifiche anonime
Simple Mail Transfer Protocol Fonte:: http://it.wikipedia.org/w/index.php?oldid=49175275 Autori:: .anaconda, Abisys, Airon90, Ale2006, Alef.ala, Alfio, Arkanoid80, Avesan, Barbaking,
Fbartolom, Frieda, Govoch, Guam, Hashar, Hellis, Iron Bishop, Luckyz, M7, Marcuscalabresus, Mauro742, MikyT, Moongateclimber, Rl89, Sbisolo, Sergio.ballestrero, Simo ubuntu, Sythos,
Toobaz, Unriccio, Vanadio, Vulkano, Zhw, 42 Modifiche anonime
Post Office Protocol Fonte:: http://it.wikipedia.org/w/index.php?oldid=48933194 Autori:: .anaconda, Abisys, Airon90, Alfio, Amux, Avesan, Brownout, Duvet, Fatzeus, Frieda, Govoch, Hawk,
Iron Bishop, Laurentius, Lurkos, Marcuscalabresus, Moongateclimber, Simo ubuntu, Snowdog, Vanadio, Vulkano, 24 Modifiche anonime
Internet Message Access Protocol Fonte:: http://it.wikipedia.org/w/index.php?oldid=48634303 Autori:: Abisys, Airon90, Amarvudol, Avesan, Azrael555, B3t, Dommac, Fedcas, Frieda,
Guidomac, Hashar, Hawk, Iron Bishop, Lurkos, Moongateclimber, Salvatore Ingala, Simone, Snowdog, Suisui, Timendum, Vulkano, 17 Modifiche anonime
Dynamic Host Configuration Protocol Fonte:: http://it.wikipedia.org/w/index.php?oldid=47800970 Autori:: %Pier%, 5Y, Abisys, Alec, Ary29, Avesan, Bla, ChemicalBit, Civvì, Crimer,
Dolcerino, Edonan, Enzotib, Frieda, Hashar, Hce, Homer, Ilario, Ippatsu, M7, Moongateclimber, Naryalin, No2, Nuno Tavares, Phantomas, Pracchia-78, Saint-Just, Shivanarayana, Simone,
ViciDig, Vulkano, 73 Modifiche anonime
Simple Network Management Protocol Fonte:: http://it.wikipedia.org/w/index.php?oldid=48599609 Autori:: %Pier%, Abisys, AttoRenato, Avesan, Daniele Gallesio, DnaX, Hce, Hellis,
Lenore, Leofiore, Marcobombe, Moongateclimber, No2, Phantomas, Sbisolo, Simo ubuntu, Taueres, Toobaz, Vulkano, 24 Modifiche anonime
File Transfer Protocol Fonte:: http://it.wikipedia.org/w/index.php?oldid=49426413 Autori:: 27182, Abisys, Alfio, Anglachel, AnjaManix, Arkanoid80, Ary29, Avesan, Bigboss00, Billiejoex,
Blakwolf, Brownout, Cyberuly, Daemon nio, Dega180, Dirigenteitis, DnaX, Eippol, Eumolpo, Frieda, Gabrielemargon, Gauss, Giomol, Guidomac, Harlock81, Hellis, Iron Bishop, Lorenzo
Zoffoli, Marcel Bergeret, Marius, Mavericksaur, Maxcip, Mirkop88, Moongateclimber, Moroboshi, Ninja, No2, Orso della campagna, Phantomas, Pracchia-78, Sassospicco, Sbisolo, Shardanaa,
Snowdog, Stemby, Template namespace initialisation script, Ticket 2010081310004741, Tomi, Twice25, Vulkano, Wfra, 36 Modifiche anonime
Domain Name System Fonte:: http://it.wikipedia.org/w/index.php?oldid=49063093 Autori:: %Pier%, .anaconda, .mau., Abisys, Albert2810, Alfio, Amarvudol, Ancelli, Angelo Mascaro,
Antonellosinisi1986, Ary29, Ask21, Avesan, Balabiot, Beta16, Brownout, Calabash, ChemicalBit, Dav82, Domenico Romeo, Dragotti SLA, Enricomilano, Fede Reghe, Frack, Frieda, Gastipi,
GiaGar, Gig, Gionnico, Giovannigobbin, Govoch, Gvf, HT, Hce, Hellis, Hill, Igualeonte, Iron Bishop, Jredmond, Kaeso, LoStrangolatore, Lp, LukeWiller, M7, Marcok, Maui, Michelep23,
Mira1-System, Moongateclimber, Nitya Dharma, No2, P tasso, Phantomas, Piermarini, Quoniam, Rojelio, Rollopack, Salparadiso, Samadhi56, Sbisolo, Scienzape, Senpai, Sentruper,
Shivanarayana, Simone, Sinigagl, Sir marek, Smallpox, Snowdog, Speedymax, Spikeyrock, Theferro, Tibe, Utopio, Valepert, Viscontino, Vulkano, XCash, Yukie, Zandegù, 127 Modifiche
anonime
Telnet Fonte:: http://it.wikipedia.org/w/index.php?oldid=45621586 Autori:: %Pier%, .jhc., Abisys, Alez, Ary29, Avesan, Cls-classic, Dfmarco, FrAnCiS, Giancy, Hellis, Jacopo, Leoman3000,
M7, MikyT, Moongateclimber, Nevermindfc, Ninja, Qualc1, Rquaglia, Salvatore Ingala, Sandro kensan, Sentruper, Simo ubuntu, Vulkano, 28 Modifiche anonime
rsync Fonte:: http://it.wikipedia.org/w/index.php?oldid=45888189 Autori:: .anaconda, Ale-sandro, Antonell, Argento, Ary29, AttoRenato, Avesan, Basilero, Bla, Came88, Dwdp, F l a n k e r,
Fale, Gac, Gervasi, Jacopo, Johnlong, Lusum, Mr.evolution, Nalegato, Patafisik, Pigr8, Poweruser, Salvatore Ingala, Simo ubuntu, Sofisma75, Stacky, 12 Modifiche anonime
Real-time Transport Protocol Fonte:: http://it.wikipedia.org/w/index.php?oldid=49525401 Autori:: Avesan, Broc, CapSnake, Groucho75, Hellis, Moongateclimber, Pietrodn, Robmontagna,
SiGMa83, Simo ubuntu, Vulkano, 10 Modifiche anonime
Livello di trasporto Fonte:: http://it.wikipedia.org/w/index.php?oldid=49490946 Autori:: %Pier%, Abisys, Avesan, Beren023, Buggia, Civvì, Davide, Hce, Mar.pollo, MitRouting,
Pegasovagante, Phantomas, Pietrodn, Rotpunkt, Salvorapi, Tank00, 22 Modifiche anonime
Transmission Control Protocol Fonte:: http://it.wikipedia.org/w/index.php?oldid=49549070 Autori:: %Pier%, 212.177.57.xxx, A7N8X, Abisys, Acchiappasogni, Alfio, Alleborgo,
Anotherhacktivist, Ar mythra, Archenzo, Ary29, Automatic jack, Avesan, Azrael555, Bergonz, Brownout, Bultro, Calius25, Cruccone, Daimon, Dav82, Davide, Ddonato, DoBs, Edonan,
Fabior1984, Frieda, Gac, Gianfranco, Hce, IRedRat, Iron Bishop, Jacopo Werther, Jacopobenz, Jean85, KeyboardSpellbounder, Kormoran, Leo144, Lgiove, Luigi.tuby, Marcuscalabresus,
Matteo92Ferrari, Maui, Mess, Mix, Moongateclimber, Nervosud, No2, Qualc1, Remulazz, SalvoIsaja, SbiellONE, Sbisolo, Simo ubuntu, Snubcube, Unriccio, Vulkano, 127 Modifiche anonime
User Datagram Protocol Fonte:: http://it.wikipedia.org/w/index.php?oldid=47468222 Autori:: %Pier%, Abisys, Acchiappasogni, Alfio, Anotherhacktivist, Ary29, Avesan, Brownout, Elwood,
Frendine, Frieda, GianniPucillo, Hce, Hellis, Iannigb, Iron Bishop, Jean85, Krabbit, Misterioso, Moongateclimber, Moroboshi, Pibo, Salvorapi, Sbrandollo, Simo ubuntu, Unriccio, Vulkano, 30
Modifiche anonime
Livello di rete Fonte:: http://it.wikipedia.org/w/index.php?oldid=49575840 Autori:: %Pier%, Abisys, Alfio, Ary29, Avesan, DnaX, Fosco86, Frieda, Hce, Ignorantone, Leitfaden, Mar.pollo,
Paginazero, Pegasovagante, Perteghella, Pietrodn, RL, Rojelio, Rotpunkt, Sentruper, Snowdog, Svante, TommiMazza, 29 Modifiche anonime
IPv4 Fonte:: http://it.wikipedia.org/w/index.php?oldid=48502124 Autori:: .anaconda, Abisys, Acchiappasogni, Archenzo, Ary29, Avesan, Clamiax, DaVid83, Frack, Gsdefender2, Happyhour,
Hce, Helios, Hellis, Ilario, Jean85, M7, Marco Plassio, Matra dj, Max Null, Mizardellorsa, Moongateclimber, No2, Onr, Penaz, Rojelio, Valepert, Vulkano, 33 Modifiche anonime
IPsec Fonte:: http://it.wikipedia.org/w/index.php?oldid=48988465 Autori:: %Pier%, .mau., Abisys, Aker, Alef.ala, Ary29, Avesan, Bla, Dinwath, Ercaran, F. Cosoleto, Fabexplosive, Frieda,
Guam, Guidomac, Hellis, IngDani, Lgiove, Mcicogni, MitRouting, Moongateclimber, Phantomas, Rojelio, Snowdog, Viames, Vulkano, 71 Modifiche anonime
Livello datalink Fonte:: http://it.wikipedia.org/w/index.php?oldid=49575883 Autori:: 0x1.gen, Abisys, Alfio, Ary29, Avesan, Bart46, DanGarb, Daniele Forsi, Eumolpa, Eumolpo, Famasoft,
Frieda, GiacomoV, Hce, Hellis, Knottyboy, L'alchimista, Llorenzi, Mar.pollo, Nalegato, No2, Pap3rinik, Phantomas, Ricercatorew76, Rotpunkt, Sbisolo, Scorpios90, Simoz, Tomi, Wikit2006, 81
Modifiche anonime
Secure shell Fonte:: http://it.wikipedia.org/w/index.php?oldid=48709071 Autori:: Abisys, Alleborgo, Apollo13, Avesan, Brownout, Domenico De Felice, Fabianope, Fatzeus, Francesco.monte,
Gliu, Golf-ball, Govoch, Hashar, Hce, Hellis, Ianezz, Johnlong, Kaos Ktrl, LapoLuchini, Leo72, Lukius, No2, Pietrodn, Reddstain, Robbyd1983, Rollopack, Romanm, Salvatore Ingala,
Sassospicco, Siciliano Edivad, T137, Vulkano, Wiso, 53 Modifiche anonime
74
Fonti, licenze e autori delle immagini
Fonti, licenze e autori delle immagini
Immagine:Commons-logo.svg Fonte:: http://it.wikipedia.org/w/index.php?title=File:Commons-logo.svg Licenza: logo Autori:: SVG version was created by User:Grunt and cleaned up by
3247, based on the earlier PNG version, created by Reidab.
File:Modello FTP.png Fonte:: http://it.wikipedia.org/w/index.php?title=File:Modello_FTP.png Licenza: Creative Commons Attribution 2.5 Autori:: Fale, No2, Sbisolo, 3 Modifiche anonime
File:svg2raster.jpg Fonte:: http://it.wikipedia.org/w/index.php?title=File:Svg2raster.jpg Licenza: sconosciuto Autori:: Samadhi56
File:DNS RR.png Fonte:: http://it.wikipedia.org/w/index.php?title=File:DNS_RR.png Licenza: sconosciuto Autori:: Samadhi56
File:Nome spazio di dominio.jpg Fonte:: http://it.wikipedia.org/w/index.php?title=File:Nome_spazio_di_dominio.jpg Licenza: Public domain Autori:: Samadhi56
File:Tcp-handshake.svg Fonte:: http://it.wikipedia.org/w/index.php?title=File:Tcp-handshake.svg Licenza: Creative Commons Attribution-ShareAlike 3.0 Unported Autori::
300px-Tcp-handshake.png: ??? derivative work: Snubcube (talk)
File:TCP-Chiusura-a-4-vie.png Fonte:: http://it.wikipedia.org/w/index.php?title=File:TCP-Chiusura-a-4-vie.png Licenza: Public Domain Autori:: Acchiappasogni
75
Licenza
Licenza
Creative Commons Attribution-Share Alike 3.0 Unported
//creativecommons.org/licenses/by-sa/3.0/
76