L'integrità dei dati e affidabilità nelle comunicazioni basate su protocolli internet

 

Marco Savegnago IW3FQG

 

 

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.

 

I protocolli che costituiscono il TCP/IP sono organizzati in quattro livelli:

 

 

 

 

 

 

 

 

 

 

 

 

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 terminanazione.

 

 

 

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:

 

 

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:

 

 

 


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

 

 

 

Somma a complemento a 2

 

 

 

Big-endian e little-endian

 

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
01
02
03

00000010
01000000
00010000
00000001

00000001
00010000
01000000
00000010

 

 


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