# Protocollo di rete

Un protocollo di rete, in telecomunicazioni, è un particolare tipo di protocollo di comunicazione preposto al funzionamento di una rete informatica ovvero la definizione formale a priori delle modalità o regole di interazione che due o più apparecchiature elettroniche collegate tra loro devono rispettare per operare particolari funzionalità di elaborazione necessarie all'espletamento di un certo servizio di rete.
In senso più lato, un protocollo di comunicazione si può definire come un insieme di regole che vengono stabilite per instaurare una comunicazione corretta: ad esempio due persone di differenti madrelingue potrebbero mettersi d'accordo nell'utilizzo della lingua inglese per comunicare.

## Descrizione

In termini equivalenti si tratta dunque della descrizione a livello logico del processo di comunicazione (meccanismi, regole o schema di comunicazione) tra terminali e apparati preposto al funzionamento efficace della comunicazione in rete. Queste apparecchiature possono essere host, computer client, smartphone, personal digital assistant (PDA), monitor, stampanti, sensori.
In particolare un protocollo prevede la definizione dei linguaggi costituiti dai messaggi scambiati, messaggi che devono potersi interpretare correttamente. L'aderenza ai protocolli garantisce che due software in esecuzione su diverse macchine affinché possano comunicare efficacemente, anche se sono stati realizzati indipendentemente cioè interoperabilità. È evidente l'importanza della standardizzazione dei protocolli di rete. L'implementazione informatica dei protocolli di rete definisce, all'interno dell'architettura di rete, il cosiddetto software di rete, presente usualmente all'interno del sistema operativo ed elaborato dalla scheda di rete.

### Il ruolo della connessione

Quando un client e un server iniziano a comunicare si possono scambiare pacchetti di controllo prima di spedire i dati reali. Queste procedure dette di handshaking preparano le due componenti alla comunicazione. Tali procedure sono alla base, ad esempio, del TCP. Tuttavia possono anche esserci servizi che inviano direttamente i dati come nel caso dell'UDP. La maggior parte delle applicazioni, compresi i server proxy tuttavia, hanno bisogno di inviare i dati in maniera sicura e affidabile per cui l'handshake serve proprio a questo compito. Si comprende come la connessione con TCP, ad esempio, sia più sicura ma anche più lenta perché scambia non solo dati relativi al contenuto della comunicazione (o payload), ma anche dati di servizio.

### I livelli

I diversi protocolli sono organizzati con un sistema detto "a livelli": a ciascun livello viene usato uno specifico protocollo. L'insieme di più livelli e relativi protocolli definisce un'architettura di rete a strati, che altro non è che un'astrazione delle funzionalità logiche della rete stessa.
La divisione in livelli è fatta in modo tale che ciascuno di essi utilizzi i servizi offerti dal livello inferiore, e fornisca servizi più "ricchi" a quello superiore. I diversi livelli in un host comunicano tra loro tramite le interfacce (figura 1) chiamate SAP (Service Access Point). Ogni livello parla solo con quello immediatamente superiore e con quello immediatamente inferiore. I protocolli regolano invece la comunicazione tra due entità dello stesso livello, che serve a fornire servizi al livello superiore.
In una rete a pacchetto ciascun livello aggiunge ai pacchetti un'intestazione, attraverso un'operazione detta imbustamento. In particolare l'unità dati di ciascun livello o protocollo è detta PDU suddivisa a sua volta in SDU che rappresenta la parte di dati utili proveniente dagli strati superiori e la PCI che rappresenta l'informazione di overhead aggiunta dal protocollo del livello N cioè l'intestazione. Ciascun protocollo quindi regola normalmente solo una parte degli aspetti di una comunicazione e le funzionalità stesse del protocollo sono immediatamente ricavabili dall'intelligibilità, cioè dal significato logico, dei loro campi dato aggiuntivi.
I vari livelli sono dunque organizzati in pile di protocolli (figura 2).
Tale "pila protocollare" è un modo flessibile per combinare componenti per realizzare un servizio.
Un esempio reale di un'organizzazione a livelli protocollari, classico nelle trattazioni inerenti alle reti di calcolatori, è quello del percorso di una valigia in un viaggio aereo partendo dalla casa di origine all'hotel di destinazione. Il primo livello che notiamo è quello della preparazione della valigia: il turista prende i vestiti e ve li ripone per poi chiuderla, come ciò viene fatto è definito dal protocollo del primo livello. Il secondo livello è quello dell'addetta alle valigie all'aeroporto di partenza, il turista le consegna la valigia (passaggio dal primo al secondo livello) e l'addetta attacca alla valigia le informazioni relative al volo e alla destinazione. Qui notiamo l'aspetto fondamentale dell'organizzazione a livelli protocollari, cioè che per l'addetta non è necessario conoscere come i vestiti sono stati riposti nella valigia, altresì non è necessario per il viaggiatore conoscere le operazioni che deve effettuare l'addetta, egli infatti otterrà ciò che vuole (avere i vestiti all'hotel d'arrivo), senza che ciò influisca affatto su come gli altri protocolli debbano lavorare, a patto che lo facciano correttamente.
La struttura serve ad adempiere ad alcuni compiti:
* controllo dell'errore;
* controllo del flusso;
* frammentazione e riassemblaggio;
* multiplexing, in modo che sessioni dello strato più alto possano condividere una singola connessione dello strato più basso;
* instaurazione della connessione.
Tale architettura presenta vantaggi concettuali e strutturali anche se alcuni si sono opposti in maniera decisa in quanto uno strato spesso duplica le funzionalità di un altro strato in maniera ripetitiva. Ad esempio, il servizio di ADSL viene fornito con diverse modalità, le più comuni sono chiamate PPP over ATM (ovvero il protocollo Point to Point usa i servizi forniti dal protocollo ATM) e PPP over Ethernet.
Il livello più basso (livello 1) è detto "livello fisico" e si occupa di gestire la trasmissione dei segnali attraverso il mezzo di trasporto (cavo, fibra ottica, infrarossi, ecc.). Il livello più elevato (livello 7) è chiamato "livello applicativo" ed è quello che permette all'utente di creare il messaggio da comunicare.
La divisione in livelli è piuttosto rigida a livello di specifica dei protocolli, mentre nell'implementazione spesso diversi livelli vengono implementati insieme in uno stesso modulo software. Non è detto che due macchine che comunicano usino la stessa pila di protocolli. Ad esempio, se vi connettete ad internet attraverso un modem voi appoggiate il livello di rete IP su una connessione PPP, mentre il server a cui vi collegate probabilmente appoggia la rete IP su una connessione ethernet. Il termine protocollo si applica anche ad alcune reti a commutazione di circuito, come SDH, dove l'imbustamento è un circuito dedicato a trasmettere informazioni di controllo.

## ISO/OSI

L'International Organization for Standardization (ISO) nel 1979 ha definito la pila di protocolli Open Systems Interconnection (modello OSI), con l'intenzione di creare uno standard per le telecomunicazioni da usare nelle reti di tutto il mondo. All'atto pratico però, lo standard de facto che viene comunemente usato nella maggior parte delle reti, è il TCP/IP, definito nella RFC 1155. Le differenze fondamentali dei due standard sono semplici: il primo è stato definito a tavolino da un'organizzazione super partes, mentre il secondo è opera di chi costruì materialmente le prime reti, sviluppandolo sul campo. Inoltre, lo standard ISO/OSI assegna un determinato compito ad ogni livello, mentre il TCP/IP è più "elastico" e permette di sviluppare protocolli che svolgono più di un compito-base.

### Elenco di protocolli di rete secondo ISO/OSI

Nella seguente suddivisione, si segue lo standard ISO/OSI. Tale classificazione ha ormai solo un valore concettuale, ed infatti i protocolli elencati sono usati principalmente in combinazione con la Suite di protocolli Internet TCP/IP.
Bisogna anche osservare che IP, per la sua natura di protocollo di inter-networking, utilizza protocolli che hanno le caratteristiche di un protocollo di rete, come ATM o frame relay, per realizzare la funzione corrispondente al livello di collegamento. Quindi IP, come viaggia su ethernet, può viaggiare su ATM o frame-relay. Proprio per questo motivo Internet è detta "rete delle reti".
* Livello 1: fisico
** Bluetooth
** DSL Digital Subscriber Line
** RS-232
** Ultra Wide Band (UWB)
* Livello 2: datalink
** Ethernet
** Point-to-Point Protocol (PPP)
** Frame Relay
** Token ring
** Wi-Fi
** FDDI
** ATM
* Livello 3: rete
** IP Internet Protocol
** IPX
** X.25
** netbeui
* Livello 4: trasporto
** TCP e UDP (usati su IP)
** SPX (usato su IPX)
** NetBIOS
* Livello 5: sessione
** SMPP, Short Message Peer-to-Peer
** SCP, Secure Copy Protocol
** SSH, Secure Shell
** SDP, Sockets Direct Protocol
* Livello 6: presentazione
* Livello 7: applicazione
** Protocolli di servizio:
*** Dynamic Host Configuration Protocol - (DHCP)
*** Domain Name System - (DNS)
*** Network Time Protocol - (NTP)
*** Simple Network Management Protocol - ***Simple Network Management Protocol - (SNMP)
*** Lightweight Directory Access Protocol - (LDAP)
** Protocolli di accesso a terminali remoti:
*** Telnet
*** Secure Shell - (SSH)
** Protocolli usati per realizzare il servizio di posta elettronica e newsgroup:
*** Simple Mail Transfer Protocol (SMTP)
*** Post Office Protocol (POP)
*** Internet Message Access Protocol (IMAP)
*** Network News Transfer Protocol (NNTP)
** Protocolli di trasferimento file:
*** File Transfer Protocol - (FTP)
*** Hypertext Transfer Protocol - (HTTP)
*** Internet Relay Chat - (IRC)
*** Gnutella

## Progettazione

Progettare un protocollo di rete vuol dire essenzialmente definire un'intestazione o header da aggiungere al pacchetto proveniente dagli strati architetturali superiori dello stack specificando dei campi dato opportuni per la loro elaborazione in ricezione e l'espletamento così della funzionalità di rete aggiuntiva desiderata.

## Implementazione

I livelli visti precedentemente sono una suddivisione concettuale, ma la loro implementazione non è uniforme. Infatti il livello fisico e quello di collegamento di solito sono presenti sulla scheda di interfaccia della rete, mentre il livello di rete ha un'implementazione mista hardware-software, e i livelli superiori sono normalmente implementati in software (anche se alcune schede di rete possono prendersi carico di alcune operazioni di competenza di TCP). Il livello di trasporto è normalmente implementato all'interno del sistema operativo in spazio kernel, mentre il livello applicativo è implementato da processi in spazio utente.
Inoltre, osservando un pacchetto in transito (ad esempio, con uno sniffer), è possibile vedere che il pacchetto inizia con gli header dei livelli più bassi, fino al livello di trasporto. Il carico utile del livello di trasporto è organizzato dal livello applicazioni. Talvolta sono presenti anche dei "trailer", ovvero altre intestazioni di servizio poste in fondo al pacchetto. Questi si trovano in ordine inverso, ovvero si incontrano prima i trailer di livello superiore. Si veda anche imbustamento.