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:

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.

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 
  
 
 Protocollo TCPIP
Protocollo TCPIP




