Struttura dei protocolli TCP/IP
L’insieme dei protocolli di rete che realizzano quello che è comunemente denominato TCP/IP costituisce oggi la base della comunicazione tra computer o apparecchiature attraverso una rete locale o piu’ in generale la rete internet.
I protocolli di rete sono
normalmente organizzati in livelli, in cui ogni livello ha un preciso compito
nei differenti aspetti della comunicazione.
-
Applicazione
-
Trasporto
-
Rete
-
Collegamento
A
partire dal livello di collegamento (il piu’ basso) ciascun livello (in linea di
principio e salvo eccezioni) comunica solo con i livelli soprastanti e
sottostanti.
Il livello di collegamento
normalmente comprende la gestione a basso livello tra il dispositivo di
comunicazione (es: scheda ethernet, token ring, ISDN, ATM etc) e il sistema
operativo del computer o apparecchiatura.
Il livello di rete gestisce
attraverso i protocolli di rete come i pacchetti da e per i livelli adiacenti
debbano essere interpretati, modificati, instradati e modificati. I protocolli
che fanno parte di questo livello sono l’Internet Protocol (IP), l’Internet
Control Message Protocol (ICMP) e l’Internet Group Management Protocol (IGMP).
Il livello di trasporto si
occupa di garantire il trasferimento dei dati tra due dispositivi che hanno
instaurato una comunicazione. I protocolli che fanno parte di questo livello
sono il Transmission Control Protocol (TCP) e l’User Datagram Protocol (UDP).
Il protocollo TCP garantisce
una comunicazione affidabile tra due dispositivi connessi logicamente attraverso
la rete. Esso si occupa di tutta la gestione dei dati che provengono
dall’applicazione soprastante, dividendo dove necessario il flusso dati in
unita’ compatibili ai limiti del protocollo di rete sottostante, gestisce le
eventuali richieste di ripetizione di dati giunti incompleti nonche’ il loro
eventuale riordino sequenziale. Grazie a queste caratteristiche di affidabilità
l’applicazione che si serve del TCP per stabilire una comunicazione puo’
ignorare tutti i dettagli legati al mantenimento e la verifica della
connessione.
Il protocollo UDP invece
gestisce il semplice invio di pacchetti tra dispositivi non garantendo che
questi arrivino a destinazione né tantomeno provvedendo a eventuali richieste di
ripetizione. Tutti gli eventuali dettagli per rendere la comunicazione
affidabile dovranno essere gestiti dall’applicazione.
Infine il livello di
applicazione gestisce i dettagli di una particolare applicazione. I protocolli
che fanno parte di questo livello sono ad esempio il File Transfer Protocol (FTP
utile a copiare files tra due computer), l’Hyper Text Transfer Protocol (HTTP
usato dai browser), il Simple Mail Transfer Protocol (SMTP usato dai client per
la posta elettronica per inviare messaggi di posta elettronica).
Esempio
di comunicazione attraverso TCP/IP
Quando due computer (o apparecchiature) vengono collegati tra loro attraverso una rete ethernet e stabiliscono tra loro un collegamento Client/Server bidirezionale utilizzando il TCP/IP l’insieme dei protocolli che partecipano all’instaurazione del collegamento e lo scambio dei dati è il seguente :
Nell’illustrazione l’applicazione del primo computer è denominata Applicazione Client, l’applicazione del secondo computer è denominata Applicazione Server.
Le due applicazioni possono
fornire svariati tipi di servizi, tra cui lo scambio di file FTP, messaggi di
posta elettronica SMTP, navigazione web HTTP, trasferimento di immagine di
processo o altro.
Ciascun livello ha un
proprio protocollo (nella realta’ questi possono essere piu’ di uno) per
comunicare con il proprio corrispondente.
Nell’esempio il protocollo
IP consente ai due livelli di rete di comunicare tra loro. Appare ora chiaro
che quello che comunemente viene denominato TCP/IP è un insieme di protocolli di
cui IP e TCP fanno parte.
Protocolli necessari alla comunicazione
La configurazione minima di protocolli internet necessari per instaurare una comunicazione tra due computer attraverso un collegamento ethernet è la seguente:
Dall’illustrazione si vede come i due protocolli di trasporto TCP e UDP utilizzano IP come protocollo di rete. TCP è un protocollo che garantisce l’affidabilità’ del collegamento, il trasporto e consegna a destinazione dei dati. UDP è un protocollo che serve solo a inviare frame attraverso la rete senza garanzie di consegna e collegamento. Il TCP è usato ad esempio da FTP, UDP è usato da DHCP o SNMP. IP è il protocollo del livello di rete utilizzato sia da UDP sia da TCP. Qualsiasi dato trasferito attraverso la rete da qualunque protocollo viene processato da IP. IP è affiancato da ICMP il quale ha funzioni di controllo degli errori e serve a gestire la comunicazione tra IP e i protocolli soprastanti.
IP comunica direttamente con
l’interfaccia di comunicazione dati a basso livello (in questo caso ethernet) il
quale ha bisogno in molti casi (ethernet, token ring) del protocollo ARP per
associare gli indirizzi del mezzo di collegamento con gli indirizzi internet.
Percorso dei dati in una comunicazione TCP/IP attraverso ethernet
Quando due computer instaurano un collegamento utilizzando il TCP/IP il flusso di dati originato dalle applicazioni passa attraverso tutti i livelli e i protocolli del TCP/IP.
A ciascun livello i protocolli incapsulano i dati che ricevono dal livello soprastante in un frame che contiene le opportune informazioni di intestazione e terminazione.
A partire dai dati dell’applicazione percorrendo i livelli dal piu’ alto al piu’ basso, il livello di applicazione puo’ se lo ritiene opportuno aggiungere un’intestazione (che puo’ contenere codici di controllo di errore rindondanti dall’applicazione), lo stesso fanno sempre sia il TCP (o nel caso UDP) e l’IP.
Quando il frame IP (come in
questo caso) viene trasmesso attraverso ethernet viene aggiunta sia
un’intestazione sia una terminazione che comprende il codice di controllo di
errore.
Controllo e verifica dei dati nei protocolli internet
I protocolli IP TCP e UDP utilizzano all’interno di ciascuno delle loro intestazioni un semplice controllo di rilevazione di errore basato su un checksum a 16bit denominato internet checksum.
Le caratteristiche e i
dettagli di implementazione sono descritti nel documento Internet Request for
Comments (RFC) 1071 disponibile online in internet all’indirizzo
http://www.rfc-editor.org/
Sostanzialmente le
caratteristiche percui e’ stato scelto questo metodo di controllo e rilevazione
dell’errore (tenendo conto anche della capacita’ di elaborazione dei sistemi di
quando questo protocolli furono realizzati) sono l’estrema semplicita’
dell’algoritmo che realizza il controllo (sia in hardware che in software) unito
al fatto che il controllo del checksum produce lo stesso tipo di controllo sia
su macchine big endian che little endian che a loro volta possono eseguire il
controllo tramite somme in aritmetica binaria con complemento a 1 o 2.
Inoltre l’impiego del
checksum (al contrario ad esempio di un codice ciclico CRC) consente in caso di
modifica di un singolo valore il ricalcolo parziale del checksum senza dove
procedere all’intero ricalcolo del cheksum. Questa operazione e’ spesso
necessaria quando il frame viene trasferito in rete per mezzo da dispositivi di
instradamento (router) che necessitano di modificare alcuni parametri contenuti
nell’intestazione IP.
Il checksum contenuto all’interno dell’intestazione IP e’ calcolato solo sull’intestazione IP (20 byte). Il calcolo del checksum non viene eseguito su nessuno dei byte che seguono l’intestazione IP.
Per calcolare il checksum IP
di un frame in uscita per prima cosa il valore viene posto a zero, quindi la
somma a 16bit con complemento a uno dell’intera intestazione viene calcolata
(l’intestazione viene considerata sempre come sequenze di parole a 16bit). Il
complemento a 1 di questa somma viene quindi memorizzata nel campo checksum
dell’intestazione IP. Quando il frame IP viene ricevuto la somma a 16bit con
complemento a uno viene calcolata. Essendo il checksum calcolato da chi ha
trasmesso il frame, gia’ compreso nel frame stesso, il checksum calcolato dal
ricevitore dovra’ avere tutti i bit a 1 (ffff in notazione esadecimale, cioe’
uno dei due possibili valori di 0 nella rappresentazione dell’aritmetica a
complemento a 1) se l’intestazione e’ stato ricevuta correttamente.
Se il checksum contiene un
solo bit diverso da 1 allora il frame viene scartato e non viene generato nessun
errore. Sara’ compito di uno dei protocolli soprastanti IP (es TCP) a
richiedere la ritrasmissione del frame.
L’ordine di precisione nella
rilevazione dei possibili errori nell’internet checksum e’ di 1 bit ogni 65536
bit cioe’ la probabilita’ di un errore ogni 2^16-1 bit (cioe’ circa 3 x 10^-5),
valore ritenuto accettabile poiché gli errori a livello di frame IP sono da
considerarsi rari perché i frame IP sono a loro volta incapsulati in frame con
un controllo piu’ efficace (es: il frame ethernet IEEE 802.3 esegue il controllo
di errore usando un CCITT CRC a 32 bit).
ICMP, IGMP, UDP e TCP tutti
usano lo stesso metodo per calcolare il checksum contenuto della loro
intestazione.
Il checksum di TCP al
contrario di quello calcolato e verificato in IP contiene l’intero segmento TCP
cioe’ sia l’intestazione che i dati. Il checksum e’ un campo obbligatorio
dell’intestazione IP e deve essere calcolato e incluso dal mittente del frame e
calcolato e verificato dal destinatario del frame.
Garanzie di integrita’ dei dati e affidabilita’ del protocollo TCP
Il protocollo di trasporto
TCP al contrario di UDP fornisce un servizio di trasporto affidabile, basato su
un collegamento logico garantito e in grado di trasmettere dati in forma di byte
o multipli di essi, liberando completamente l’applicazione dalla verifica dell’integrita’
dei dati, il loro recapito nella giusta sequenza.
Con collegamento logico si
intende che le due applicazioni che instaurano il collegamento devono collegarsi
prima di cominciare a scambiarsi i dati e se durante lo scambio dei dati il
collegamento viene abbattuto ambedue le applicazioni sono informate e non c’e’
modo che esse ricevano dati errati. Il tipico esempio e’ dato da una
comunicazione telefonica dove prima di parlare si deve attendere che il
chiamante componga il numero telefonico da chiamare, attenda che la rete esegua
la selezione, che il chiamato risponda e che si identifichi.
In una comunicazione basata
su TCP i due sono i soggetti che stabiliscono la comunicazione bidirezionare
utilizzando il TCP si affidano completamente al protocollo in quanto questo
fornisce le seguenti garanzie in termini di integrita’ dei dati e affidabilita’
della comunicazione:
-
I dati provenienti
dall’applicazione sono suddivise nel modo che il TCP considera migliore per
essere trasmessi attraverso i protocolli di rete sottostanti. Al contrario UDP
si affida alla libera scelta fatta dall’applicazione che potrebbe decidere di
trasmettere una serie di dati in una unica volta superiore alla capacita’
massima del protocollo di rete o di collegamento sottostante (per esempio il
limite di 1536 byte totali di un frame ethernet 802.3)
-
Quando il TCP trasmette
dei dati, mantiene un timer che serve a verificare che il destinatario entro
un limite massimo risponda informando il mittente che i dati sono stati
ricevuti. Se il mittente non riceve questa conferma procede a ritrasmettere la
parte non confermata.
-
Quando il TCP riceve i
dati, comunica l’avvenuta ricezione dei dati al mittente inviando un opportuno
messaggio di convalida.
-
Il TCP mantiene un proprio
controllo di integrita’ di tutti i dati trasmessi e ricevuti (sia
l’intestazione che i dati) attraverso un internet checksum come nel caso di
IP. Questo controllo serve a garantire che i dati non vengano modificati da
errori o disturbi durante il percorso. Se un frame arriva con errore il TCP
semplicemente non lo convalida non rispondendo forzando cosi’ il mittente a
ritrasmetterlo.
-
I frame TCP sono trasmessi
come frame IP e siccome IP non garantisce né la corretta sequenza di
spedizione del frame né l’eventuale soppressione delle duplicazioni di frame
e’ compito del TCP di riassemblare nel corretto ordine i frame in arrivo dal
corrispondente o eliminare i frame duplicati in modo che l’applicazione di
destinazione riceva i dati nella stessa sequenza in cui l’applicazione
mittente li aveva inviati.
-
Il TCP garantisce un
adeguato controllo di flusso verso l’applicazione e il livello di rete. Ogni
collegamento, infatti, dispone di un buffer di comunicazione di dimensioni
finite. Il TCP garantisce che quando i due lati (produttore / consumatore)
risultano avere velocita’ diverse (di produzione o consumo di dati) rimangano
sincronizzate a vicenda sulla velocita’ piu’ opportuna (di solito delle due la
piu’ bassa).
In un flusso di dati a 8
bit tra due applicazioni i dati sono scambiati attraverso la connessione TCP
direttamente tra le due applicazioni. La comunicazione e’ totalmente
trasparente. Non esiste alcun carattere di fine linea o record inserito dal TCP.
Se una applicazione trasmette prima 10 byte, poi 20 byte e infine 30 byte, il
ricevitore ricevera’ in totale 60 byte non potendo sapere le dimensioni
originarie dei dati cosi’ come sono stati inseriti dal mittente, in questo modo
egli potra’ decidere di ricevere i 60byte tutti insieme oppure in 3 parti ognuna
di 20byte.
Il mittente invia un certo
numero di byte e gli stessi arriveranno a destinazione.
Il TCP come detto e’
completamente trasparente, nel senso che non esegue nessuna interpretazione sui
dati trasmessi o ricevuti.
L’internet checksum usato
da TCP (e anche da UDP) viene calcolato come nel caso di IP. Rispetto a IP dove
viene calcolato solo sull’intestazione che ha lunghezza fissa e pari (20byte) i
frame TCP o UDP potrebbero risultare dispari. In questo caso il calcolo del
checksum viene normalizzato comunque a un numero pari di byte inserendo un byte
a 0 come ultimo. Inoltre sia TCP che UDP contengono una pseudo intestazione che
serve solo a calcolare il checksum. Questa pseudo intestazione include alcuni
campi presi dall’intestazione IP. Questo serve a far si che UDP o TCP verifichi
(oltre alla verifica fatta da IP sugli indirizzi) che il frame sia giunto alla
corretta destinazione.
Il protocollo di trasporto UDP
UDP e’
un semplice protocollo di trasporto destinato a trasmettere frame singoli senza
garanzie di affidabilita’. I dati trasmessi da un frame UDP non e’ garantito che
vengano consegnati al destinatario ne esiste una funzionalita’ propria di UDP
che convalidi al mittente l’avvenuta ricezione di un frame da parte del
destinatario. Tutti gli eventuali controlli dovranno venir svolti
dall’applicazione soprastante. Come nel caso di TCP, UDP convalida i frame che
riceve utilizzando l’internet checksum sull’intero frame (intestazione e dati)
solo che mentre nel caso di TCP il checksum e’ obbligatorio in UDP esso e’
opzionale.
Controllo e verifica dei dati nel protocollo ethernet IEEE 802.3
Un frame ethernet IEEE 802.3 contiene un codice di controllo e rivelazione di errore basato sul CCITT CRC 32bit.
Tutti i frame passati ai livelli superiori sono da considerare liberi da errori in quanto tutti i frame ricevuti con errori sono scartati.
L’ordine di precisione nella
rilevazione dei possibili errori del CCITT CRC a 32bit è il seguente:
-
Precisione nei confronti
di errori dovuti a singoli bit:
-
Usa il polinomio:
1+x^4+x^31+x^32
-
Rivela qualsiasi numero
di errori di ordine dispari dovuti a singoli bit indipendentemente dalla
lunghezza del record cui è applicato il controllo
-
Rivela qualsiasi numero
di errori dovuti a doppi bit errati quando la lunghezza del record sul quale
è applicato il controllo è inferiore a 2^31-1.
-
La distanza di Hamming è
almeno di 4 per record di lunghezza fino a 2^31-1
-
Usa il polinomio:
1+x^4+x^31+x^32
-
Precisione nei confronti
di errori dovuti a pacchetti di errore (tali errori denominati anche bursts
errors sono dovuti a disturbi che producono errori di lunghezza superiore a un
bit e di conseguenza perturbano piu’ bit successivi):
-
Rivela tutti i singoli
pacchetti di errore di lunghezza pari a 32bit
-
Rivela tutti i singoli
pacchetti di errore di lunghezza pari a 33bit con l’eccezione delle
sequenze proprie di bit
-
Rivela il 99.9999999767%
dei singoli pacchetti di errori per frame superiori a 33 bit di lunghezza.
-
Rivela tutti i singoli
pacchetti di errore di lunghezza pari a 32bit
Conclusioni
Le comunicazioni dati
realizzate mediante i protocolli di comunicazione internet quando il mezzo di
comunicazione e’ a sua volta un protocollo che garantisce comunicazioni libere
di errori come l’ethernet IEEE 802.3 sono da considerarsi affidabili e sicure
per quanto riguarda l’integrità’ e il trasporto dei dati.
Il grado di sicurezza
assoluto nel caso in cui i dati siano trasportati in un bus ethernet IEEE 802.3
e’ pari a quello dell’ethernet stesso, poiché tutte le elaborazioni successive
(IP e TCP) vengono svolte a livello hardware o software all’interno dei computer
e comunque dove il semplice internet checksum e’ in grado di garantire piena
affidabilita’.
Se viceversa il frame IP dovesse essere trasmesso attraverso mezzi di comunicazione diversi quali modem o fibre ottiche occorre valutare caso per caso il grado di affidabilita’ del protocollo di collegamento utilizzato.
Appendice
Somma
a complemento a 1
-
In un byte il bit piu’
significativo a sinistra equivale al segno.
-
Il valore negativo e’
rappresentato come il valore con segno negativo dopo aver negato ogni singolo
bit es: 00001000 = 8 11110111 = -8
-
Si esegue la somma binaria
e l’eventuale resto si somma al bit meno significativo:
-
00001011+ (11)
-
11111101= (-2)
-
100001000
-
000001001 (9)
-
00001011+ (11)
Somma a complemento a 2
-
In un byte il bit piu’
significativo a sinistra equivale al segno.
-
Il valore negativo e’
rappresentato come il valore con segno negativo dopo aver negato ogni singolo
bit e sommato 1 es: 00001000 = 8 11111000 = -8
-
Si esegue la somma binaria
significativo:
-
00001011+
(11)
-
11111110=
(-2)
-
00001001 (9)
-
00001011+
(11)
I termini big-endian e
little-endian servono a distinguere quale tra i byte di un dato multi-byte (es
una word a 16 byte o una double word a 32bit) viene considerato piu’
significativo. In little-endian (usato ad esempio nelle architetture Intel) il
byte piu’ significativo e’ quello con indirizzo piu’ alto (o nella
rappresentazione scritturale piu’ a destra). In big-endian (usato nelle
architetture motorola (non PowerPC che sono bi-endian) o nei mainframe IBM) il
byte piu’ significativo e’ quello con indirizzo piu’ basso (o nella
rappresentazione scritturale piu’ a sinistra).
Es: il valore:
00000010 01000000 00010000
00000001 2401001 hex
Indirizzo |
Rappresentazione
big-endian
|
Rappresentazione
little-endian |
00 |
00000010 |
00000001 |
Distanza di Hamming
L’efficienza di protezione
di un codice (espressa dal tasso di errore residuo, corrispondente agli errori
non rilevati) è tanto maggiore quanto piu’ le combinazioni significative del
codice sono distinte le une dalle altre. Si definisce distanza tra due
combinazioni di un codice il numero di posizioni in cui esse hanno simboli
diversi. Per esempio, le combinazioni 10101 e 11001 hanno distanza 2 perche’
differiscono nella seconda e nella terza posizione, cio’ significa che sono
necessari 2 errori semplici per trasformare una di esse nell’altra. Per un dato
codice si definisce distanza di Hamming D, la minima distanza tra tutte le
possibili combinazioni significative. L’efficienza di protezione di un codice
dipende dalla sua distanza di Hamming, il minimo di protezione si ha per D = 2
corrispondente alla possibilita’ di rilevazione di tutti gli errori singoli. E’
questo il caso dei codici di controllo di parita’ nei quali le combinazioni
differiscono tra loro in almeno due posizioni, poiche’ il cambiamento di un bit
di codice comporta il cambiamento anche del bit di parita’. Per D=1 il codice è
privo di ridondanza e quindi di protezione.
Distanza di Hamming |
Ordine di molteplicita’
degli errori rivelabili |
Ordine di molteplicita’
degli errori correggibili |
1 |
- |
- |
2 |
1 |
- |
3 |
2 |
1 |
4 |
3 |
1 |
5 |
4 |
2 |
Riferimenti bibliografici
- Trasmissione dell’informazione. Autori: A.Cecconelli e Tomassini. Editore Calderini
-
Computer Networks.
Autore: Andrew S.Tanenbaum. Editore Prentice-Hall Inc.
-
TCP/IP Illustrated Volume I The Protocols. Autore: W.
Richard Stevens. Editore Addison-Wesley