La commutazione di pacchetto (), nelle telecomunicazioni, è una tecnica di accesso multiplo a divisione di tempo, specificamente concepita per il trasporto dati, utilizzata per condividere un canale di comunicazione tra più nodi in modo non deterministico, suddividendo l'informazione da trasferire in pacchetti trasmessi individualmente e in sequenza, seguendo un meccanismo di instradamento dettato da relative tabella di routing. La commutazione di pacchetto trova applicazione nelle reti di calcolatori e più in generale nelle reti di telecomunicazione. Esempi di reti fondate sulla commutazione di pacchetto sono le reti locali di calcolatori e Internet.
Descrizione
Storicamente la commutazione di pacchetto fu concepita nei primi anni sessanta, in un contesto di guerra fredda, come soluzione al problema di garantire la sopravvivenza di una rete di telecomunicazioni in seguito ad un attacco nucleare. L'idea di base consiste nel suddividere l'informazione in entità elementari (i pacchetti) che poi vengono trasmesse e instradate individualmente e teoricamente ognuna in modo indipendente per essere poi riassemblate nel punto di destinazione. L'instradamento dei pacchetti avviene usando in ogni nodo della rete apposite tabelle di tipo dinamico, dette tabelle di routing, che ad ogni pacchetto ricevuto su una interfaccia associano la corrispondente interfaccia di uscita verso il nodo successivo. La determinazione dell'interfaccia di uscita viene stabilita in base a meccanismi di auto-apprendimento oppure tramite appositi protocolli di routing: in questo modo, nel caso in cui determinati collegamenti o link trasmissivi diventino inoperativi o inutilizzabili, è possibile individuare un instradamento alternativo che assicuri la continuità e l'integrità della trasmissione.
Questo approccio consente anche un utilizzo più efficiente della capacità trasmissiva di una rete rispetto alla commutazione di circuito, dove la comunicazione per poter avere luogo richiede l'instauramento preliminare di un circuito fisico la cui capacità è interamente dedicata alla specifica comunicazione. Nella commutazione di pacchetto invece i circuiti fisici sono utilizzati solo per il tempo strettamente necessario alla trasmissione di un singolo pacchetto e sono subito disponibili per poter trasmettere un altro pacchetto appartenente a un segnale diverso. Ciò consente un livello di condivisione del mezzo più elevato.
Di contro, a differenza delle reti a commutazione di circuito, nelle reti a commutazione di pacchetto il ritardo di trasferimento complessivo non è fisso, ma varia a seconda del percorso seguito dal pacchetto e delle condizioni istantanee del traffico, inoltre non è del tutto predicibile a priori il percorso che seguirà il pacchetto. Oltre a ciò, data la natura non continuativa della trasmissione e l'utilizzo condiviso, insorge anche la necessità di controllare la congestione nel caso di concorrenza trasmissiva da sorgenti differenti o di richiesta elevata di banda da parte di più sorgenti contemporaneamente.
Per le sue caratteristiche, la commutazione di pacchetto pone quindi un problema nel caso sia necessaria una disponibilità garantita di banda o nelle trasmissioni real time come le comunicazioni vocali tipiche della telefonia (che richiedono ritardi molto limitati e prossimi allo zero) o quelle audio-video. Per affrontare questo aspetto viene sfruttata la possibilità, già prevista negli standard relativi, di assegnare livelli di priorità ai pacchetti, definendo in questo modo classi di qualità di servizio. Con questo meccanismo, i pacchetti a priorità più elevata hanno la precedenza nell'accesso alla banda rispetto a quelli di priorità inferiore, che vengono quindi accodati e, in situazioni estreme, scartati in caso di forte congestione. Assegnando le priorità più elevate ai pacchetti relativi alle informazioni più sensibili ai ritardi o alla perdita di banda disponibile si possono in questo modo mantenere ritardi e perdite dei pacchetti entro i limiti accettabili dalle relative applicazioni.
Funzionamento Struttura generale del pacchetto
In una rete a commutazione di pacchetto (PBN, Packet Based Network) l'informazione da trasmettere viene suddivisa in pacchetti di dimensione abbastanza piccola; ad ognuno di essi viene aggiunta un'intestazione (header) che precede il contenuto informativo vero e proprio, detto payload. Lheader contiene tutta l'informazione necessaria affinché il pacchetto possa essere identificato e inoltrato fino alla sua destinazione finale, ovvero l'indirizzo del destinatario, la sua posizione (numero di pacchetto) all'interno del flusso dell'informazione che viene trasferito più tutta una serie di informazioni aggiuntive come ad esempio il livello di priorità del singolo pacchetto, la lunghezza del campo informativo, il tipo di informazione trasportata (per distinguere per esempio i pacchetti che trasportano contenuto informativo dai pacchetti che trasportano informazioni di protocollo o di altro tipo). I pacchetti vengono inviati individualmente attraverso la rete e grazie al numero di pacchetto vengono poi riassemblati nell'ordine originale quando arrivano sul nodo destinatario.
Ad ogni pacchetto viene inoltre aggiunta, tipicamente in coda al campo informativo vero e proprio, una parola di controllo individuale, calcolata sulla sequenza di bit che compongono il pacchetto stesso sfruttando un algoritmo il cui risultato consente di evidenziare la presenza di eventuali errori trasmissivi. Il nodo ricevente elabora i bit del pacchetto usando lo stesso algoritmo per calcolare autonomamente la parola di controllo e confrontarla con quella trasmessa insieme al pacchetto: se i risultati non coincidono, il pacchetto è stato corrotto da errori trasmissivi e tipicamente viene scartato e non ritrasmesso verso il nodo successivo. La caratteristica comune a tutti gli algoritmi di controllo utilizzati è che la probabilità che la parola di controllo ricevuta in presenza di errori trasmissivi coincida con la parola di controllo ricalcolata dal nodo ricevente è praticamente nulla. Esistono alcuni algoritmi di controllo più sofisticati che oltre alla rilevazione degli errori sono in grado di correggerli, entro certi limiti: se è possibile correggerli tutti, il pacchetto viene ricostruito nella sua integrità e una volta eliminati gli errori trasmesso verso il nodo successivo. Esempi di questi algoritmi sono il Cyclic redundancy check (CRC), che è in grado di identificare la presenza di errori, e il Forward Error Correction (FEC) che è anche in grado di correggere tali errori.
Il meccanismo della trasmissione a pacchetti è ricorsivo, nel senso che il campo informativo di un pacchetto può essere a sua volta un altro pacchetto, consentendo così di realizzare una pila gerarchica a più livelliÈ il caso del modello ISO-OSI a sette livelli che sfrutta proprio questa caratteristica: il pacchetto del livello N viene imbustato e trasmesso su m pacchetti di livello N-1, che a loro volta vengono imbustati e trasmessi su p pacchetti di livello N-2 e così via, attribuendo a ciascun livello proprietà e funzionalità di rete specifiche e teoricamente indipendenti dai livelli superiori e inferiori. Vedi anche ..
Meccanismo di instradamento Quando un nodo intermedio detto commutatore di pacchetto riceve un pacchetto, esso decide qual è il percorso migliore che il pacchetto può prendere per raggiungere la sua destinazione in base alle informazioni presenti nelle tabelle di routing e ai risultati delle elaborazioni da parte dei protocolli di routing (se attivi). Questa strada può cambiare da pacchetto a pacchetto dipendentemente dalle condizioni della rete (congestione, malfunzionamento del link o del nodo, capacità massima dei link ecc.), per cui pacchetti appartenenti a uno stesso messaggio possono intraprendere anche percorsi distinti.
Problematiche Ritardo Un pacchetto che attraversa una rete subisce un ritardo, legato a quattro componenti fondamentali, non tutte deterministiche: Tempo di elaborazione, dipendente dal nodo: è il tempo necessario a ciascun nodo per processare il pacchetto e deciderne l'interfaccia di uscita. Se un nodo agisce a diversi livelli di pacchetto, ciascun livello aggiungerà una sua componente di ritardo. Tempo di trasmissione, dipendente dalla velocità di trasmissione: è il tempo necessario per trasmettere il pacchetto alla velocità della linea di trasmissione (link). È dato dal rapporto tra la lunghezza in byte del pacchetto e la velocità o capacità di linea. Tempo di latenza o di accodamento (queuing delay), dipendente dall'ingegneria del nodo: è dovuto al fatto che i pacchetti in uscita o in entrata non sempre vengono trasmessi/ricevuti immediatamente. Infatti la linea in uscita può essere occupata da altri pacchetti in corso di trasmissione/ricezione. In questo caso, il pacchetto viene salvato in una memoria temporanea del commutatore detta coda o buffer, per venir trasmesso appena possibile. Il tempo atteso dal pacchetto nella coda, detto anche ritardo di latenza, non ha una durata predefinita poiché cambia dinamicamente in funzione della dimensione della coda e della quantità momentanea di pacchetti da trasferire. Il ritardo di latenza può però essere caratterizzato statisticamente tramite distribuzione di probabilità e i modelli della teoria delle code. Tempo di propagazione, dipendente dal mezzo fisico: è il tempo necessario al segnale fisico per propagarsi lungo la linea di trasmissione fino al nodo successivo e da qui alla destinazione finale. Nei mezzi trasmissivi come rame o fibra ottica, i segnali si propagano a velocità confrontabili a quella della luce.
Le problematiche legate al ritardo sono sostanzialmente due: Alcune forme di comunicazione richiedono che il ritardo complessivo di trasferimento dei pacchetti (ritardo end-to-end) rimanga strettamente entro un limite massimo, pena effetti indesiderati se non distruttivi della comunicazione stessa. È il caso per esempio della trasmissione di telefonate su pacchetto (VoIP), in cui un ritardo eccessivo comporterebbe delle pause indesiderate durante la conversazione (l'ascoltatore percepisce nettamente un istante di silenzio prima di sentire la voce dell'interlocutore) e la necessità di ricorrere a circuiti di compensazione. Le variazioni del ritardo nel tempo (jitter), ossia il fatto che per un certo pacchetto il ritardo potrebbe essere diverso rispetto a un altro pacchetto appartenente alla stessa comunicazione, hanno una ripercussione nel nodo destinazione per la ricostruzione dell'integrità dell'informazione. Anche in questo caso, per alcune applicazioni, una variazione eccessiva può comportare distorsioni o perdite temporanee non accettabili. È il caso per esempio della trasmissione video su pacchetto, dove una variazione di ritardo eccessiva potrebbe risultare in forme di fermo immagine temporanee o in un degrado di qualità dell'immagine.
Esistono diversi meccanismi per cercare di attenuare o rendere controllabili gli effetti del ritardo. Per esempio, per ridurre o limitare il tempo di trasmissione, si può ricorrere a tecniche di tipo store and forward, per cui all'interno del nodo si attende il completamento della ricezione e dell'elaborazione del pacchetto prima di inviarlo alla coda di trasmissione.
Perdita di pacchetti Il meccanismo della commutazione di pacchetto non può generalmente garantire che tutti i pacchetti inviati arrivino a destinazione. La perdita di pacchetti può avvenire in seguito a diverse condizioni<ref></ref>: Guasti di nodo o di collegamento: i pacchetti in trasmissione durante l'evento di guasto vengono perduti e fino a quando il processo di reinstradamento non è terminato i pacchetti non giungono a destinazione. Errori di trasmissione: un pacchetto che è stato distorto durante la trasmissione e che non supera la verifica tramite la parola di controllo viene scartato.